[swift-evolution] Why doesn't Swift allow a variable and a function with the same name?

Sean Heber sean at fifthace.com
Mon Jan 30 15:21:04 CST 2017


I used to believe this was a problem, but once I internalized the idea that this ugliness was a signal to choose better variable and property names, it has ceased to be an issue for me and in fact, IMO, has become an asset of the language.

l8r
Sean


> On Jan 30, 2017, at 3:17 PM, Jaden Geller via swift-evolution <swift-evolution at swift.org> wrote:
> 
> I personally find it kind of weird that `let x = 0; do { let x = x + 1 }` is disallowed but `let x: Int? = 0; if let x = x { }` is allowed. The former case requires you first rename the variable you plan to shadow, inconveniently:
> 
> ```
> let x = 0
> do {
>   let tempX = x // ew
>   let x = tempX + 1
> }
> ```
> 
>> On Jan 30, 2017, at 11:56 AM, Robert Widmann via swift-evolution <swift-evolution at swift.org> wrote:
>> 
>> This seems like it’s running through the same check that disallows defining and calling a closure 
>> 
>> let randomFunc : () -> () = randomFunc()
>> 
>>> On Jan 30, 2017, at 2:37 PM, Michael Gubik via swift-evolution <swift-evolution at swift.org> wrote:
>>> 
>>> Example that does not compile:
>>> 
>>>            let randomArray = randomArray(withCapacity: 4096)
>>> 
>>> Compiler error: “Variable used within its own initial value”
>>> The variable name unfortunately clashes with the function name.
>>> 
>>> This problem forces the developer to think about an alternative name.
>>> IMHO that’s suboptimal since many times the most canonical naming would be one where these two go by the same name.
>>> 
>>> It’s not a big problem in practice but I wonder if there are plans to change this?
>>> 
>>> 
>>> Thanks,
>>> Michael Gubik
>>> 
>>> _______________________________________________
>>> swift-evolution mailing list
>>> swift-evolution at swift.org
>>> https://lists.swift.org/mailman/listinfo/swift-evolution
>> 
>> _______________________________________________
>> swift-evolution mailing list
>> swift-evolution at swift.org
>> https://lists.swift.org/mailman/listinfo/swift-evolution
> 
> _______________________________________________
> swift-evolution mailing list
> swift-evolution at swift.org
> https://lists.swift.org/mailman/listinfo/swift-evolution



More information about the swift-evolution mailing list