On weird proposals there's also the `for { } else { }` construct that has been put forward before.
On Wed, 2018-05-02 at 21:06 +0000, Michael Jones wrote: > Ok, weird proposal: Make the per-iteration update part of a for loop > change > from "assignment to assignment or boolean expression" to allow: > > *while COND do {...}:* > > for i:=0; x[i]<4; {...} > > > *do {...} while COND:* > > for i:= 0; ; x[i]<4 { ...} > > > On Wed, May 2, 2018 at 12:33 PM Louki Sumirniy < > louki.sumirniy.stal...@gmail.com> wrote: > > > > > It adds absolutely nothing, that's why it should not be accepted. > > It will > > lead to a divergence in the way it's used as well. However I think > > maybe > > run block once before first condition check would be a useful and > > powerful > > addition. Maybe it shows my age that I even know what do-while > > post-conditional loops are, and why they are useful. I have had to > > write > > these more wordy constructs for exactly this purpose several times > > in a > > project I am working on. > > > > If there could be some less verbose way to flag that the condition > > only be > > checked first run. As I am thinking about it I am thinking of some > > other > > ways too, such as adding an or clause in the conditional that only > > checks > > if it's the first run, since golang's and and or operators are just > > drop-throughs, well, more or less, I mean, the or operator just > > does both > > tests and runs the block directly if the first condition passes. > > Here's a > > rough sketch of it while I am thinking about it > > > > for w:= true; w || <cond>; w=false { > > ... > > } > > > > This will always run the first time and I can't be certain but I > > think > > that the compiler may skip the assignment second time since it is > > an > > assignment. Still wordy but it is a do-while loop, nevertheless. If > > the > > assignment is repeated each time it's still an overhead cost, > > however. Some > > kind of 'do this only once' hint to the compiler maybe. But you see > > what I > > mean. This is definitely a case of something Go could use as an > > improvement > > and if it was constructed correctly it would not break old code, > > but > > instead actually give people a way to improve it when refactoring > > later on. > > > > On Wednesday, 2 May 2018 20:43:11 UTC+3, Ian Lance Taylor wrote: > > > > > > > > > On Wed, May 2, 2018 at 2:48 AM, Hugh Fisher <hugo....@gmail.com> > > > wrote: > > > > > > > > > > > > On Tuesday, May 1, 2018 at 10:45:30 PM UTC+10, Ian Lance Taylor > > > > wrote: > > > > > > > > > > > > > > > > > > > > A `while` statement would presumably be exactly identical to > > > > > a `for` > > > > > statement with a single condition. So adding a `while` > > > > > statement > > > > > would not add any power to the language, and would add an > > > > > additional > > > > > keyword. All language choices are a cost benefit > > > > > decision. In this > > > > > case the benefit is a looping construct that some people will > > > > > find > > > > > clearer to read and write, and the cost is a new keyword that > > > > > everybody needs to learn, and that at this point in the > > > > > language's > > > > > evolution will likely break some, even if not much, existing > > > > > code. I > > > > > don't think the benefit is worth the cost. > > > > > > > > > As for not adding any power, that's why I mentioned if-then- > > > > else and > > > switch. > > > > > > > > Switch with boolean cases is the same as if then else. It's not > > > > an > > > obscure > > > > > > > > side effect either, the Go Tour cheerfully explains how to use > > > > it > > > instead of > > > > > > > > if-then-else if you prefer. > > > That is not the same thing, though. Yes, if-then-else and switch > > > do > > > similar things, but they have a different syntax and are > > > idiomatically > > > used in different ways. You can consider if-then-else as > > > syntactic > > > sugar for switch, if you like. It's OK for a language to have > > > some > > > syntactic sugar. > > > > > > But in this case you seem to be suggesting that we add `while > > > <cond> { > > > <body> }` as an exact duplicate of the existing language > > > construct > > > `for <cond> { <body> }`. That's not syntactic sugar. You are > > > suggesting that `while` just be a synonym for `for`. We don't > > > need > > > two different keywords that mean exactly the same thing. > > > > > > > > > > > > > > Hmm, think I will have a look at the formal change proposal > > > > process... > > > I encourage proposals but I can tell you upfront that this > > > proposal > > > will not be accepted. > > > > > > Ian > > > > > -- > > You received this message because you are subscribed to the Google > > Groups > > "golang-nuts" group. > > To unsubscribe from this group and stop receiving emails from it, > > send an > > email to golang-nuts+unsubscr...@googlegroups.com. > > For more options, visit https://groups.google.com/d/optout. > > > > -- > Michael T. Jones > michael.jo...@gmail.com > -- You received this message because you are subscribed to the Google Groups "golang-nuts" group. To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.