三項演算子で簡潔に
このレッスンで分かること
条件 ? 真のときの値 : 偽のときの値で、条件によって値を切り替えられます- 三項演算子は式なので、そのまま
returnや変数の初期値に置けます
誰の画面にも同じ文言しか出せない
プロフィールサイトの見出しに「人気作品」と決め打ちで書くと、まだ誰にも見られていない作品にも同じ文字が出ます。状況に合わせて言葉を変えたい。つまり、条件によって表示する値そのものを選びたいわけです。
この「値を選ぶ」場面で使うのが三項演算子です。書き方は次の形です。
JavaScript
条件 ? 条件が真のときの値 : 条件が偽のときの値? の前が条件、? と : の間が真のときの値、: の後ろが偽のときの値です。オペランドを 3 つ取るので三項演算子と呼ばれます。JavaScript でオペランドを 3 つ取る演算子はこれだけなので、「三項演算子」と言えばこの形を指します。
JavaScript
const views = 120;
const badge = views >= 100 ? "人気作品" : "通常";
console.log(badge); // 人気作品
?を「だったら」、:を「そうでなければ」と読むと、そのまま日本語の文になります。「閲覧数が 100 以上だったら人気作品、そうでなければ通常」です。
式だから、そのまま代入できて return できる
三項演算子は値を持つ式です。値を持つということは、値を書ける場所ならどこにでも置けるということです。
JavaScript
// const の初期値にできる
const status = views >= 100 ? "公開中" : "準備中";
// テンプレートリテラルの中に埋め込める
console.log(`この作品は ${views >= 100 ? "人気" : "通常"}です`);
// 画面に付けるクラス名を条件で決めるのにもよく使う
const className = views >= 100 ? "card card-hot" : "card";
// 行が長くなったら ? と : の前で改行する
const message =
views >= 100
? "たくさんの人に見られています"
: "これから伸びていきます";const は宣言と同時に値を入れる必要があります。「変数の初期値を条件で決めたい」場面が、三項演算子のいちばんおいしい使いどころです。関数の return に直接書けるのも同じ理由で、選んだ値がそのまま戻り値になります。選ぶ値は文字列でなくても構いません。数値でも真偽値でも、値であればそのまま置けます。
条件のところには、比較演算子や論理演算子の結果をそのまま置けます。views >= 100 のような比較でも、hasPhoto && views >= 100 のような組み合わせでも構いません。真偽が決まる式であれば何でも条件になります。
よくある間違い
? true : falseと書いてしまう —views >= 100の時点で、答えはすでにtrueかfalseです。そこから改めてtrueとfalseを選び直す必要はありません。同じ理屈でc ? false : trueは!cと書けます
JavaScript
const isPopular = views >= 100 ? true : false; // 冗長
const isPopular2 = views >= 100; // これで同じ意味- 偽のときの値を省く —
?と:はセットです。片方だけでは構文エラーになり、そもそも動きません
JavaScript
// const label = views >= 100 ? "人気"; // SyntaxError
const label = views >= 100 ? "人気" : "通常"; // 両方書く要件
- 関数名は
worksLabel、引数はcountの 1 つにすること countが 1 以上なら"作品が " + count + " 件あります"の文字列を返すことcountが0や未設定のときは"まだ作品がありません"を返すことif文を使わず、三項演算子で書くこと
入出力例
worksLabel(3) → "作品が 3 件あります"
worksLabel(1) → "作品が 1 件あります"
worksLabel(0) → "まだ作品がありません"
worksLabel() → "まだ作品がありません"
worksLabel(10) → "作品が 10 件あります"ヒント
編集 ゆめさく編集部