なでしこの仕様?
なでしこは文字列処理にそのパワーを遺憾なく発揮する言語ですが、その文字列の取り扱いに変な仕様があります。
それは長さ0の文字列を取り扱えないというものです。
例えばC言語だと、
#include
#includeint main(void){
char *a;
a="";
printf("%d\n",strlen(a));
printf("%p\n",a);
return 0;
}
だと、
0
0040A128
みたいな実行結果を得られますが、なでしこで、
Aとは文字列
A=「」
Aのバイト数を表示
POINTER(A)を表示
とすると、
0
0
となり、変数のデータ領域へのポインタはなにも指していない状態となります。
つまり、なでしこで変数に「」を代入することは、ポインタ変数へのNULLの代入と見ることが出来ます。また、その変数の持つデータを解放するともとれます。
これによる利点は、空配列でも空ハッシュでもすべて「」で比較することができる(「」はNULLなので何でも比較可能)事でしょうか。
欠点としては、もし文字ポインタを引数にとるDLL関数があり、そのポインタはヌルを許容できない場合で、どうしても長さ0の文字列を与えたい場合、「{\0}」という風にして渡さないといけないということぐらいでしょうか。
まあ、このくらいは無視できる程度ですかね。