- PR -

if条件式の右辺と左辺

投稿者投稿内容
べる
ぬし
会議室デビュー日: 2003/09/20
投稿数: 1093
投稿日時: 2007-11-21 09:26
引用:
右辺にnullを書く人は、なんででしょうね?

私は「s が null だったら」という直感にあっているから、という理由でsを左に書きます。

コーディングミスを防ぐですか、初めて聴きました、勉強になります。

でもC#で文字列比較するとき str1.Equals(str2) とは書かずにstr1==str2 と書くなあ。
でも実際Javaで間違えて == って書いちゃうことあるし、Equals 使った方がいいのかなあ。。w
nagise
ぬし
会議室デビュー日: 2006/05/19
投稿数: 1141
投稿日時: 2007-11-21 09:34
引用:

Rayさんの書き込み (2007-11-21 02:39) より:

逆に…
右辺にnullを書く人は、なんででしょうね?
代入の時の書き方を意識しているのでしょうか。



私の場合は無意識に左に定数を置いてしまいますが、
主語・述語・目的語の並びのイメージで「読みやすい」と感じますね。
null == sだとnull「を」sと比較するというように読んでしまいます。
別にロジック上は違わないからそんなに困らないのだけれども。

たとえば秒をあらわす変数tが24時間と等しいか判断するなら
t == 24 * 60 * 60
と書いてしまいますし、FizzBuzz問題なら
i % 3 == 0
と書いてしまいます。主語が左で述語に相当する演算子、目的語という感じ。
無意識にコードを書くとこう出てくるので、少なくとも私の頭の中では
そのようにロジックを考えているのでしょう。

もちろん主観ですし、代入による記述ミスの可能性を考えれば
定数を左に置くように習慣づける方がメリットがあるとは思いますよ。
tkrn
ベテラン
会議室デビュー日: 2005/10/25
投稿数: 61
投稿日時: 2007-11-21 10:11
引用:

引用:

右辺にnullを書く人は、なんででしょうね?



私は「s が null だったら」という直感にあっているから、という理由でsを左に書きます。



私もべるさんと同じ理由で、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番が多そうですが。
unibon
ぬし
会議室デビュー日: 2002/08/22
投稿数: 1532
お住まい・勤務地: 美人谷        良回答(20pt)
投稿日時: 2007-11-21 10:12
引用:

Rayさんの書き込み (2007-11-21 02:39) より:
逆に…
右辺にnullを書く人は、なんででしょうね?


私は、「右辺にnullを書く」というよりも「nullを左辺に書くということをしない」ということで、結局は右辺にnullを書きます。

もしも == と = の取り違えによる問題がないとしたら、if (null == s) と書きますか?スタックマシンなら null が始めに来ることもあるかもしれませんが、普通はやっぱり if (s == null) ではないでしょうか。

そして == と = の取り違えをどこまで対処しなければならないか、ということを考えてみます。こんなところで間違えていたら、大きなプログラムはとても書けないと思います。極端なたとえかもしれませんが、車のアクセルとブレーキを踏み間違えるからといって、アクセルを左側に置くという対処に近いような気がします。

という私もたまに if (s = null) のようなこと書いてしまうこともあり、型や言語によってはコンパイルも通ってしまい、バグとして悩んだこともまったくなかったわけではありません。しかし、それはとてもたくさんあるバグの中のひとつでしかありません。
if (null == s) だけを特別に対処するのは、なんとなく違和感があります。

また、コーディングをしている流れで、== の左辺と右辺を使い分けたいことがあります。こういうときに、null はかならず左辺、などというルールがあるとそのような使い分けができなくなります。

引用:

Rayさんの書き込み (2007-11-21 02:39) より:
代入の時の書き方を意識しているのでしょうか。


私は、これは意識していないです。

--
unibon {B73D0144-CD2A-11DA-8E06-0050DA15BC86}
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2007-11-21 10:25
引用:

