JavaScriptの疑問笊(?)構文たずめ3぀の䜿い方を完党マスタヌ

JavaScriptの疑問笊(?)構文たずめ3぀の䜿い方を完党マスタヌ

D
dongAuthor
2 min read

JavaScriptの疑問笊(?)の䜿い方を総たずめ。䞉項挔算子、オプショナルチェむニング、null合䜓挔算子の抂念ず実務䟋を通じお、コヌドを簡朔か぀安党にしたしょう。

JavaScriptでコヌドを曞いおいるず、あちこちに登堎する疑問笊(?)のせいで銖をかしげた経隓、皆さん䞀床はあるのではないでしょうか。if文に䌌おいるようでもあり、オブゞェクトのプロパティにくっ぀いおいたり、挔算子の間に突然珟れたりしたすよね。

これらの疑問笊は、実はJavaScriptのコヌドをより簡朔で゚レガントにしおくれる、非垞に䟿利な文法的装眮です。特に実務では、反埩的なコヌドを枛らし、䟋倖的な状況を効果的に凊理するために本圓によく䜿われたす。

今回の蚘事では、JavaScript開発者なら必ず知っおおくべき疑問笊(?)の3぀の甚法、䞉項挔算子、オプショナルチェむニング、そしおnull合䜓挔算子に぀いお詳しく芋おいきたす。各構文がなぜ必芁なのか、そしお実際のコヌドでどのように掻甚できるのかを、明確な䟋ずずもに説明したす。この蚘事を最埌たで読めば、もう疑問笊を恐れるこずなく、自由自圚に掻甚できる自分を発芋できるはずです

1. 䞉項挔算子 (Ternary Operator): 条件 ? 倀1 : 倀2

䞉項挔算子は、if...else文を䞀行に短瞮しおくれる最も基本的な疑問笊の構文です。その名の通り、3぀のオペランド条件、真の堎合の倀、停の堎合の倀を必芁ずしたす。

  • 構文: 条件 ? 真の堎合の匏 : 停の堎合の匏

if...else文ず比范しおみるず、その圹割が明確になりたす。

// if...else文を䜿甚
let isAdult;
const age = 20;

if (age > 18) {
  isAdult = true;
} else {
  isAdult = false;
}
console.log(isAdult); // true

// 䞉項挔算子を䜿甚
const isAdultTernary = age > 18 ? true : false;
console.log(isAdultTernary); // true

コヌドがずっず簡朔になりたしたね。䞉項挔算子は、このように条件に応じお異なる倀を数に割り圓おる際に非垞に圹立ちたす。

䞉項挔算子のメリット

  • 簡朔さ: if...elseブロックを耇数行曞く必芁なく、䞀行で衚珟できるため、コヌドの可読性を高めるこずができたす。
  • 匏: 䞉項挔算子は倀を返す「匏」であるため、倉数の割り圓お以倖にも、関数の匕数や他の匏の䞭に盎接䜿甚するこずができたす。

ネストも可胜です

䞉項挔算子を耇数連結しお、else ifず䌌た構文を䜜るこずもできたす。

const age = 15;

const message = age < 8 ? '子䟛です' :
                age < 18 ? '青少幎です' :
                '成人です';

console.log(message); // '青少幎です'

ただし、ネストが深くなりすぎるずかえっお可読性を損なう可胜性があるので、2〜3個皋床の条件でのみ䜿甚するこずをお勧めしたす。それ以䞊に耇雑になる堎合は、if...else if文やswitch文の方が良い遞択かもしれたせん。

2. オプショナルチェむニング (Optional Chaining): オブゞェクト?.プロパティ

オプショナルチェむニング(?.)は、ES2020(ES11)で導入された比范的新しい構文で、実務で本圓に愛甚されおいる機胜の䞀぀です。この機胜は、オブゞェクトのプロパティにアクセスする際、そのオブゞェクトやその䞊䜍のプロパティがnullたたはundefinedの堎合に゚ラヌを発生させる代わりにundefinedを返しおくれたす。

䟋えば、サヌバヌからナヌザヌ情報を受け取っおプロフィヌル写真を衚瀺する必芁がある状況を考えおみたしょう。

const user = {
  name: "ゞョむ",
  // profileオブゞェクトがない堎合もある
};

// オプショナルチェむニングがない堎合
// const profileImage = user.profile.image; // TypeError: Cannot read properties of undefined (reading 'image')

䞊蚘のコヌドでは、userオブゞェクトにはprofileプロパティがないため、user.profileはundefinedずなり、undefinedからimageプロパティを探そうずするためTypeErrorが発生したす。このような゚ラヌはアプリケヌションを停止させる可胜性がありたす。

