そのコード読みづらいかも?否定系を正しく使う3つの方法 [2分でわかるプログラミングの小ネタ]

yoshiharu

こんなコードは読みづらい!

早速ですが、以下のコードを見てください↓

// ifの条件はどんな意味でしょうか?
if (!cannotPlayBaseball) {
  ...
}
新人くん
新人くん

cannotが!で反対の意味になるから、「野球ができる」って条件だね。

でも、否定が2回もあって分かりずらいよ…

よしはる
よしはる

そうだね。↑のコードは二重否定というアンチパターンなんだ。

否定形がコードの中に存在すると、コードは読みにくくなります。そこで、否定があるコードを読みやすくする技術がプロには必須です。

以降では現場でよく見る否定形を読みやすくする方法を3つ紹介します。ぜひ、普段のコーディングに取り入れてくださいね。

否定系を読みやすくする方法 3選

方法① 二重否定を肯定形にする

先ほど例にあげたコードは簡単に肯定形にできます。

// 2回否定してる(二重否定)
if (!cannotPlayBaseball) {
  ...
}

改善後は下記になります↓

// 肯定形にしても同じ意味
if (canPlayBaseball) {
  ...
}

肯定形の方が意味をすっと理解できます。二重否定を肯定形にするのはシンプルで使いやすいテクニックなので、積極的に使ってくださいね。

どんな時に、二重否定が起きるのか?

新人くん
新人くん

でもさ、二重否定はどんな時に起こるんだ?

こんなにシンプルに改善できるなら、みんな書かないでしょ?

よしはる
よしはる

その通り、確かに二重否定を見る場面は少ないね。

でも、二重否定は「否定形で変数名をつけた時」によく起こるんだ。

二重否定はどんな時に起こるのでしょうか?実際の現場でよくあるのは「否定形で変数名をつけて放置した時」によく起こります↓

3ヶ月前

// 否定形で変数名をつけて放置した。
const cannotPlayBaseball = false;

// その後、色んなところで使ってる
if (cannotPlayBaseball) {
  ...
}
likeBaseball(cannotPlayBaseball)

今日

// 別の誰かが二重否定でいつの間にか使ってた!
if (!cannotPlayBaseball) {
  ...
}

特にチームで開発してると、このように時間が経って二重否定が使われるケースが多いです。

このような事故を防ぐためには、変数名を最初から肯定形を使うことです。

// 変数名をつけるときに、最初から肯定形を使う
const canPlayBaseball = true;
よしはる
よしはる

なので、変数名に否定形を使うのもアンチパターンなんだ。

なるべく肯定系を使ってコードを書く意識が大事だよ!

方法② if…else内の処理を反対にする

条件分岐で否定形を使ってる場合、if…elseの処理を反対にすることで読みやすくなります。

if (!isActive) {
  // 有効でない時の処理
} else {
  // 有効な時の処理
}

↑の例を修正すると

if (isActive) {
  // 有効な時の処理
} else {
  // 有効でない時の処理
}

と、肯定形の処理を先に記述することで

新人くん
新人くん

方法③ ド・モルガンの法則を使う

まとめ 否定系を制するものは、プログラミングを制す。

ABOUT ME
よしはる
よしはる
Webエンジニア / フリーランス
プログラミングが大好きなWebエンジニア

<どんな人>
・エンジニア歴 2年目
・高卒→フリーランスと異色の経歴
・関西生まれ、お笑い好き

技術本を出したいな〜と思ってブログ始めました!
現役エンジニアの経験をもとに記事にするので、ぜひ参考にしてね。
記事URLをコピーしました