I made some changes to use range over int in our code base and was 
pleasantly surprised with the improvement in readability.

We had quite a few instances where the number of iterations involved a 
function call which we don't want to repeat:

- for i, n := 0, f(); i < n; i++ {
+ for i := range f() {

A surprising amount where we no longer need the range variable including 
some nested loops:

- for repeat := 0; repeat < col.Repeat; repeat++ {
-  for j := 0; j < len(cats); j++ {
-  for k := 0; k < numStats; k++ {
+ for range col.Repeat {
+  for range len(cats) {
+  for k := range numStats {

There were also all the benchmarks:

- for n := 0; n < b.N; n++ {
+ for range b.N {

We could update the docs in https://pkg.go.dev/testing accordingly :-)


On Friday 23 February 2024 at 06:18:33 UTC Henry wrote:

This is one feature that provides little value beyond saving a few 
keystrokes and looking slightly nice, but with potential of increased 
complexity when we need to implement more important features to the 
language down the road. This is my opinion. It shouldn't have been added, 
but what was done is done. There is nothing we can do about it now. 

On Sunday, February 18, 2024 at 5:38:25 AM UTC+7 poweredb...@gmail.com 
wrote:

I agree with you.


Powered By Citizen 

On Saturday, February 17, 2024, 1:19 AM, Kurtis Rader <kra...@skepticism.us> 
wrote:

It's not just changing `k` inside the loop body that makes the 
transformation invalid -- your observation also applies to modifying `i` 
inside the loop body. Modifying either variable inside the loop body is 
extremely rare in my experience and doing so warrants a "dragons be here" 
comment. Still, your point is valid and anyone applying such a 
transformation should carefully evaluate the body of each loop to see if 
either variable might be modified by the loop body. Obviously it would be 
nice if a tool automated that analysis and transformation but I'm not going 
to hold my breath waiting for someone to implement that tool.

On Fri, Feb 16, 2024 at 11:06 PM Patrick Smith <pat42...@gmail.com> wrote:

On Fri, Feb 16, 2024 at 10:27 PM Amnon <amn...@gmail.com> wrote:

But now it is out, I think it is great, and have run 
    perl -pi -e 's/for (\w+) := 0; \1 < ([\w()]+); \1\+\+/for \1 := range 
\2/' $(git grep -l for) over my entire codebase to use it everywhere.


You know your own codebase, and maybe this was safe for you to do. But in 
general, blindly applying such a blanket change has the potential to cause 
bugs, as these two are not always equivalent:

for i := range k
for i := 0; i < k; i++ 

In particular, if k is changed inside the loop they may be very different. 
https://go.dev/play/p/kAHcmu7377I

(Yes, many people, myself included, would consider changing k inside such a 
loop to be bad coding style. But "bad style" doesn't mean it's not going to 
be done.)

-- 
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...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/golang-nuts/CAADvV_trGNxeLUma722wk-JOGnz42fJqM8%3DVZ36TKpr5s-%3DmOQ%40mail.gmail.com
 
<https://groups.google.com/d/msgid/golang-nuts/CAADvV_trGNxeLUma722wk-JOGnz42fJqM8%3DVZ36TKpr5s-%3DmOQ%40mail.gmail.com?utm_medium=email&utm_source=footer>
.



-- 
Kurtis Rader
Caretaker of the exceptional canines Junior and Hank

-- 
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...@googlegroups.com.

To view this discussion on the web visit 
https://groups.google.com/d/msgid/golang-nuts/CABx2%3DD9Hyjj_N9KjY6XfFH0ZUt55f27VCcZQSj_DyX36gzrX1g%40mail.gmail.com
 
<https://groups.google.com/d/msgid/golang-nuts/CABx2%3DD9Hyjj_N9KjY6XfFH0ZUt55f27VCcZQSj_DyX36gzrX1g%40mail.gmail.com?utm_medium=email&utm_source=footer>
.

-- 
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.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/golang-nuts/d863f3f0-454b-4aac-b6fa-11bb152cb209n%40googlegroups.com.

Reply via email to