以前は、このような゚ラヌを防ぐためにif文や&&挔算子を䜿甚しおいたした。

// 1. if文でチェック
let profileImage;
if (user && user.profile) {
  profileImage = user.profile.image;
}

// 2. &&挔算子でチェック
const profileImageAnd = user && user.profile && user.profile.image;

しかし、オプショナルチェむニングを䜿えば、このコヌドが魔法のようにシンプルになりたす。

const user = {
  name: "ゞョむ",
};

const profileImage = user.profile?.image;
console.log(profileImage); // undefined (゚ラヌ発生なし)

user.profileがundefinedなので、?.挔算子は即座に評䟡を停止し、undefinedを返したす。おかげでランタむム゚ラヌなしに安党に倀を凊理できるようになったのですオブゞェクトのプロパティだけでなく、配列の芁玠(arr?.[index])や関数の呌び出し(func?.())にも䜿甚でき、非垞に掻甚床が高いです。

3. null合䜓挔算子 (Nullish Coalescing): 倀1 ?? 倀2

null合䜓挔算子(??)、日本語では「nullish coalescing operator」ず呌ばれるこの構文も、オプショナルチェむニングず共にES2020で導入されたした。この挔算子は、巊偎のオペランドが nullたたはundefined の堎合にのみ右偎のオペランドを返し、それ以倖の堎合は巊偎のオペランドをそのたた返したす。

デフォルト倀を蚭定する際に非垞に䟿利で、よく䜿われおいた論理OR挔算子(||)の欠点を補完しおくれたす。

||挔算子ずの違い

||挔算子は、巊偎のオペランドが’falsy’な倀の堎合に右偎の倀を返したす。JavaScriptにおけるfalsyな倀には、null、undefinedだけでなく、0、""(空文字列)、false、NaNも含たれたす。

このため、意図しないバグが発生するこずがありたす。䟋えば、ナヌザヌが蚭定した倀が0や空文字列であり、それを有効な倀ずしお扱いたい堎合に||を䜿うず問題になりたす。

let height = 0;

console.log(height || 100); // 100
// heightが0 (falsy) なので100が出力される。意図した動䜜ではない可胜性がある。

このような状況で、null合䜓挔算子(??)が茝きを攟ちたす。??はnullずundefinedのみをチェックするためです。

let height = 0;
let text = "";

console.log(height ?? 100); // 0 (heightはnullでもundefinedでもないので、そのたた0を返す)
console.log(text ?? "デフォルト倀"); // "" (textはnullでもundefinedでもないので、そのたた空文字列を返す)

let missingValue = null;
console.log(missingValue ?? "デフォルト倀"); // "デフォルト倀"

このように??を䜿えば、0や""のような有効な倀を維持し぀぀、nullたたはundefinedの堎合にのみ安党にデフォルト倀を蚭定できたす。

挔算子の組み合わせに関する泚意点

??挔算子は、他の論理挔算子(&&, ||)ず䞀緒に䜿甚する堎合、括匧なしでは䜿甚できないように仕様で定められおいたす。これは開発者のミスを防ぐためです。したがっお、他の挔算子ず䞀緒に䜿甚するには、必ず括匧で優先順䜍を明確に指定する必芁がありたす。

// let x = 1 && 2 ?? 3; // SyntaxErrorが発生

let x = (1 && 2) ?? 3; // 正しい䜿い方
console.log(x); // 2

たずめ疑問笊ず仲良くなろう

ここたで、JavaScriptで疑問笊(?)が䜿われる3぀の䞻芁な構文を芋おきたした。

  • 䞉項挔算子 (? :): if...elseを䞀行に短瞮し、条件に応じお異なる倀を返したいずきに䜿甚したす。
  • オプショナルチェむニング (?.): オブゞェクトのネストされたプロパティにアクセスする際、nullやundefinedによる゚ラヌを防ぎたいずきに䜿甚したす。
  • null合䜓挔算子 (??): 倉数にデフォルト倀を割り圓おる際、0や""のようなfalsyな倀を有効なものずしお扱いたいずきに䜿甚したす。

これら3぀の構文は、珟代のJavaScript開発においおコヌドの安定性ず可読性を倧幅に向䞊させる必須のツヌルです。最初は少し銎染みがないかもしれたせんが、䜕床か実際に䜿っおみればすぐに慣れ、その䟿利さに魅了されるこずでしょう。さあ、あなたのコヌドにある耇雑なif文や&&チェヌンを、掗緎された疑問笊構文に倉えおみたしょう

JavaScriptの疑問笊(?)構文たずめ3぀の䜿い方を完党マスタヌ | devdong