条件式はどっちが自然? [雑談]

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
Dixq (管理人)

条件式はどっちが自然? [雑談]

#1

投稿記事 by Dixq (管理人) » 15年前

最近寒くなってきましたね。
北海道では近くの山で最近雪が降ったようです。
もう朝起きたらとりあえず暖房の前で包まって目ざましテレビを見るのが朝の日課になりつつあります^^;

さて、私も雑談トピを立ててみました。
社会人になってから人のコードを読む機会が非常に増えました。
・・というか毎日のように新しいコードを読むような生活をしています。。。

プログラムは十人いれば、十通りの書き方があるもの。
色んな書き方を見てきました。
今回お聞きしたいのは条件式についてなのですが、
例えば「もしxが0より大きく、3未満なら」という条件式は皆さんどのように書きますか?


if( x>0 && x<3 )


if( 0<x && x<3 )


if( 0<x && 3>x )


それ以外

私はずっと①で書いてきましたが、最近数学的な式をそのまま条件式にする機会が多く
数学では「0<x<3」のように範囲を記載する為、②の方が解りやすいのではないかと思ったりしました。
②にし始めた時は何とも違和感があったのですが、今となってはすっかり②で慣れました。

また、「条件式の変数は左に書いてはならない」というコーディング規約を持っている会社を知っているのですが、
③は私にとって何とも違和感があります・・。
if( 1 == x )
のようにコードが全部書いてあるのですが、逆にしたい気持ちになってしまいます・・。
恐らくイコールを一つ付け忘れた時のバグ回避の為だと思いますが、私には何とも・・。

