- - PR -
文字列をequalsで判定する時
投稿者 | 投稿内容 | ||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2008-02-12 16:22
ことぶきじーさんは日本語でとおっしゃっていますが、 文章の流れも、設計書の項目順も、この場合、英語でも同じですよ。 日本語: 「答え」が「正解」なら、ニューヨークへ! 英語: If the answer is correct, you will go NY! (より、自然には、If you answer this correctly,) ケント・ベック氏は、何らかの理由があって、 あえて不自然な順番で検査を行なったのであって、 英語圏では日本と順番が逆だという事実はありません。 その理由が何であれ、 僕は、それが「トリッキー」だと主張しているのです。 | ||||||||||||||||||||||||
|
投稿日時: 2008-02-12 16:32
nagiseさんだけでなくそっち派の人に質問ですが、
ブール値の検査を、
と書かずに、
と書くのですか? ふと、疑問に思ったので、質問です。。。 | ||||||||||||||||||||||||
|
投稿日時: 2008-02-12 17:02
揚げ足取りにしてはつまらないですね。 必ずしも以下のように書かないのは何故ですか? って聞くのと同じくらい。
[ メッセージ編集済み 編集者: Edosson 編集日時 2008-02-12 17:11 ] | ||||||||||||||||||||||||
|
投稿日時: 2008-02-12 17:31
まず、この前提が違います。 X. valueがnullであることがプログラム・ミスの場合 Y. valueがnullであるときにエラー処理を行なう場合 Z. valueがnullであっても良い場合 Xの場合は、アサーションではじきます。 Yの場合は、エラー値を返すなり、例外をスローするなりのエラー処理を行ないます。 Zの場合は、nullのときの動作を決めて、その動作をするようにします。 Aは、Yにあたります。 Bは、Zの一種で、 「valueはnullであっても良くて、その場合はfalseとして扱う」ということです。 Cは、考慮が漏れているので、XYZのどれかを決めること。
その点は、 コーディング規約で回避することではないし、回避できないと思います。 「必ずnullをチェックすること!」というのと、 「必ず比較対照を左に書くこと!」というのは同じで、 いづれの場合もプログラマはミスを犯します。
そういうことがあるので、例外処理を予めやっておくと言っているのです。 意図的にnullポインタ例外を送出したいのであれば、 予めやっておく例外処理の中に、その処理を記述します。
理由はif文が複雑になるからではありません。 アサーションとエラー処理と本処理を切り分けるためです。
考慮外の場合は、考慮することというのが基本です。
その辺の話は別のレスで書きましたが、 相対的に直感的なのは自然言語の順であったり、設計書の項目順であったり します。 コーディング規約で決められているから意識しないということは、 ないのではないかと思います。 | ||||||||||||||||||||||||
|
投稿日時: 2008-02-12 17:40
Edossonさん、
ということは、「"Hoge".equals(str)」と書く人と、 「0 == count」と書く人は別ということですか? 僕は、左辺に比較対照を置くという意味で、同一に扱って いました。 揚げ足というか、実際、書くんじゃないんですか? 「true == flag」と。。。 | ||||||||||||||||||||||||
|
投稿日時: 2008-02-12 17:51
私自身はC#の人ですが、このスレッドは興味深く拝見しています。
あぶぽんさんの疑問については以下のスレッドが参考になるかもしれません。 if条件式の右辺と左辺 脱線でしたらすみませんm(_ _)m [追加] #boolの比較だから揚げ足に見えただけで、 #intやStringの比較であればいいのかと思ったんだけど、違うのかなぁ。 [/追加] [ メッセージ編集済み 編集者: rain 編集日時 2008-02-12 18:07 ] | ||||||||||||||||||||||||
|
投稿日時: 2008-02-12 17:51
すみません。要点が抜けてました。
だって、気持ち悪いじゃないですか。 「hoge.isSleeping()」だと、左側が比較元ですから。。。 本来、こう書きたいのかと思ったのですが、 「true.isSleeping(hoge)」 無理なので、実際のところどうなのかと思って。 | ||||||||||||||||||||||||
|
投稿日時: 2008-02-12 17:57
揚げ足ですよ。
これでは、「if (hoge.isSleeping()) {」と書くのは 「if (hoge.isSleeping() == true) {」と書くとの同じだが、 「if (true == hoge.isSleeping()) {」と書くとのとは違う、 と書いているのと同じでしょう。 違うというのであれば 「if (hoge.isSleeping()) {」と書くのはだめで、 必ず「if (hoge.isSleeping() == true) {」と書かなければならない、 ということになるのでは? どっちにしても、つまらないですけどね。 |