三項演算子のネストについて

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

三項演算子のネストについて

#1

投稿記事 by たけ » 15年前

経歴6年目のCプログラマです。
三項演算子のネストについて、皆様の認識をお聞かせいただけないでしょうか。

前提として「三項演算子のネストは行ってはいけない」という、規約があります。
個人的な認識は、

1. a == val ? b : c
2. a == val ? b : a == val2 ? c : d
3. a == val ? (a == val2 ? b : c) : d

1. 通常の三項演算子(ネストではない)
2. 三項演算子の連結(ネストではない) ※"連結"という表現は微妙ですね・・・
3. 三項演算子のネスト

と、思っているのですが、違うのでしょうか?

web上で調べても、3をネストと言っても、2をネストと言うところは見当たりません。
3はわかるのですが、2がネストだから規約違反と言われたのですが、
それが正しいのでしょうか。

皆様の認識をお聞かせください。よろしくお願いいたします。

※質問サイトへの書き込みは初めてです。
皆様に無礼、無作法があれば、申し訳ありません。

Poco

Re:三項演算子のネストについて

#2

投稿記事 by Poco » 15年前

2もネストに1票です。

正確な定義は覚えてませんが、三項演算子ってのは

式1?式2:式3

という形です。この式1~3に三項演算子が含まれているなら
ネストというべきだと思います。

たかぎ

Re:三項演算子のネストについて

#3

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

まず、原則として、掲示板では技術上の正論しか回答することができません。
所属している組織内での、人間関係や、部署間の力関係など、技術以外の特殊な事情までは関知できないことをあらかじめお伝えしておきます。

ここでいう「規約」というのは、コーディング規約のことかと思います。
以下、そのつもりで回答します。

演算子のネスト(=入れ子)というのが何かというと、演算子のオペランドに、同種の演算子を用いた式が含まれているということになります。
その意味では、ぽこさんが書かれたように、2もネストということになります。

重要なことは、そのコーディング規約がなぜ定められているかです。
文法上は、条件演算子を入れ子にしても何の問題もありません。
しかし、それを避けたいのは、著しく可読性が低下するからではないでしょうか?
その観点からすれば、3はまだましであり、2の可読性が最も低いことがわかります。
つまり、規約の趣旨からして、2がダメといわれるのは当然ではないでしょうか?

これを、演算子の優先順位がどうとか、ネストの定義がどうとか、そのような議論で可否を判定するのは正しくないと思います。

たいちう

Re:三項演算子のネストについて

#4

投稿記事 by たいちう » 15年前

理不尽なコーディング規約はよくありますし、
ネストどころか3項演算子自体を禁止している場合もあります。
まぁ(見た目だけかもしれませんが)みんなが同じようなコードを
生産できるようにすることに意義はありますので、
従うか規約を変えるように働きかけるかでしょうね。

ここまでは一般論ですが、私も2はネストだと考えますし、
それ以上に可読性が低いのが問題です。
3項演算子のネストについての規定がなかったとしても、
規約のどこかに書かれているであろう可読性の箇所を理由として、
書き直しを指示すると思います。

閉鎖

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