TeX has a better looping construct.
I designed a small Java-like language for some experiments. I think it is a good idea to be able to say "this piece of code has no side-effects." (If you saw how I write C/++, you'd probably be surprised by what I just said.) There are various ways of isolating side-effects. My requirements were that (1) it must look much like Java and (2) there should be some way to contain side-effects. So I simply banned side-effects from expressions.
Then I proceeded to translate the following Java code.
while (i.hasNext()) { Object o = i.next(); // bla }
Method calls, however, possibly have side-effects so I could not use them in expressions. A method call is a statement in my toy language.
while (true) { boolean c = i.hasNext(); if (!c) break; Object o = i.next(); // bla }
This loop reminded me of \loop ... \if ... \repeat in . The keywords loop and repeat, however, are rather un-Java-like-esque. So I decided to say do {...} while (...) {...}
. This way, the normal do
-loop and the while
-loop are special cases obtained by omitting one of the bodies.
do boolean c = i.hasNext() while (c) { Object o = i.next(); // bla }
Note that in Java (and C/++) one has the illusion that loops test their condition at the beginning (while
) or at the end (do
) but never in the middle. This is not true, because expressions may have side-effects.
If languages would have do-while
-loops, then I'd probably break
far less often.
I decided to write this post after seeing another post about how to write a similar kind of loop in OCaml.
No comments:
Post a Comment
Note: (1) You need to have third-party cookies enabled in order to comment on Blogger. (2) Better to copy your comment before hitting publish/preview. Blogger sometimes eats comments on the first try, but the second works. Crazy Blogger.