最後のカンマより。
配列の最後にカンマをつけてもつけなくてもよいというマニアックな言語仕様についての話題です。
どうやらC言語からの伝統らしく、C言語系の表記を受け継いでいるJavaでもこの仕様は存在します。
具体的なコードを見た方が分かりやすいですね。
int[] intArray = new int[]{
1,
2,
3,
};
この最後の"3,"の部分に注目。このカンマがあってもなくても、配列の大きさは3になります。
ちなみに、"3,,""とするとエラーとなります。最後の1個だけOKというわけです。
なんだかややこしい仕様のように思えますね…。
カンマで区切って出力するプログラム
ちょっと遠回りになりますが、まずはカンマで区切って数字を書き出すプログラムを考えて見ましょう。
"1,2,3"という文字を書き出そうとする場合、
public void hoge() {
final int MAX = 3;
for (int i=0; i<MAX; i++) {
System.out.print(i);
if (i < MAX -1) {
System.out.print(",");
}
}
}
というように、最後の1個だけカンマを出力しないようにするか、
public void hoge() {
final int MAX = 3;
for (int i=0; i<MAX; i++) {
if (i != 0) {
System.out.println(",");
}
System.out.println(i);
}
}
といったように、最初の1個だけ、前にカンマをつけないというプログラムにする必要があります。
N個の要素に対して、区切りはN-1個になるのです。このずれが非常にプログラムしにくい。
囲うなら簡単
要素と要素をカンマで区切って表現するのは面倒でした。ではプログラムにとって簡単な表現方法は何でしょうか?
要素を何かで囲うというがプログラム的に処理のしやすい記述方法となります。
public void hoge() {
final int MAX = 3;
for (int i=0; i<MAX; i++) {
System.out.print("[");
System.out.print(i);
System.out.print("]");
}
}
上記コードは"[1][2][3]"と出力するわけですが、このように何かで囲うという表現形式だと、
カンマ区切りのように条件分岐をする必要がありません。非常にすっきりと記述できますね。
さて、囲うということは要素の前と後ろに何かをくっつけるという処理になりますが、何をくっつけるかは自由に選べます。
ここで、前には何もつけず、後ろにはカンマを付けるという方法を選んでみましょう。
public void hoge() {
final int MAX = 3;
for (int i=0; i<MAX; i++) {
System.out.print(i);
System.out.print(",");
}
}
ほら、"1,2,3,"になりましたね。この表記法はカンマで区切っているのではないのです。
空白とカンマで囲っているのです。
投稿日時 : 2007年10月27日 12:12