> On 11 May 2016, at 14:59, Vladimir.S <sva...@gmail.com> wrote:
> 
> On 11.05.2016 16:03, Haravikk wrote:
>> 
>>> On 11 May 2016, at 13:49, Vladimir.S via swift-evolution
>>> <swift-evolution@swift.org <mailto:swift-evolution@swift.org>> wrote:
>>> 
>>> public var a = 10 // OK, all is clear here
>>> public var a = "sdfsdf" // OK
>>> public var a = someFunction() // not OK - add type of `a` explicitly
>> 
>> I’m not clear on why you think the third one isn’t okay; Xcode can tell you
>> what the type was inferred to be, you can check the function signature (alt
>> - click the name) which will tell the type that it returns, as well as call
>> up any documentation about what it does.
> 
> Well.. First of all Swift != XCode, and the OSX is not the only system where 
> Swift is used ;-)

I don’t disagree, but nor is Xcode unique in helping to figure out what a type 
is; I think it’s okay to consider that any good modern IDE should be able to 
tell us what a type is if the compiler can. Besides, in the example, 
someFunction() could be buried somewhere hard to find, sure, or it could also 
be declared clearly earlier in the same file, or in a commonly used file for 
that module, in which case it’s probably very well known. I think it’s fine to 
infer the type in these cases because forcing the developer to supply it may 
not add anything, and in cases where it does it’s easy enough to just do this 
yourself; even if you’re maintaining unfamiliar code, it shouldn’t take long to 
look up the type and add it for others if you really feel you have to, but 
again, any good IDE should render it a non-issue.


As to the original issue (realised I hadn’t commented on it yet), I’m 
undecided; I like type inference for declarations as inference is very common 
for these, and I myself usually only supply a type if there’s ambiguity or I 
want something to become optional. My main concern is that default parameter 
values are relatively rare (compared to those without them), so it becomes an 
issue of consistency for me.
It might be different if for example we could omit type when it can inferred by 
other means as well, for example:

        protocol FooType {
                func someMethod(value:String) -> Void
        }

        struct Foo : FooType {
                func someMethod(value) -> Void { … } // value is a String
        }

But I’m not sure if I’d want to do that or not. Generally I like things that 
shorten function signatures, but on its own I’d prefer consistency over 
inference in this case I think.
_______________________________________________
swift-evolution mailing list
swift-evolution@swift.org
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to