比較と代入 | 江木町の牛舎

江木町の牛舎

~ 田舎者プログラマの日常 ~

C とか Java の書き方なので 全般 ではないんだけどまいっか的なネタ

= と == の話です よくあるネタですね

定数を先に書くというのはもう認知されている話なんだろうと思うんですが、個人的にこの記述方法に出会ったのは結構最近の事。

その昔C言語バリバリにやっていた頃には知らなかったし誰もやっていなかった(と思います)

そもそも、そんな推奨記述方法について解説している本はなかったし、定数あとがきってのは一般的(?)な記述方法だったのではないかと。

多分 1 + 1 = 2 の延長線上に ( x + y == 2 ) という記述方法があったんだろうと。

当時バイブルだったプログラミング言語C、いわゆるR&K本にそう書いてあったので、やっぱりみんなそれを真似て書いていたんだろうと。

最初に知ったのは エキスパートCプログラミング―知られざるCの深層 という本だったわけですが、なるほど、と思って以降、できるだけそう書くようにしています。

ただ、そこで新たな問題というか疑問というか、そう記述して良いものかどうかの判断が曖昧になってきたわけで。

確かに

 if ( 2 == x )

と記述しておくと

 if ( 2 = x )

とミスしてしまった時にコンパイルエラーとなるので、バグ回避につながるのは確かなんですが、コーディング規則に記載がない場合他のプログラマとの違いが出てしまうので、そう書いて良いものかどうか疑問に思ってしまったわけです。

今仕事している会社は完璧なるカウボーイの集まりで、コーディング規則すら無いカオスな環境で論外なんですが、そんな環境だからこそ個人的な意向で if文 の記述を上記の通り書いてしまうと違和感があるんじゃないかと。

おそらく、定数右書きに慣れている人にとっては

なんだこのコーディングは???

なんじゃないかと思うわけです。

多分、そういう人はコーディングの勉強をしないしする気もなくて、その記述をする意味なんて考えもしないで否定してくるんですけど。

デファクトスタンダードな記述が出来上がっていると、異端は排除されてしまいます。

例えば、Javaの例ですが

String s = "hoge" + "hoge" + "hoge";

と文字列の結合は記述できるわけですが、個人的にはこの記述方法が嫌いで、展開後の記述を考えると append で記述したほうが良いと思うし、そう推奨しているサイトは多いです。

しかし、今の会社のメイン担当に言わせると

「見づらい」

の一言で、終わるわけです。

確かに version を気にしないで記述できる利点もあるんですが。

今後、個人的に効率が良いであろうと思われる記述方法の決まりを書く機会もあるでしょうけど、一般的ではないので(推奨している本はあるんですが)やはり異端扱いはされるかと。

自分が規則を作れる立場になったら方向性を決めることができるので、その時には記述してよいかと思うんですが、既存ソースの一部改修とかの場合、他の記述方法に合わせたほうが解読するには統一性があったほうが良いだろうと考えると、個人的に better と思う記述方法はなかなかできなくてストレスが溜まるわけです。

そこを無視して独自路線に突き進んだら、自分もカウボーイの仲間入りですからね。

まぁ、それでもいいんですが。

おそらく、そのジレンマを解消するために(?)、Java(等のオブジェクト指向言語)では equals が推奨されているんだろうと思われます。

if( x.equals(1) )

代入と比較演算子が似通った記述だからこその問題なので、全く違う記述方法であることは、言語仕様として必要なんじゃないかと思うわけです。

未確認ですが、おそらく

if( (x + y).equals(2) )

という記述もできるんだろうと思うので。



...あ、そうか。

そもそも定数前書きという考え方自体がオブジェクト指向言語では古いのか...



すみません。個人的に解決しましたw

比較演算子はすべて equals と compare にしよう



C言語の場合は定数前書きで...