[swift-evolution] Thoughts regarding readable INTENT of Loop keywords

Pierre Monod-Broca pierre at monod-broca.fr
Thu Mar 31 06:46:32 CDT 2016


+1 with Taras

> Le 31 mars 2016 à 09:55, Taras Zakharko via swift-evolution <swift-evolution at swift.org> a écrit :
> 
> I do not see how this is more readable. The current for loop is perfectly readable and conveys the intent very well IMO: it executes a code block FOR every ELEMENT that is IN a SEQUENCE. In contrast, I find your proposal rather confusing: it combines a number of different constructions with different semantics and generally is less transparent. 
> 
> Best, 
> 
>  Taras
> 
>> On 30 Mar 2016, at 21:54, Nathanial Burton-Bradford via swift-evolution <swift-evolution at swift.org <mailto:swift-evolution at swift.org>> wrote:
>> 
>> Swift Control Flow using Loops 
>> 
>> One of Swifts strengths is clear, readable INTENT, conveyed by the languages Keyword tokens. For anyone new to programming, clear, readable intent, goes a long way in helping them master the language, by helping reduce logical/semantic errors caused by a misunderstanding of the names used in specifying the languages keyword tokens…
>> Swift’s control flow keywords can be ambiguous, in this respect, when conveying the functional intent of loop control logic, within the language.
>> 
>> I would like to open up discussion, therefore, regarding the possible renaming of Swift’s control flow keywords, with the hope that this leads to clearer INTENT regarding loops. 
>> 
>> 
>> Replace For-In with Loop Using 
>> 
>> for foo in d…y 
>> loop foo using d…y
>> 
>> For x in 1…5
>> loop x using 1…5
>> 
>> loop i=0 using i<10
>> 
>> loop i using 0..<10
>> 
>> 
>> 
>> For _ in 1 …power
>> ———->
>> loop using 1…power
>> 
>> “The underscore character (_) used in place of a loop variable causes the individual values to be ignored and does not provide access to the current value during each iteration of the loop.”
>> 
>> I feel underscore character (_) is confusing, semantically. 
>> 
>> 
>> let names = ["Anna", "Alex", "Brian", “Jack"]
>> for name in names {
>> ———-> loop names using name {
>>     print("Hello, \(name)!")
>> }
>> 
>> Note : loop ARRAY using ELEMENT(S) - which is logically consistent with ‘-using’ as last keyword instance.
>> 
>> let numberOfLegs = ["spider": 8, "ant": 6, "cat": 4]
>> for (animalName, legCount) in numberOfLegs {
>>     print("\(animalName)s have \(legCount) legs")
>> }
>> 
>> loop numberOfLegs using (animalName, legCount) {
>> print(“ \(animalName)s have \(legCount) Legs”)
>> }
>> 
>> Note : Again loop ARRAY using ELEMENT(S) - which is logically consistent with ‘-using’ as last keyword instance.
>> 
>> 
>> for (airportCode, airportName) in airports {
>> loop airports using (airportCode, airportName) 
>> for airportCode in airports.keys {
>> loop airports.keys using airportCode {
>>    
>> for airportName in airports.values {
>> loop airports.values using airportName {
>> 
>> for value in array[1..<array.count] {
>> loop array[1..<array.count] using value
>> 
>> ‘while’ using loop while 
>> 
>> loop while square < finalSquare {
>>     // roll the dice
>>     diceRoll += 1
>>     if diceRoll == 7 { diceRoll = 1 }
>>     // move by the rolled amount
>> 
>> Control transfer statements
>> 
>> repeat { 
>> ——> loop {
>>>> } while 
>> 
>> 
>> “Break
>> The break statement ends execution of an entire control flow statement immediately. ”
>> 
>> I propose replacing Break, in loops, with exit now (intent is explicit)
>> Note: Labeled Statements with break - 
>> break gameLoop exit now gameLoop
>> 
>> “Continue
>> The continue statement tells a loop to stop what it is doing and start again at the beginning of the next iteration through the loop.”
>> 
>> “switch character {
>>     case "a", "e", "i", "o", "u", " ":
>>         continue // Continue what? to next line? to end? to beginning?
>>     default:
>>         puzzleOutput.append(character)
>>     }”
>> 
>> I propose replacing continue with next cycle or next loop
>> 
>> 
>> “switch character {
>>     case "a", "e", "i", "o", "u", " ":
>>         next cycle // intent is explicit
>>     default:
>>         puzzleOutput.append(character)
>>     }”
>> 
>> Note: Labeled Statements with Continue - as per Break example, next cycle gameLoop 
>> 
>> 
>> _______________________________________________
>> swift-evolution mailing list
>> swift-evolution at swift.org <mailto: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

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20160331/fe6f9ea6/attachment.html>


More information about the swift-evolution mailing list