digitalmars.D - auto init & what the code means
- spir (87/87) Dec 26 2010 Hello,
Hello, I have a problem with D's auto-init feature. When reading in someone else's= code int i; there is no way, I guess, to know whether this means "i is initialised to 0= " or "i is left undefined". For this reason, in the former case I do explic= itely initialise. Thus, int i =3D 0; // means initialised int i; // means undefined _for me_ But, as _for me_ emphasizes, another reader still cannot guess the latter c= ase. I would enjoy having an idiom to express this clearly. Without it, a possib= ility may be to use a conventional comment like int i; // undef in public code (esp Phobos) and spread the word about it. (Then, variable d= eclarations without init or comment are known to be by people who do not us= e this convention, and we know we need to search farther in code to interpr= et them.) Note that this problem does not apply to floats or pointers/refs, for which= .init is invalid for operating anyway. But there is a weird ambiguity abou= t null/uninitialised arrays & strings which behave like empty in most cases= . I would enjoy this to be clarified as well. For instance: int[] ints1 =3D []; ints1 ~=3D 1; // ok int[] ints2; ints2 ~=3D 1; // error So that arrays behave like pointed/ref'ed thingies. (But I'm unsure about t= he best way.) (*) Denis (*) This is also related to the boolean / null-compare value os arrays and = strings: void main() { writeln("array -- undef"); int[] ints1; writeln('(',ints1,')'); if (ints1) writeln("ints1"); if (ints1 !=3D null) writeln("ints1"); if (ints1 !is null) writeln("ints1"); ints1 ~=3D 1; writeln('(',ints1,')'); =20 writeln("array -- def"); int[] ints2 =3D []; writeln('(',ints2,')'); if (ints2) writeln("ints2"); if (ints2 !=3D null) writeln("ints2"); if (ints2 !is null) writeln("ints2"); ints2 ~=3D 1; writeln('(',ints2,')'); =20 writeln("string -- undef"); string str1; writeln('(',str1,')'); if (str1) writeln("str1"); if (str1 !=3D null) writeln("str1"); if (str1 !is null) writeln("str1"); str1 ~=3D '1'; writeln('(',str1,')'); =20 writeln("string -- def"); string str2 =3D ""; writeln('(',str2,')'); if (str2) writeln("str2"); if (str2 !=3D null) writeln("str2"); if (str2 !is null) writeln("str2"); str2 ~=3D '1'; writeln('(',str2,')'); } =20 =3D=3D> array -- undef () ([1]) array -- def () ([1]) string -- undef () (1) string -- def () str2 str2 (1) -- -- -- -- -- -- -- vit esse estrany =E2=98=A3 spir.wikidot.com
Dec 26 2010