I think Zed misses the point of idioms both in programming languages and in natural language.
Consider this snippet from natural language:
Paul: "Hey nice jacket, looks great on you"
Linus: "Word"
Linus used an idiom to articulate his sentiment. Why? Because the idiom, if used around someone who understands it, offers little uncertainty about the meaning while also being concise.
Linus could have said, "Why thank you. You really didn't have to say that. I appreciate the compliment but I'd rather not spend a lot of time discussing my jacket".
The idiom was useful because it added clarity, both by reducing the excess information going over the communication channel and also by clarifying the intent.
If you use a for loop in situations where the variables used by the loop are needed outside the loop, then there is no reduction in clarity b/c of the choice of a for loop. However, if you use a for loop when the variables used by the loop aren't needed outside the loop, you pollute the code with unnecessary ambiguity.
Ruby 1.8 had this problem with block variable scope and it was fixed in 1.9. Now in 1.9 you can write code like this:
x = 5
(1..3).each do |x|
x = 99
end
puts x #=> will print 5
Consider this snippet from natural language:
Paul: "Hey nice jacket, looks great on you"
Linus: "Word"
Linus used an idiom to articulate his sentiment. Why? Because the idiom, if used around someone who understands it, offers little uncertainty about the meaning while also being concise.
Linus could have said, "Why thank you. You really didn't have to say that. I appreciate the compliment but I'd rather not spend a lot of time discussing my jacket".
The idiom was useful because it added clarity, both by reducing the excess information going over the communication channel and also by clarifying the intent.
If you use a for loop in situations where the variables used by the loop are needed outside the loop, then there is no reduction in clarity b/c of the choice of a for loop. However, if you use a for loop when the variables used by the loop aren't needed outside the loop, you pollute the code with unnecessary ambiguity.
Ruby 1.8 had this problem with block variable scope and it was fixed in 1.9. Now in 1.9 you can write code like this: