あなたもやってる?こんな変数名は読みづらい。[2分でわかるプログラミングの小ネタ]
yoshiharu EnTech
早速ですが、以下のコードを見てください↓
// ifの条件はどんな意味でしょうか?
if (!cannotPlayBaseball) {
...
}
cannotが!で反対の意味になるから、「野球ができる」って条件だね。
でも、否定が2回もあって分かりずらいよ…
そうだね。↑のコードは二重否定というアンチパターンなんだ。
否定形がコードの中に存在すると、コードは読みにくくなります。そこで、否定があるコードを読みやすくする技術がプロには必須です。
以降では現場でよく見る否定形を読みやすくする方法を3つ紹介します。ぜひ、普段のコーディングに取り入れてくださいね。
先ほど例にあげたコードは簡単に肯定形にできます。
// 2回否定してる(二重否定)
if (!cannotPlayBaseball) {
...
}
改善後は下記になります↓
// 肯定形にしても同じ意味
if (canPlayBaseball) {
...
}
肯定形の方が意味をすっと理解できます。二重否定を肯定形にするのはシンプルで使いやすいテクニックなので、積極的に使ってくださいね。
でもさ、二重否定はどんな時に起こるんだ?
こんなにシンプルに改善できるなら、みんな書かないでしょ?
その通り、確かに二重否定を見る場面は少ないね。
でも、二重否定は「否定形で変数名をつけた時」によく起こるんだ。
二重否定はどんな時に起こるのでしょうか?実際の現場でよくあるのは「否定形で変数名をつけて放置した時」によく起こります↓
3ヶ月前
// 否定形で変数名をつけて放置した。
const cannotPlayBaseball = false;
// その後、色んなところで使ってる
if (cannotPlayBaseball) {
...
}
likeBaseball(cannotPlayBaseball)
今日
// 別の誰かが二重否定でいつの間にか使ってた!
if (!cannotPlayBaseball) {
...
}
特にチームで開発してると、このように時間が経って二重否定が使われるケースが多いです。
このような事故を防ぐためには、変数名を最初から肯定形を使うことです。
// 変数名をつけるときに、最初から肯定形を使う
const canPlayBaseball = true;
なので、変数名に否定形を使うのもアンチパターンなんだ。
なるべく肯定系を使ってコードを書く意識が大事だよ!
条件分岐で否定形を使ってる場合、if…elseの処理を反対にすることで読みやすくなります。
if (!isActive) {
// 有効でない時の処理
} else {
// 有効な時の処理
}
↑の例を修正すると
if (isActive) {
// 有効な時の処理
} else {
// 有効でない時の処理
}
と、肯定形の処理を先に記述することで