Re: Improved for each loop
 
On Sun, 12 Jul 2009, Patricia Shanahan wrote:
Mike Schilling wrote:
markspace wrote:
Just thinking out loud here, mostly.  I seem to write a lot of the
following type of loop:
  Object[] array ....
  for( int i = 0; i < array.length; i++ ) {
    ....
  }
What do you do with i, other than say
    Object o = array[i];
Assign to an element of array.
array[i] = new SomeClass(i);
Do a coordinated operation between two or more arrays.
array2[i] = array[i].toString();
However, I'm not convinced there enough simplification between the 
existing and proposed syntax to justify another for-loop variant.
I like it - i'd use it fairly often. I certainly miss it now, to the point 
where i often contemplate writing a little class to help me do it, 
something like:
class Range implements Iterable<Integer> {
 	private final int start;
 	private final int end;
 	public Range(int start, int end) {
 		this.start = start;
 		this.end = end;
 	}
 	public Range(int end) {
 		this(0, end);
 	}
 	public Range(Collection c) {
 		this(c.size());
 	}
 	public Range(CharSequence s) {
 		this(s.length());
 	}
 	public Range(Object[] arr) {
 		this(arr.length);
 	}
 	public Iterator<Integer> iterator() {
 		return new Iterator<Integer>() {
 			int i = start;
 			public Integer next() {
 				if (!hasNext()) throw new NoSuchElementException();
 				int x = i;
 				++i;
 				return x;
 			}
 			public boolean hasNext() {
 				return i < end;
 			}
 			public void remove() {
 				throw new UnsupportedOperationException():
 			}
 		}
 	}
}
The only problem is that use of it involves a box-unbox on every 
iteration.
The new syntax would be pure syntactic sugar - it wouldn't require any new 
classes, or bytecodes, or class format changes, or changes to any other 
part of the language. It seems like a harmless and beneficial addition to 
me.
tom
-- 
In other news, has anyone here read Blindness?  Does it get better after
the 30 page mark, is does the whole thing read like a sentimental fairy
tale for particularly slow children? -- Abigail