- PR -

文字列をequalsで判定する時

投稿者投稿内容
あぶぽん
大ベテラン
会議室デビュー日: 2005/10/20
投稿数: 205
投稿日時: 2008-02-13 11:21
nagiseさん、

再三ながら、感服いたしました。

そこまで意見が一致しているのに、結論が違うんですね。

# いちいち、引用しませんが、まさにその通りなんですよ。

それでいて、結論が違う理由はここにあるのでしょう。

引用:

nagiseさんの書き込み (2008-02-13 10:34) より:
さて、仕事でプログラムをやっていると、他人のソースなどもよく見ることになるわけですが、
そのなかで頻繁に見かけるミスというものがあります。
そのひとつに、文字列のequals比較の際のnullの考慮漏れです。
for文の条件判断の誤りも比較的多く見かけるミス。境界値バグという奴ですね。



この点に関して意義はありませんが、
そういったミスにどう対応するかという点で、

nagiseさんも、

引用:

すでに何度も出ているけどnullかどうかは冒頭でチェックするのが通常なので、



とおっしゃっているので、まず、冒頭(など)でチェックするという
認識は同じかと思います。
(これは省けません)

しかし、それでも「抜け」があった場合、どうするか?

↑これに対する対処法の観点が異なるのだと思います。

僕(A派)は、

 ・自然言語などに近く感覚的にミスを犯し難い書き方をする

ということで、対処しようとしています。

nagiseさん(B派)は、

 ・プログラミング言語仕様の特性を生かして多くの場合ミスにならない記述を選択する

という方法で対処しようとしているのではないでしょうか。

そこで、僕(A派)の主張は、

 「いづれの場合もプログラマはミスを犯す可能性は残るのだから、
  自然言語に近い形にしようよ」

ということで、nagiseさん(B派)の主張は、

 「いづれの場合もプログラマはミスを犯すけれど
  ミスを犯しても多くの場合は問題にならない方法に慣れてしまおう」

ということかと思います。

いづれも一理ありで、
前提としてエラー処理は別途、行なわれているものとすると、
どちらも不正解ではないと思います。

ただ、B派の人がエラー処理を軽く見がちであるとすると、
それも問題視する要素です。

実際、「楽ちん」だとか「コードが短い」、「エラーチェックが不要」
といった発言は、その傾向を示しているかと思います。

※ これは僕の想定で書いたものですので、B派の意見で違うところがあれば
  訂正してください。
あぶぽん
大ベテラン
会議室デビュー日: 2005/10/20
投稿数: 205
投稿日時: 2008-02-13 11:35
引用:

Edossonさんの書き込み (2008-02-13 11:16) より:
引用:

あぶぽんさんの書き込み (2008-02-13 09:37) より:
 A派:str.equals("Hoge")
 B派:"Hoge".equals(str)


AとかBじゃ、いつまた入れ替わるかわかりませんよ。



A、Bと呼ぶのは、
名称に意味を持たせたくないからです。

これは、アルファベット順ではなく、血液型みたいなものだと
捉えてください。

僕も、Aが優れていてBが劣っている、あるいは、
Bが優れていてAが劣っているとは一切考えず命名しています。

長島茂雄も野茂英雄も横山やすし(笑)もB型です。

ダウンタウンのまっちゃんはB型で、浜ちゃんはA型です。

そんな感覚で!
Edosson
ぬし
会議室デビュー日: 2004/04/30
投稿数: 675
投稿日時: 2008-02-13 11:44
引用:

あぶぽんさんの書き込み (2008-02-13 09:37) より:

僕も、Aが優れていてBが劣っている、あるいは、
Bが優れていてAが劣っているとは一切考えず命名しています。


こんな、誰かさんのが自分の頭の中から取りだしてきたものでしか
ないものを放り出しておいて、よく言うよ。
引用:

ただ、B派の人がエラー処理を軽く見がちであるとすると、
それも問題視する要素です。



[ メッセージ編集済み 編集者: Edosson 編集日時 2008-02-13 11:45 ]
nagise
ぬし
会議室デビュー日: 2006/05/19
投稿数: 1141
投稿日時: 2008-02-13 12:04
2008-02-13 11:21のあぶぽんさんの発言で私の言いたいことは
おおむね言い尽くされていますね。

重きを置くポイントで結論が変わることなどよくあることです。
そして、そういった前提パラメータで変わるがゆえに絶対的な白黒を
つけられないことのほうが世の中は多いわけです。

