4 ms·
I’m super excited to see range over functions - iterators. It’s one of the only things I miss from Java. It took me a few reads to understand how the work, but
by doctor_eval 3y ago
I’m super excited to see range over functions - iterators. It’s one of the only things I miss from Java.
It took me a few reads to understand how the work, but in typical Go style (once I got it) it was so much simpler than the equivalent in most other languages I’ve used. Looking forward to it being promoted out of experimental.
- simiones 3y agoYou find func Backward[E any](s []E) func(func(int, E) bool) { return func(yield func(int, E) bool) { for i := len(s)-1; i >= 0; i-- { if !yield(i, s[i]) { return } } } } simpler than C#'s IEnumerable<T> Backward(T[] s) { for i := s.length-1; i >= 0; i-- { yield return s[i]; } } I think that's quite hard to defend, honestly. Granted, Java doesn't have anything comparable, so I'm not sure what you're comparing this feature to.
- doctor_eval 3y agoObviously your C# code is simpler; yes, I’m comparing to Java. I haven’t seen this style of iterator previously.
- simiones 3y agoCompared to implementing the equivalent Iterator in Java, yes, the Go code is much simpler. But there are better solutions than Go's in several other languages - C#, Python, TypeScript, C++, even in Rust (experimentally). They all use the same or very similar syntax to my C# sample above, and have the same semantics (plus or minus some details about memory allocation and exception safety). Go, as usual, came late to this party, and is being needlessly different and clunkier.