The complaint that you have about Javascript is more a function of it not being 
a strongly typed language.  If you were to write a function with the type of 
return specified and the code inside the function (because of a single 
character) end up changing type for the return value or a future expression 
that was not expecting boolean…. then it would not compile.

> On 2015-12-20, at 13:35:42, Charles Constant via swift-evolution 
> <swift-evolution@swift.org> wrote:
> 
> > keeping expressions and statements as separate concepts
> 
> I seriously could not care less about that.
> 
> Wait wait, I'm exaggerating! I wouldn't want Swift to become a language like 
> Javascript where you forget to type a single character, and discover your 
> program runs without complaint (assigning some bizarre boolean value as a 
> result).
> 
> But if we're talking about the 'Switch' statement, as originally proposed, it 
> takes a lot more characters, and luck, to get your app to compile and run. 
> For me, I'd way rather have the convenience. As far as I'm concerned, unless 
> I'm choosing a variable name, the more I have to type, the more likely I'm 
> going to make a mistake.
> 
> This is why I think the ternary, for example, gets a bad rap (a bad rap *at 
> the moment* anyway. I can't keep track, are "goto" and OOP bad this year?). 
> The clarity you gain with a ternary is the fact that "this statement exists 
> to assign a value to Foo." You break that into several lines, and that 
> clarity can evaporate into the ether.
> 
> So the reason I like your proposal, is that I want a way to preserve that 
> clarity of "this line exists to assign a value to Foo" when I'm mapping 
> something. The existing options, i.e.: the alternatives about I complained 
> earlier in this thread, leave me with extra code whose purpose is solely to 
> support that assignment to Foo. So, let's say I do it by extending an enum 
> with an init that has a corresponding set of values... the purpose of that 
> extension is no longer as clear (e.g.: "this init exists to support a line, 
> somewhere else in this file, that assigns a value to Foo"). If I use a Switch 
> statement, as it currently exists, it's a bunch of lines - and don't forget 
> that "let Foo" needs to be declared *before* the Switch statement because of 
> scope... it's so much more complicated than your proposal.
> 
> I don't know if I added anything helpful here other than complaining :) 
> Needless to say, I still support your proposal 
> 
> 
> 
> 
> On Sat, Dec 19, 2015 at 9:57 PM, Paul Ossenbruggen via swift-evolution 
> <swift-evolution@swift.org <mailto:swift-evolution@swift.org>> wrote:
> 
>> On Dec 19, 2015, at 8:37 PM, Dennis Lysenko via swift-evolution 
>> <swift-evolution@swift.org <mailto:swift-evolution@swift.org>> wrote:
>> 
>> +1 to Jordan's points as well. 
>> 
>> Generally speaking, there is clearly a wide variety of things that cause 
>> people to be interested in this particular proposal and I don't think we can 
>> reconcile all of them. For example, I think that "collapsing an if statement 
>> into one line" isn't a good enough reason to introduce the clutter and 
>> potential for abuse of the original ternary syntax into a codebase, so I 
>> generally float the idea to ban it from projects I'm involved in as soon as 
>> I see it pop up in one. At the same time, there seem to be people who are 
>> enamored with the concept, and maybe instead they talk in this thread 
>> because they want a way to condense a switch statement into one line. And 
>> still others think that there is no rush to think about getting rid of 
>> ternary, unless we come up with something equally concise or with 
>> significant advantages to warrant removing it (all valid points).
>> 
>> I'm not against Paul's idea, but if it matters at all (i.e. if you are 
>> worried other people will think like me), if this syntax is released, I will 
>> most likely float the idea of opting out of it immediately to my project 
>> collaborators. 
>> 
>> While interesting for quick, proof of concept coding sessions, it already 
>> has some of the readability and abusability disadvantages already present in 
>> ternary, and it's still just in the proposal stage. 
>> 
>> I only hope that this doesn't preclude progress on turning fully-qualified 
>> (and indented) statements into expressions.
> 
> Good feedback!
> 
> Personally, I kind of hope that that is not the direction of Swift. I think 
> there is quite a bit of value in keeping expressions and statements as 
> separate concepts. If you need to do a bunch of things to get the result of 
> an expression then use the statement construct or move it into a method. 
> 
> Having statements that act as expressions encourages code that has side 
> effects, which goes against one of the core concepts of functional 
> programming. If I am working on a team, and someone wants to add some new 
> feature and they see a big indented “if” with braces, they will just stick it 
> in there and ignore that it is a functional approach. That new statement they 
> add may add a bunch of side effects and add bugs to the code. If it is an 
> expression that temptation will be less likely. They will see that this code 
> is intended to work as an expression and won’t be able to just stick another 
> statement with a bunch of side effects into it. 
> 
> My proposal is about making expressions into first class citizens in terms of 
> control flow. Its main purpose is definitely not about doing things on one 
> line, that is just a side benefit if it works for your particular situation. 
> This proposal supports and encourages multiline formatting and I think 
> actually makes things cleaner and clearer than the statement forms. 
> 
> But this feedback and Jordan’s is making me think that the Hybrid approach in 
> Alternatives Considered may be more appealing to everyone. I was thinking 
> conciseness might be preferable given some of the feedback I got from Chris 
> and others, but after reading some other threads, clarity wins out over 
> conciseness. This alternative may win for clarity. So I might go back and 
> rethink that, but before I do that, I hope that more people could tell me if 
> they like it better or do they like the ?( syntax better.
> 
> - Paul
> 
> 
>> 
>> On Sat, Dec 19, 2015 at 10:57 PM Dave Abrahams via swift-evolution 
>> <swift-evolution@swift.org <mailto:swift-evolution@swift.org>> wrote:
>> 
>> > On Dec 19, 2015, at 7:55 PM, Jordan Rose via swift-evolution 
>> > <swift-evolution@swift.org <mailto:swift-evolution@swift.org>> wrote:
>> >
>> > It's a nice, consistent proposal, but I don't feel like this solves any of 
>> > the complaints about the existing ternary operator:
>> >
>> > - It's not obvious what it does when you first learn it.
>> > - The '?' doesn't have anything to do with Optionals.
>> >
>> > It is a way to put 'switch' into an expression. I'm not a fan of the two 
>> > different colons, but that's "just" syntax.
>> 
>> +1 to all that
>> 
>> > Jordan
>> >
>> >> On Dec 18, 2015, at 14:04 , Paul Ossenbruggen via swift-evolution 
>> >> <swift-evolution@swift.org <mailto:swift-evolution@swift.org>> wrote:
>> >>
>> >> All,
>> >>
>> >> I think, I finally might have the answer to improving ternary, with such 
>> >> a bold statement come some pretty high expectations but I think, I might 
>> >> actually have done it this time :-)
>> >>
>> >> I am calling it the Demux Expression, it builds on the benefits of 
>> >> ternary and switch while improving on those.
>> >>
>> >> https://github.com/possen/swift-evolution/blob/master/proposals/0024.md 
>> >> <https://github.com/possen/swift-evolution/blob/master/proposals/0024.md>
>> >>
>> >> This is a first draft, thanks in advance for feedback!
>> >>
>> >> - Paul
>> >> _______________________________________________
>> >> swift-evolution mailing list
>> >> swift-evolution@swift.org <mailto:swift-evolution@swift.org>
>> >> https://lists.swift.org/mailman/listinfo/swift-evolution 
>> >> <https://lists.swift.org/mailman/listinfo/swift-evolution>
>> >
>> > _______________________________________________
>> > swift-evolution mailing list
>> > swift-evolution@swift.org <mailto:swift-evolution@swift.org>
>> > https://lists.swift.org/mailman/listinfo/swift-evolution 
>> > <https://lists.swift.org/mailman/listinfo/swift-evolution>
>> 
>> -Dave
>> 
>> 
>> 
>> _______________________________________________
>> swift-evolution mailing list
>> swift-evolution@swift.org <mailto:swift-evolution@swift.org>
>> https://lists.swift.org/mailman/listinfo/swift-evolution 
>> <https://lists.swift.org/mailman/listinfo/swift-evolution>
>>  _______________________________________________
>> swift-evolution mailing list
>> swift-evolution@swift.org <mailto:swift-evolution@swift.org>
>> https://lists.swift.org/mailman/listinfo/swift-evolution 
>> <https://lists.swift.org/mailman/listinfo/swift-evolution>
> 
> 
> _______________________________________________
> swift-evolution mailing list
> swift-evolution@swift.org <mailto:swift-evolution@swift.org>
> https://lists.swift.org/mailman/listinfo/swift-evolution 
> <https://lists.swift.org/mailman/listinfo/swift-evolution>
> 
> 
>  _______________________________________________
> swift-evolution mailing list
> swift-evolution@swift.org <mailto:swift-evolution@swift.org>
> https://lists.swift.org/mailman/listinfo/swift-evolution 
> <https://lists.swift.org/mailman/listinfo/swift-evolution>
_______________________________________________
swift-evolution mailing list
swift-evolution@swift.org
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to