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