安易に1元的なパラメータで優劣を問うような価値判断は危険です。
私も自分なら普段は文字列定数を前に置く書き方をすることが多い、
というだけで「そうしなければならない」と言うつもりはない。
そういう意味で派閥なんてどうでもいい。

さらには、A派だとこう考える、B派だとこう考える、といった傾向を定義することは
先入観をどのように作るかを論じているようなものです。
あぶぽん
大ベテラン
会議室デビュー日: 2005/10/20
投稿数: 205
投稿日時: 2008-02-13 12:11
引用:

Edossonさんの書き込み (2008-02-13 11:44) より:
引用:

あぶぽんさんの書き込み (2008-02-13 09:37) より:
僕も、Aが優れていてBが劣っている、あるいは、
Bが優れていてAが劣っているとは一切考えず命名しています。


こんな、誰かさんのが自分の頭の中から取りだしてきたものでしか
ないものを放り出しておいて、よく言うよ。



では、貫地谷しほり派と京本政樹派にしましょうか?
(「ちりとてちん」観てない人には分からないか。。。観てる人にも。。。)
あぶぽん
大ベテラン
会議室デビュー日: 2005/10/20
投稿数: 205
投稿日時: 2008-02-13 12:22
引用:

nagiseさんの書き込み (2008-02-13 12:04) より:
2008-02-13 11:21のあぶぽんさんの発言で私の言いたいことは
おおむね言い尽くされていますね。



僕もこれ以上付け加えることはありません。

白黒というより、元スレッドの「できるプログラマの方が」というのに
過剰反応しただけです。

 B派(京本政樹派?)=できるプログラマ

という図式ではやりづらいなと思いました。


引用:

さらには、A派だとこう考える、B派だとこう考える、といった傾向を定義することは
先入観をどのように作るかを論じているようなものです。



たしかに、前例も「過去のプロジェクトでこうだった」というだけで、
派閥には関係なかったですね。

ただ、歴史的にA派は古いですが、
「古臭い」という観念は違うと思いますよ。
(nagiseさんに言っている訳ではありません)
未記入
大ベテラン
会議室デビュー日: 2008/02/07
投稿数: 115
投稿日時: 2008-02-13 12:27
引用:

まず、冒頭(など)でチェックするという認識は同じかと思います。(これは省けません)しかし、それでも「抜け」があった場合、どうするか? (B派)は、 ・プログラミング言語仕様の特性を生かして多くの場合ミスにならない記述を選択する という方法で対処しようとしているのではないでしょうか。


多くの場合ミスにならない記述って "test".equals(str) という書き方のことですか?

だとしたら、ちょっと違うんじゃないの。私は、"test".equals(str) という書き方をするときは null チェックはおこないません。なぜなら、null が与えられた場合でも false が返れば十分という場合にしか、この書き方をしないからです。

null チェックをするときは、str.equals("test") と書きます。私は、インスタンスの存在保証ができて楽チンだから "test".equals(str) を使っているだけ。主体が左だとか右だとかに一切こだわっていません。

str.equals("test") と書いたり、"test".equals(str) と書いたりするのは統一感がなくて気持ち悪い? そうかな? 別の考え方もありますよ。普段は null チェックをして、str.equals("test") と書いているのに、部分的に "test".equals(str) と書いてある。それはそれで、書き分けてることに意図があるとは思えませんかね。

いままでは、null も許容したいときに "test".equals(str) と書くもんだと思い込んでいました。このスレを読むと規約統一とかのために常に "test".equals(str) と書く人もいるようですね。今後は、他人のコードで "test".equals(str) を見つけても、null を許容するに違いないという思い込みは改めないといけないなあ。
あぶぽん
大ベテラン
会議室デビュー日: 2005/10/20
投稿数: 205
投稿日時: 2008-02-13 12:36
引用:

未記入さんの書き込み (2008-02-13 12:27) より:
普段は null チェックをして、str.equals("test") と書いているのに、部分的に "test".equals(str) と書いてある。それはそれで、書き分けてることに意図があるとは思えませんかね。



そう言われると終われないなぁ

引用:

いままでは、null も許容したいときに "test".equals(str) と書くもんだと思い込んでいました。



それって、どこから来た考えなのですか?

何か出処があるのかオリジナルなのか。。。

出処があるなら一度、見てみたいですし、

オリジナルなら、「新人類」とか「ニュータイプ」ということでしょうか?
つまり、A派に統一するなどという考えは、今まで持ったことがないということですか?

スキルアップ/キャリアアップ(JOB@IT)