digitalmars.D - Array-bound indexes
- bearophile (22/22) Oct 31 2010 I keep a list of my bugs, in years some of my bugs has come from using a...
I keep a list of my bugs, in years some of my bugs has come from using an index
on the wrong array and relates mistakes.
D avoids several of those C bugs using the foreach syntax, that keeps the code
more DRY and removes the possibility of some mistakes:
This is the cleaner and safer:
foreach (x; array) {
This is safe still:
foreach (i, ref item; array) {
This is a bit less tidy, but better than the C for loop still:
foreach (i; 0 .. array.length) {
But in some situations (even when foreach is used) the algorithm is fiddly and
not simple. In such situations an annotation to tie an index to the indexes
domain of a specific array may help:
auto arr1 = new int[5];
domain(arr1) int i;
auto arr2 = new int[5];
domain(arr2) int j;
i is bounded in 0 .. arr1.length
j is bounded in 0 .. arr2.length
arr1[i] = 0; // compiles
arr1[j] = 0; // compile-time error, because j is the index of arr2
arr1[i + 1] = 0; // compiles, unless inferred as out of bounds
arr1[i + j] = 0; // compiles, unless inferred as out of bounds
I don't know how much useful this may be.
Bye,
bearophile
Oct 31 2010








bearophile <bearophileHUGS lycos.com>