- - PR -
文字列をequalsで判定する時
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2008-02-12 00:19
会議室で意思統一は無理でしょうね。 スキルも何もかも違う人間が集まっているのだから。 ただ、会議室で話し合うことにより、それぞれの書き方のメリット/デメリットは分かるわけで、それぞれのプロジェクトでコーディング規約を定めるときの判断材料にはなるでしょう。 コーディング規約を定めるときに、その理由も教えたほうが説得力は増すでしょうし。 メリット/デメリットを考慮することもなく、「好みの問題だから」と議論を打ち切ろうとするのは、単なる思考停止だと思います。 本当にどうでもいいと思っているなら、書き込む必要も見る必要もないわけですし。 | ||||||||||||
|
投稿日時: 2008-02-12 09:50
Javadocでは以下のようになっていますね。
| ||||||||||||
|
投稿日時: 2008-02-12 12:38
自分も予めnullに対して無害化や例外のスローを行いますが nullかどうかを気にしなくていい場合は
で十分ですし、また、nullを気にする場合でも 敢えてstrを前にする必要性がないと思うので、 おおむね"hoge"が前で構わないと思っています。 とはいえ、それほど拘るようなことでもないと思っていますね。 | ||||||||||||
|
投稿日時: 2008-02-12 12:50
それは、矛盾する方法ですね。 「予めnullに対して無害化や例外のスロー」を行なうのであれば、 nullかどうかを気にしていますよね。 詳しく言うと、 「nullかどうかを気にしなくていい」かどうかを気にしているということは、 nullかどうかを気にしているということです。 | ||||||||||||
|
投稿日時: 2008-02-12 13:23
A, Bどちらもよくないです。
可読性を重視し、かつ、Null例外を防止するため、JakartaのStringUtilsを使いましょう。 if (StringUtils.equals(testStr, "test")) 特にBは、現在、所属の現場で推奨していますが、コードレビューをする立場として、大変、読みづらくなっています。 日本語の流れとして、 ・"test"がtestStrのとき より ・testStrが"test"のとき のほうがわかりやすいです。 たいてい日本語で記述される設計書と照らし合わせる面でも、日本語の流れのほうがわかりやすいです。 よって、Bは、やめたほうがよいです。 保守の仕事をすれば、わかると思います。 | ||||||||||||
|
投稿日時: 2008-02-12 13:59
これは趣旨からは外れた答えだと思いますが、 以降は、まさにその通りだと思います。 たとえ、ケント・ベック氏がそうしろと言ったとしても(爆) | ||||||||||||
|
投稿日時: 2008-02-12 15:37
読み違えられているようなので、説明しておきます。 A. nullの場合にNullPointerExceptionをthrowしなくてはならないケース B. nullの場合は単にfalseとして扱えばよいケース があって、意図的に扱っているならなんら問題はない。 C. nullの考慮が漏れているケース の場合に、AとBのどっちに倒す?つまり、フェイルセーフにしようか、 ということを考えた場合の話になります。 str.equals("hoge")の場合、意図的にNullPointerを出したい場合、 そのままで例外がthrowされるのですが、それが意図された挙動かどうか わからないので、最低限コメントでその挙動を記述する必要があります。 そして、if文が複雑になるようだと、修正の際にバグを盛り込むことを 防ぐために、明示的に先頭でnullのチェックをしてNullPointerをthrowするようにする。 その場合、なんら問題はないわけですが、では、nullかどうかを 意識しない場合はどうなのか。というか、考慮外の場合はどうなのか。 とくにnullの場合について考えないケースは、多くの場合単にfalseであればよい。 つまり、デフォルトの挙動で考えれば"hoge".equals(str)のほうが都合がよく、 かつ、とくに意識する場合のみ、nullチェックを行えばよい。 これを矛盾と勘違いする理由は「意識して意識しない」ことを想定しているからですね。 常に「意識して意識しない」のであれば、それこそどちらでもよい。 「意識しないで意識しない」ケースとの違いをご理解いただきたい。 | ||||||||||||
|
投稿日時: 2008-02-12 15:45
プログラムを逐次日本語訳しながら読んでいるうちはそうかもしれません。 でも、それは英語の特定の表現が日本語では分かりにくいから使わないほうがよい、 漢文でレ点がつく表現を避けたほうがよい、とかそういう話題になってしまう。 前提がちょっと違うのではないでしょうか。 プログラム言語が流暢でない人を前提に「分かりやすい」を論じるのは 非常に難しく、それこそ人によるでしょうから、画一的な答えは出ないでしょうね。 すくなくとも英語圏の人でそういう理由で「わかりにくい」という意見に 同意する人はいないでしょうし。 その方針でいくとJavaを日本語の構文に基づいた言語に直せ!という話になっちゃう。 |