- PR -

構文がわかりません

投稿者投稿内容
まいるどきゃっと
大ベテラン
会議室デビュー日: 2004/08/12
投稿数: 135
お住まい・勤務地: 群馬
投稿日時: 2005-10-13 12:49
引用:

つんけんさんの書き込み (2005-10-12 18:25) より:
こんなのはどうでしょう?
return Boolean.TRUE.equals(debug)

debugがnullならfalseになります。
見にくいですかねえ。



なかなかスマートでいいですね
個人的なコードに使わせてもらっていいですか?

ただ、仕事でメンテナンスする立場で見た場合はちょっと好ましくないです。
パッと見て何をやりたいのか分からないのと、書いた人がnullの時などを考慮してそう書いたのかたまたまうまく行っているのか分からないです。
メンテナンスする側としては、if文や三項演算子などの慣用的表現を使ってもらったほうが、ソースを追うときの流れを中断されなくて嬉しいですね。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-10-13 13:04
引用:

まいるどきゃっとさんの書き込み (2005-10-13 12:49) より:

パッと見て何をやりたいのか分からないのと、書いた人がnullの時などを考慮してそう書いたのかたまたまうまく行っているのか分からないです。


だからこそ、三項演算子は副作用が伴う式で用いてはならないとされていますよね。
2 つ以上の意味を持っている可能性がある式では利用してはいけないみたいです。
あ、某書籍に受け売りですけどねw

ついでにリンクです。
私も次の行に書いたりすることがあります。
http://hp.vector.co.jp/authors/VA010341/conditional.html

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
びしばし
大ベテラン
会議室デビュー日: 2002/03/13
投稿数: 181
投稿日時: 2005-10-13 14:18
引用:

まいるどきゃっとさんの書き込み (2005-10-13 12:49) より:
ただ、仕事でメンテナンスする立場で見た場合はちょっと好ましくないです。
パッと見て何をやりたいのか分からないのと、書いた人がnullの時などを考慮してそう書いたのかたまたまうまく行っているのか分からないです。



そうですか ? equals() はよく知られた、見たまんまの等値比較ですし、equals(null) が false を返すことは保証されています(そうでない equals() のオーバーライドはするべきではない、とも Effective Java などで言われていますね)から、まぐれでもこの書き方は簡潔でわかりやすいですよ。

String型で "constant string".equals(stringObject) とか書きません ?

# Boolean.TRUE.equals() まで思い至らなかった自分が情けない...
まいるどきゃっと
大ベテラン
会議室デビュー日: 2004/08/12
投稿数: 135
お住まい・勤務地: 群馬
投稿日時: 2005-10-13 15:54
引用:

びしばしさんの書き込み (2005-10-13 14:18) より:
引用:

まいるどきゃっとさんの書き込み (2005-10-13 12:49) より:
ただ、仕事でメンテナンスする立場で見た場合はちょっと好ましくないです。
パッと見て何をやりたいのか分からないのと、書いた人がnullの時などを考慮してそう書いたのかたまたまうまく行っているのか分からないです。



そうですか ? equals() はよく知られた、見たまんまの等値比較ですし、equals(null) が false を返すことは保証されています(そうでない equals() のオーバーライドはするべきではない、とも Effective Java などで言われていますね)から、まぐれでもこの書き方は簡潔でわかりやすいですよ。



その通りなんですが、そこまで頭を働かせなければならないってことでもありますし、コードをいじる人がみんなそういった知識を持ち合わせているわけではないです。

それに、書いた人がそれを知っていて意図的にそう書いているのか、それともnullを考慮し忘れてたけどたまたま結果的にうまく行っているのか分からないのは痛いです。
影響範囲が狭いメソッドなら大した問題じゃないですが、共通部品的なメソッドがnullのときの挙動が不明確だと、呼び出している部分すべて調べ上げないとならないのでそれがまた大変なんです。

引用:

String型で "constant string".equals(stringObject) とか書きません ?



その書き方は便利なんですが、「等比較時に定数を左に書くのは美しくない教」の信者なのでやりません

# 信仰上の問題なので、あまりつっこまないでくださいm(__)m

引用:

# Boolean.TRUE.equals() まで思い至らなかった自分が情けない...



同じく……orz
びしばし
大ベテラン
会議室デビュー日: 2002/03/13
投稿数: 181
投稿日時: 2005-10-13 16:40
引用:

まいるどきゃっとさんの書き込み (2005-10-13 15:54) より:
それに、書いた人がそれを知っていて意図的にそう書いているのか、それともnullを考慮し忘れてたけどたまたま結果的にうまく行っているのか分からないのは痛いです。



この部分前回も書いておられましたね。誤解していたようです。すみません。
確かに「本当にわかって書いてるの ?」と思ってしまうことはありますね。

# 今回はその前の部分のコードがアレなだけに...。
# 雑談じみてくるのでこのへんで。

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