- - PR -
文字列の比較
1|2|3
次のページへ»
| 投稿者 | 投稿内容 | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2003-05-01 14:38
はじめまして、いつも見てばっかですが
今回はじめて投稿させていただきます。 今後、私にわかることがありましたら いろいろと投稿したいと思いますので 今後ともよろしくお願いします。 JAVAのコーディングで、文字列(string型)の比較し、 NULLもしくは空白の場合は処理を変えるということをやりたいと思い、 下記の2つの方法を考えました。 状況的には、NULL空白では処理を続けることができないため その前に判定をし、NULL空白の場合は処理を抜けるような コーディングをしています。 この2つではどちらかが良くどちらかが悪いと言うことが あるのでしょうか? また、他にも良い方法はありますでしょうか? ・方法1 if( string == null || string.equals("") ){ // NULL or 空白の場合の処理 } ・方法2 if( string == null || string.length() < 1 ) { // NULL or 空白の場合の処理 } 以上、よろしくお願いします。 | ||||||||||||
|
投稿日時: 2003-05-01 16:10
JDKのStringクラスのソースコードを見れば、どちらがよいかわかります。
答えは length() を利用する方です。 理由はソースを眺めてください。 | ||||||||||||
|
投稿日時: 2003-05-01 17:01
Stringクラスの実装を読んでしまうと、方法2のほうが速いのかなと思ってしまうんですが、方法1のほうがやっていること(やりたいこと)が直感的にわかりやすいと思います。
(もちろん、「length()<1」を直感で「equals("")」と読める人もいるでしょうけどね) string.equals("") の呼び出しが return false に達するまでの数ステップがどれくらいの影響なのかは知りませんが、個人的には1でいいんじゃないかなぁと思ったりします。 #でも2を否定するわけじゃないですよ。 | ||||||||||||
|
投稿日時: 2003-05-01 17:02
マイナスの値はないので length() == 0 のほうが微妙に早いかも
| ||||||||||||
|
投稿日時: 2003-05-01 17:21
どちらの実装にするにしろ
意味のわかりやすい名称をつけて IsNullみたいなメソッドにしておくと良いのではないでしょうか (リファクタリング参照) | ||||||||||||
|
投稿日時: 2003-05-01 18:34
unibon です。こんにちわ。
あと、 if (string == null || string.compareTo("") == 0) { } も見かけることがあります。 (なお、この手の議論では、 if (string == null || string == "") { } でも良いのでは/いや良くないのでは、という話も出るかもしれませんが、 これは別の問題に落としこめると思いますので、ここでは省きます。) ちなみに細かいですが、「方法2」は、数値 1 との比較ではなく、 0 と比較すべきのように感じます。 if( string == null || string.length() <= 0 ) や、あるいは length が負になることはないということを考慮して if( string == null || string.length() == 0 ) のような感じです。 #数値 1 に意味がない(0 かどうかが重要である)、という立場で見た場合です。 以上、いろいろ書いたのですが、 こういうのは、どうでもいいや、というのが率直な感想です。 議論を否定するわけではぜんぜんないのですが、 いくつかのバリエーションがあっても、 コードを読むときに頭の中で等価だとみなしてしまえばそれで良いと思います。 将来、なんらかの自動化ツールを使って後からフォーマットし直せる可能性が高いことも、 こう思う一因です(たぶんそんなに難しくないですよね)。 もっとも、表記を一通りに統一できればそれに越したことはないのですが、 現実には無理だと思うためです。 私ひとりでコーディングしていても、なぜかいつのまにか、 複数の方法が混じってしまっています(これが変? また、私の好みも多いですが、実行時の速さよりも見易さや統一性を重視したいと思います。 #が、上述のように、あまり気にしない。 #あえて最後に書きますが、好みが大きい要因である問題だと思います。 | ||||||||||||
|
投稿日時: 2003-05-02 14:01
私は
if (string == null || string == "") { このような記述を見つけたら怒り出します。 で、本題ですが。 if( string == null || string.length() == 0 ) がお勧めですしisNULL()実装してもいいと思います。 たとえばstaticなメソッドにしてこのように書くとか if ( StringHelper.isNULL( string ) ) で追加で1箇所だけこう書くこともできるようになりますから。 if( StringHelper.isNULL( string ) || string.trim().length() == 0 ) | ||||||||||||
|
投稿日時: 2003-05-06 10:40
unibon です。こんにちわ。
以下、好みの影響が多分にあると思いますが、 上記のような StringHelper.isNULL メソッドを使うと、 第三者がコードを見たときに、毎回 StringHelper.isNULL メソッドの定義を気にする必要が出てきます。 おそらく isNULL と名づけられたメソッドの挙動は、
であろうと思われますが、もしかしたら
のようになっているかもしれない、と懸念してしまうからです (この逆もあり。結局どっちかはパッと見だけでは分からない)。 これならわざわざ isNULL でまとめないほうが、 そういう懸念がなくて良いと思うためです。 StringHelper クラスを普遍的なものとして扱える強固なフレームワークがあれば良いのですが、 それがなかなか大変です。 | ||||||||||||
1|2|3
次のページへ»