皆さんはどのように書かれますか?
また直接関係ない事でも良いので情報提供いただけると幸いですヽ(´▽`)ノ

シエル

Re:条件式はどっちが自然? [雑談]

#2

投稿記事 by シエル » 15年前

私は2番ですね^^
C言語を始めてからずっと2番の書き方です。

イコールの場合は変数を左に書かないとなんか落ち着かないですねw

たかぎ

Re:条件式はどっちが自然? [雑談]

#3

投稿記事 by たかぎ » 15年前

0 < x < 3 を表現するのであれば、よほどの理由がないかぎり2番を使います。
!(0 < x < 3) を表現するのであれば、

if (x <= 0 || 3 <= x)

を使います。

Dixq (管理人)

Re:条件式はどっちが自然? [雑談]

#4

投稿記事 by Dixq (管理人) » 15年前

> シエルさん

ありがとうございます^^
なるほど、最近の私と一緒ですね。
①だとうっかり不等号を逆に書いてしまう事があるのですが、
②だと逆に書くと明らかにおかしい事が解るんじゃないかと最近思うんですよね。

Dixq (管理人)

Re:条件式はどっちが自然? [雑談]

#5

投稿記事 by Dixq (管理人) » 15年前

あ、一応私のmixiボイスで皆さんに頂いたコメントを元に情報を書いておきます。

①に投票した人、 5人
②に投票した人、 2人
③に投票した人、 0人

でした。

> たかぎさん

おぉそうでしたか。ちょっと安心しました^^;
参考書やウェブサイトのサンプルなんかで②はあまり見たことが無いんで
ほとんど使われていないのかと思っていました。

Poco

Re:条件式はどっちが自然? [雑談]

#6

投稿記事 by Poco » 15年前

2番です。数直線上での範囲を記述する一番自然な方法だと思っています。

3番に関しては、条件式が代入式になっていると警告だしてくれるコンパイラさんが
いるんで、そろそろ要らない規則になりつつあるのかな?と思います。

Dixq (管理人)

Re:条件式はどっちが自然? [雑談]

#7

投稿記事 by Dixq (管理人) » 15年前

> ぽこさん

ありがとうございます。
今のところ全員②ですね、意外でした。①が多いかと思っていました。

> 3番に関しては、条件式が代入式になっていると警告だしてくれるコンパイラさんがいるんで、

そうですね、後静的解析ツールなんかでも発見出来ますよね。

box

Re:条件式はどっちが自然? [雑談]

#8

投稿記事 by box » 15年前

C言語を始めたころは1番でした。
しかし、最近は、数直線のことを意識して2番の書き方をしています。

Dixq (管理人)

Re:条件式はどっちが自然? [雑談]

#9

投稿記事 by Dixq (管理人) » 15年前

> boxさん

ありがとうございます。
雑談トピでboxさんとお話できたのは久しぶりですね^^

やはり最初は皆さん①なんですね。
私も途中から数直線を意識するようになりました。

qwea

Re:条件式はどっちが自然? [雑談]

#10

投稿記事 by qwea » 15年前

自分は ① で書いています。
しかし、改めて見ると ② が分かり易いですね。
今度から ② で書いていくことにします!

名前を qwea に変更しましたが yu です。
他の方と結構被るので名前を変更しました;

ACE

Re:条件式はどっちが自然? [雑談]

#11

投稿記事 by ACE » 15年前

雑談に投稿するのははじめてですね、ACEと申します。
私は①で覚えてからずっとそのままですね。
私の場合、数直線よりも変数から見た変位という考え方をしています。
後、条件式を書きながら条件を考えたりすることが多いので、
とりあえず
「x>」
まで書いてから考えたりします。

softya

Re:条件式はどっちが自然? [雑談]

#12

投稿記事 by softya » 15年前

2番ですね。一番ミスを起こし辛い気がします。

Tatu

Re:条件式はどっちが自然? [雑談]

#13

投稿記事 by Tatu » 15年前

私は1番で書いています。

やっくん

Re:条件式はどっちが自然? [雑談]

#14

投稿記事 by やっくん » 15年前

1番を使っています。
コードの書き方は統一したいので、条件式においては
左辺:比較の元
右辺:比較の相手
といった感じで書いています。

めるぽん

Re:条件式はどっちが自然? [雑談]

#15

投稿記事 by めるぽん » 15年前

自分は基本2番で書きますが、
// 開区間
template<class T>
bool in_range_oo(T low, T val, T high) { return low < val && val < high; }
// 半開区間
template<class T>
bool in_range_co(T low, T val, T high) { return low <= val && val < high; }
みたいなのを用意しておいてもいいのかなーと思いました。

山崎

Re:条件式はどっちが自然? [雑談]

#16

投稿記事 by 山崎 » 15年前

私も不等号を使う条件式の形は統一するように気をつけています。

私は②の方法をとるようにしています。
私のこだわりとしては、「不等号は常に<だけを使う」ことにしています。
数直線や座標の概念を用いるときは大抵右に行くほど値が大きくなると思うので、
それに慣れているため<だけを用いれば直感的に理解できるかも、という理由からです。

ただそのせいで、>を使うときはすぐにわからずに混乱してします、
特に、STLのソートの規準を与えるプレディケートを作るときなど。

==を使うときは、どちらに変数をおくかは全然気にしていないことが多いです。
今のところ、==をどちらにおくかで何かが変わるような事態にあまり出会った覚えが無いですね。

へろりくしょん

Re:条件式はどっちが自然? [雑談]

#17

投稿記事 by へろりくしょん » 15年前

No:63171 の例では(2)ですね。

私は条件式は日本語で考えます。

No:63171 の例では、0より大きくて3未満の場合ですから、xが0と3に挟まれているのはとても自然です。

if(x == 1) の場合も、xは1と同じ。 ですからxが左にくるのはとても自然です。
if(1 == x) としてしまうと、1はxと同じ。 と読めてしまって気持ち悪いです。

同じように単に、xは3より大きいという場合は、
if(x > 3) と書きます。

出来る限り左から順番に読みたいのです。


ちなみに、!(0 < x < 3) を表現する場合は、そのまま、if(!(0 < x && x < 3)) と書きます。

未来のプログラマー

Re:条件式はどっちが自然? [雑談]

#18

投稿記事 by 未来のプログラマー » 15年前

僕も②でいつも書いてます
不等号が同じ方向じゃないとだめっていう感じです
・・・なんか単純ですいません

一般的な名前

Re:条件式はどっちが自然? [雑談]

#19

投稿記事 by 一般的な名前 » 15年前

三番目
そう教えられた

Dixq (管理人)

Re:条件式はどっちが自然? [雑談]

#20

投稿記事 by Dixq (管理人) » 15年前

皆様お答えいただきありがとうございます。今までのご回答を集計してみました。

mixi
① 5人
② 2人
③ 0人

掲示板
① 4人
② 10人
③ 1人

全体としては②が多いようですね。
プログラムの書き方として最初に習うのは変数を左に書くという事でしょうから、
それに慣れた方、または代入文も含めて書き方を統一したい方は条件文でもそのまま①使う、
数学的な表記で解りやすさを求めた方は②を使うといった感じでしょうか。

> 一般的な名前さん

③というお答えがあるのは意外でした。もしよろしければその理由を教えて頂けないでしょうか?

> qweaさん

yuさんのポイント引き継いでおきました。



※「①」などの機種依存文字はLinuxでもMacでも正常に表示されるようなので使っていますが、もし不都合があれば教えて下さい。

おこちゃま

Re:条件式はどっちが自然? [雑談]

#21

投稿記事 by おこちゃま » 15年前

1番で書いていましたが、2番に変えました。
あと、よくないのかもしれませんが、()で条件をいちいち囲みます。
そっちのほうが私にはわかりやすいので・・・

ISLe

Re:条件式はどっちが自然? [雑談]

#22

投稿記事 by ISLe » 15年前

1番です。
主語が先でないと気持ち悪いです。
数学は苦手です。

あとC++で演算子をオーバーライドするときグローバル演算子のオーバーライドを省けます。
それが手抜きと呼ばれず役に立つ環境は限られますけど。

Ex

Re:条件式はどっちが自然? [雑談]

#23

投稿記事 by Ex » 15年前

まず真っ先に思い浮かんだものが
if(x>0){ if(x<3){  }}
でした・・・
&&とかの使わなくても大丈夫な演算子はほとんど使ったことがないので、
上のようなコードを書くのが普通になってしまった・・・ orz

ひよこ

Re:条件式はどっちが自然? [雑談]

#24

投稿記事 by ひよこ » 15年前

こんばんは、おひさしぶりです。
私なら1と2を使いますね。3は使いません。

Dixq (管理人)

Re:条件式はどっちが自然? [雑談]

#25

投稿記事 by Dixq (管理人) » 15年前

> おこちゃまさん

ありがとうございます。
括弧で囲むコードは良く見ますよ。
優先順位を明確にしたい時はそうしますね。

> ISLeさん
> 主語が先でないと気持ち悪いです。

ありがとうございます。
確かに「0はxより小さい」のように主語が定数だと変ですね。

> Exさん

なるほど、ただ、3つも4つもある条件式が複数の階層に存在するとあまりにネストが深くなりません?
でも初めての「④」ということで貴重な意見でした。ありがとうございます。

> ひよこさん

お久しぶりです。
両方使うという事もあるんですね。

s-rush

Re:条件式はどっちが自然? [雑談]

#26

投稿記事 by s-rush » 15年前

私はC言語を始めた時から②番の書き方でしたね。
というより、①と②と両方の書き方をしていた気が・・・w
そのころはただ適当にプログラムを書いてた感じで、特に統一したコーディングはしてませんでした。


最近ではboxさん同様、数直線を意識するとこの書き方のほうが自然な感じがしましたので
②番の書き方に統一しています。
もう1つの理由として、たまに不等号の向きを逆にしてしまうこともあったので、
大小関係を表す際には”<”しか使わない
っていうように自分の中で決めちゃってます。

naohiro19

Re:条件式はどっちが自然? [雑談]

#27

投稿記事 by naohiro19 » 15年前

自分は1番です。
理由はコーディングが見やすいと思います。

パコネコ

Re:条件式はどっちが自然? [雑談]

#28

投稿記事 by パコネコ » 15年前

2番です。
できるだけ同じ変数や数字を隣にしてます。

Dixq (管理人)

Re:条件式はどっちが自然? [雑談]

#29

投稿記事 by Dixq (管理人) » 15年前

> s-rushさん

どっちがいいのかな~なんて思っているとつい両方書いたりしてしまいますよね^^;
私も変数付ける時m_aviHeaderとかm_AviHeaderとかどっちがいいのかわからずつい統一してなかったりします;

> naohiroさん

なるほど、変数は常に左という統一もありですね。

> パコネコさん

お答えありがとうございます。参考にさせて頂きますね。

jay

Re:条件式はどっちが自然? [雑談]

#30

投稿記事 by jay » 15年前

お久しぶりの書き込みです~。

僕は①ですね
式を書く時、変数を左に統一する癖が付いているようです(笑)

余談ですが、手元にあった参考書も①の形式でした。

閉鎖

“C言語何でも質問掲示板” へ戻る