本当に細かい話 - 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:いや場合によるけど