tkrnさんの書き込み (2007-11-21 10:11) より:

null == s と書く方は数値との比較のときもsを右に書くのでしょうか?
(2 == s) || (3 == s)


昔の Microsoft も定数ではそのようにしていたようなので、今でもそうである人は残っているでしょうね。 単に null の時に意識して利用している人もいるとは思います。

引用:

ふと便乗質問させて頂たいのですが、皆さんは大小比較のときはどの様に書かれてます?
1.(1 < s) && (s < 10)
2.(10 > s) && (s > 1)
3.(s > 1) && (s < 10)
4.(1 < s) && (10 > s)


最近は 1 か 3 しか見ないですね。

引用:

C系の人だとforステートメントのイメージから2番が多そうですが。


そうでしょうか? ベタ C/C++ をやる機会がまた最近多くなってきましたが 1. が多い印象を受けます。 脱線ついでに VB とかだと 1. は割合減って 3. が多くなります。

バラけてネストという選択肢はないんですね。(ショートサーキット評価ができない言語とかありますから...w)

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
nagise
ぬし
会議室デビュー日: 2006/05/19
投稿数: 1141
投稿日時: 2007-11-21 10:48
s==nullの話はs=nullと書き間違えても
今だとエディタで警告してくれたりするので
あまり目くじらを立てなくなったというのもあります。

引用:

tkrnさんの書き込み (2007-11-21 10:11) より:
ふと便乗質問させて頂たいのですが、皆さんは大小比較のときはどの様に書かれてます?
1.(1 < s) && (s < 10)
2.(10 > s) && (s > 1)
3.(s > 1) && (s < 10)
4.(1 < s) && (10 > s)



私は1か2かなぁ。不等号の向きを揃えるようにしますね。
推移的になっているほうが意味的に誤りにくい。

変数が左という揃え方だと3になるのでしょうけど、
数直線のイメージで書くならやっぱり1がいいな。
べる
ぬし
会議室デビュー日: 2003/09/20
投稿数: 1093
投稿日時: 2007-11-21 11:34
引用:
ふと便乗質問させて頂たいのですが、皆さんは大小比較のときはどの様に書かれてます?
1.(1 < s) && (s < 10)
2.(10 > s) && (s > 1)
3.(s > 1) && (s < 10)
4.(1 < s) && (10 > s)

私は、学生だった頃は1の書き方をしていた記憶がありますが今は3が多いかなあ。
「sが1と10の間にあるとき」というのを頭の中で「sが1より大きく、かつsが10より小さいとき」
と置き換えているからですかね。でも思い返すと、今でも1で書いてるときもあるような気がします。
特にこだわっていない/意識していない、ということかな。
よねKEN
ぬし
会議室デビュー日: 2003/08/23
投稿数: 472
投稿日時: 2007-11-21 11:39
引用:

nagiseさんの書き込み (2007-11-21 10:48) より:
引用:

tkrnさんの書き込み (2007-11-21 10:11) より:
ふと便乗質問させて頂たいのですが、皆さんは大小比較のときはどの様に書かれてます?
1.(1 < s) && (s < 10)
2.(10 > s) && (s > 1)
3.(s > 1) && (s < 10)
4.(1 < s) && (10 > s)



私は1か2かなぁ。不等号の向きを揃えるようにしますね。
推移的になっているほうが意味的に誤りにくい。



そんなnagiseさんにはPythonがお勧めです(冗)
Pythonだと
「1 < s < 10」
という条件式が書けます。

引用:

変数が左という揃え方だと3になるのでしょうけど、
数直線のイメージで書くならやっぱり1がいいな。



個人的には昔は1で書いていたときもありましたが、
今は3で決まりですね。そもそもの話としてif文の条件式に複雑な式を
書かないので、(1でなく)3でも別に困る人いないよねという発想です。

3なのは、主役は左に書くという理由からです。

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