本当に細かい話 - NULLチェックと if文
- 変数a が NULL だったら、デフォルト値の*1b値を返して、NULL以外だったら a を返す
よーは、a がOK であれば a を、a がダメだったら b を返したい
というコードを書きたいという場合、超悩むのが「分岐条件をどうするべ」って所なんです。 …いや、NULLで比較するのは当たり前なんですけれども、
- a == NULL するか a != NULL するか。
で結構悩むんっすよねー。
if(a == NULL) return b; else return a;
だと「a が NULL だった場合」ってのは判りやすいですが、正常だった場合に返す値が else句 に有るのが超微妙。 NG だったら正常値返すの? みたいな。
んじゃぁ逆に書いてみると…
if(a != NULL) return a; else return b;
if句 の方に正常値が来るので「正常だったら、正常値を返す」みたいな解釈がしやすいとは思うものの「a != NULL」って箇所で、「NULLでは*無かったら*」って否定してるところが、ちょびっと解釈しづらい面が出てくるかなぁーみたいな思ってしまいます。
ちなみに、上のように短いコードだと3項演算子使って書くことも多いんですが…
return a == NULL ? b : a; return a != NULL ? a : b;
この2つのうちどっちが見やすいかなぁ…と。
# 最近は後者を利用している…も、やっぱり != にちょっぴり違和感を感じてみたり
別案
template<typename T> bool IsValid(const T* t) { return t != NULL: } return IsValid(a) ? a : b;
とかやると「a が正当な場合〜」って解釈出来て見やすいけれども、NULLチェックのためだけに関数作るのは大げさ過ぎるしなぁとか。(ぉ
ってか、本当にどうでもえぇ事やなぁ…
*1:いや場合によるけど