条件演算子(三項演算子)は使うべきか、避けるべきか?

こんばんは。

いつか書こうと思っていたプログラミングの話を今日はしようと思います。


現在、私は仕事でC#を使用しているのですが、未だにわからないことだらけです。

実は先週コードレビューを行ったのですが、そこには新しく先輩になった方にも参加していただきました。

この方は一緒になる前の別の部署で、現役でコードを書いている中で一番上の方でした。

前の上司の方から「もしコードレビューやるなら彼を誘ったほうが良い」という話を聞いたため参加していただけないかお願いしたところ参加してくださりました。

そしてレビューを行っていたときに私のコードを見て「そこ戻って、それ、俺あんまり好きじゃないんだよね。好みの問題だと思うけど気になる」と言って指していたのが「?」の文字でした。

これはプログラミングを生業としている方なら見たことあるこの文字、題名にもある条件演算子という物です。

Contents

何それ?

プログラミングがわからない方に説明するのは難しいですが、頑張って見ます。

プログラミングでは条件によって分岐を作ることがあり、その時はifというものを次のように使います(C#)。

if(グー){// 負け;}

else if(チョキ) { // 引き分け;}

else{// 勝ち;}

今は簡略化していますが、実際には

if(…)

{

// 処理;

}

というように最低でも4行使います

elseというのは2つの条件以外の場合はすべて処理3になります。

この例の場合だとジャンケンなので当たり前ですね…。

このifというのを使うことが多いのですが、先程述べた条件演算子を使うと

(出した手はグー)  ? 負け :  (出した手はチョキ)?  あいこ : 勝ち

という形で1行で書くことができます。

ただしどう見てもこちらの方が読みにくいです

例えばもっと簡単な例だとどうなるか

今のは3択だったため少し読みにくいので、もう少し簡単にします。

aという変数が 100以上の場合は100、100未満の場合は0にするという処理を考えると。

if(a >= 100) { a = 100;}

else { a = 0;}

a = ( a >= 100) ? 100 : 0;

となります。

{}の部分は3行に渡るので、上の場合は全部で8行、下は1行です。

下の記法も見慣れてくると便利な気がしませんか?

私はこの書き方が結構好きで、使えそうな場所では積極的に使おうと思っています。

使えそうな場所ってどこ?

個人的には

  • 条件分岐が3つ以下
  • 条件分岐による処理が比較的単純
  • 条件の網羅率(カバレッジ)をそこまで気にしなくてよい場合

と言ったところでしょうか…こう考えると難しい。

例えば星座によって条件分岐して処理を帰るとなると条件演算子だとはてなの数が11回…絶対に読みにくいですよね。

プログラミングではコードの読みやすさを可読性と呼びますが、ここでしか使わない?という記号が大量に入り込んできたら可読性が落ちますよね…。

そういう具合なのでおそらく毛嫌いされがちなのだと思います。

そりゃレビューで嫌いと言われますよね…ちなみに私がコードで書いていたのは条件分岐が1つしかないので、1行でかなりスッキリしていたと思いますが(私の目線では)。

ではどうするのが良いか?

個人的に一番良いと思ったのは「運用ルールを明確に決めておく」事だと思います。

先程私が使えそうな場所、と言ったように使う方自身が「こういうときには使う、ここでは使わない」と明確にしておけば問題が減ると思いました。

乱用したり、無理やり使う…ことは無いと思いますがそれだけは気をつけた方がいいですね。

とどのつまりは個人の好みなんですけどね。

如何に条件演算子を使用した綺麗なコードを書こうと、使わない方(=見慣れていないため)はコードを綺麗だとも思わないし、やはり嫌いであることには変わりないんですよね…。

そんな運命を背負った?ですが、私はそんな空気に負けず使用していこうと思います。

コメント

  1. abc より:

    条件演算子を使える人でも、チーム開発では可読性が落ちるという理由であえて採用しないという人もいました。
    その方はリードエンジニアです。

    個人的には採用する理由が行数だけなのであれば、
    コードゴルフをしているわけではないので使う必要はないと思います。

タイトルとURLをコピーしました