文字列比較を == して死亡どころか大爆死
public boolena empty(String s) { return (s == null) || (s == ""); }
なんてJavaで書いちゃって死亡。 後者は "".equals(s)
が正しいですね。すいませんマジすいませんでした。おのれJava!!
とはいえ、JUnitでテストした関数だったんですよ。 問題ないじゃーんと。
assertTrue(empty(null)); // OK! assertTrue(empty("")); // OK!
ですが、この empty()
を本番コードで以下のように使っていました(イメージ)
final String csvData = ",,,"; // テストで空カラムデータを投げた final String[] cols = csvData.split(","); if(empty(cols[0])) return false; if(empty(cols[1])) return false; if(empty(cols[2])) return false; : :
ステップオーバーで if() を素通りする姿に 10秒ぐらい頭真っ白になったね! そうだよね! コード直書きの空文字 "" のインスタンスは同じ可能性があるけど、split() して誕生した空文字 "" はインスタンスまず別だよね! そりゃ false だよね!
…いやーもうなんか恥ずかしい。 おのれJava!!