若いうちの苦労は...

以下のJavaのメソッドは何をしようとしているだろうか?

public String join(String[] a) {
    String s = "";
    if a.length == 0 {
        return s;
    }
    for (int i = 0; i < a.length - 1; i++) {
        s = a[i] + ",";
    }
    return s + a[a.length - 1];
}


メソッドのパラメータとして、たとえば

{ "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" }

という配列が与えられた場合、メソッドの戻り値は

"Fri,Sat"

となる。だがこれがプログラマが期待した結果だとふつうは思わないだろう。プログラムを書き慣れた人ならすぐに7行目が

        s = s + a[i] + ",";

の書き誤りだと推測するのではないか。そう書けば引数で与えられたStringの配列の要素をカンマ区切りで結合して返すことになる。先日、若いプログラマがこの推測にいたらず、悩んでいる姿を見て不思議な感じがした。わりとよくあるコードの形だと思うんだけどなぁ。

まぁいまどきの言語には、わざわざこんなコードを書くまでもなく、はじめからメソッドが用意されているからなぁ。たとえばRubyでなら

a.join(",")

のように書けてしまうので、わざわざ改めてメソッドを作るまでもない。Javaでもcommons langがあれば

StringUtil.join(a, ",")

で済むしね。うーん、あんまり便利なものに慣れてしまうのも良し悪しということかな。