- - PR -
if条件式の右辺と左辺
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2007-11-21 09:26
コーディングミスを防ぐですか、初めて聴きました、勉強になります。 でもC#で文字列比較するとき str1.Equals(str2) とは書かずにstr1==str2 と書くなあ。 でも実際Javaで間違えて == って書いちゃうことあるし、Equals 使った方がいいのかなあ。。w | ||||||||||||
|
投稿日時: 2007-11-21 09:34
私の場合は無意識に左に定数を置いてしまいますが、 主語・述語・目的語の並びのイメージで「読みやすい」と感じますね。 null == sだとnull「を」sと比較するというように読んでしまいます。 別にロジック上は違わないからそんなに困らないのだけれども。 たとえば秒をあらわす変数tが24時間と等しいか判断するなら t == 24 * 60 * 60 と書いてしまいますし、FizzBuzz問題なら i % 3 == 0 と書いてしまいます。主語が左で述語に相当する演算子、目的語という感じ。 無意識にコードを書くとこう出てくるので、少なくとも私の頭の中では そのようにロジックを考えているのでしょう。 もちろん主観ですし、代入による記述ミスの可能性を考えれば 定数を左に置くように習慣づける方がメリットがあるとは思いますよ。 | ||||||||||||
|
投稿日時: 2007-11-21 10:11
私もべるさんと同じ理由で、sを左に書きます。 それに、SQLServerで WHERE NULL IS s なんて書いたらエラーになっちゃいますしね。 null == s と書く方は数値との比較のときもsを右に書くのでしょうか? (2 == s) || (3 == s) ふと便乗質問させて頂たいのですが、皆さんは大小比較のときはどの様に書かれてます? 1.(1 < s) && (s < 10) 2.(10 > s) && (s > 1) 3.(s > 1) && (s < 10) 4.(1 < s) && (10 > s) 私は、1番で書いてます。 C系の人だとforステートメントのイメージから2番が多そうですが。 | ||||||||||||
|
投稿日時: 2007-11-21 10:12
私は、「右辺にnullを書く」というよりも「nullを左辺に書くということをしない」ということで、結局は右辺にnullを書きます。 もしも == と = の取り違えによる問題がないとしたら、if (null == s) と書きますか?スタックマシンなら null が始めに来ることもあるかもしれませんが、普通はやっぱり if (s == null) ではないでしょうか。 そして == と = の取り違えをどこまで対処しなければならないか、ということを考えてみます。こんなところで間違えていたら、大きなプログラムはとても書けないと思います。極端なたとえかもしれませんが、車のアクセルとブレーキを踏み間違えるからといって、アクセルを左側に置くという対処に近いような気がします。 という私もたまに if (s = null) のようなこと書いてしまうこともあり、型や言語によってはコンパイルも通ってしまい、バグとして悩んだこともまったくなかったわけではありません。しかし、それはとてもたくさんあるバグの中のひとつでしかありません。 if (null == s) だけを特別に対処するのは、なんとなく違和感があります。 また、コーディングをしている流れで、== の左辺と右辺を使い分けたいことがあります。こういうときに、null はかならず左辺、などというルールがあるとそのような使い分けができなくなります。
私は、これは意識していないです。 -- unibon {B73D0144-CD2A-11DA-8E06-0050DA15BC86} | ||||||||||||
|
投稿日時: 2007-11-21 10:25
昔の Microsoft も定数ではそのようにしていたようなので、今でもそうである人は残っているでしょうね。 単に null の時に意識して利用している人もいるとは思います。
最近は 1 か 3 しか見ないですね。
そうでしょうか? ベタ C/C++ をやる機会がまた最近多くなってきましたが 1. が多い印象を受けます。 脱線ついでに VB とかだと 1. は割合減って 3. が多くなります。 バラけてネストという選択肢はないんですね。(ショートサーキット評価ができない言語とかありますから...w) _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||||||
|
投稿日時: 2007-11-21 10:48
s==nullの話はs=nullと書き間違えても
今だとエディタで警告してくれたりするので あまり目くじらを立てなくなったというのもあります。
私は1か2かなぁ。不等号の向きを揃えるようにしますね。 推移的になっているほうが意味的に誤りにくい。 変数が左という揃え方だと3になるのでしょうけど、 数直線のイメージで書くならやっぱり1がいいな。 | ||||||||||||
|
投稿日時: 2007-11-21 11:34
「sが1と10の間にあるとき」というのを頭の中で「sが1より大きく、かつsが10より小さいとき」 と置き換えているからですかね。でも思い返すと、今でも1で書いてるときもあるような気がします。 特にこだわっていない/意識していない、ということかな。 | ||||||||||||
|
投稿日時: 2007-11-21 11:39
そんなnagiseさんにはPythonがお勧めです(冗) Pythonだと 「1 < s < 10」 という条件式が書けます。
個人的には昔は1で書いていたときもありましたが、 今は3で決まりですね。そもそもの話としてif文の条件式に複雑な式を 書かないので、(1でなく)3でも別に困る人いないよねという発想です。 3なのは、主役は左に書くという理由からです。 |