[swift-evolution] Review for: Remove C-style for-loops with	conditions and incrementers
    Michel Fortin 
    michel.fortin at michelf.ca
       
    Wed Dec  9 09:15:43 CST 2015
    
    
  
> Le 9 déc. 2015 à 2:04, Greg Parker via swift-evolution <swift-evolution at swift.org> a écrit :
> 
> 
>> On Dec 7, 2015, at 5:29 PM, Kevin Ballard via swift-evolution <swift-evolution at swift.org> wrote:
>> 
>> var i = initial
>> while cond(i) {
>>   defer { i = increment(i) }
> 
> Strange. Can the compiler optimizer handle that efficiently?
> 
> 
>> Michel Fortin wrote:
>> 
>> var i = 0
>> var first = true
>> while ({ () -> Bool in if first { first = false } else { i = increment(i) }; return cond(i) }()) {
>> }
> 
> I fear that teaching the C-style for loop is easier than teaching that.
True. But if the C-style for loop was not part of the language, would you feel obligated to teach an equivalent like the above?
Here's another idea though. We could have a while loop that looks like this:
	var i = 0
	while i < 5 reloop i += 1 {
	}
The reloop part would be executed upon reaching the end of the loop block, or whenever a continue is encountered: always just before reevaluating the condition. Unlike defer, the reloop part does not execute on break, return or throw.
It works just like a C-style for loop, minus the oddity regarding the scope of the loop variable.
-- 
Michel Fortin
michel.fortin at michelf.ca
https://michelf.ca
    
    
More information about the swift-evolution
mailing list