1. 公開かつ web は注目作品
  2. 公開だが design は公開中
  3. 非公開なら web でも下書き
  4. 非公開で design も下書き
  5. 公開でカテゴリが空文字なら公開中
コース一覧
JavaScript基礎文法:処理を組み立てる
条件を組み合わせる

JavaScript基礎文法:処理を組み立てる

if・switch による条件分岐、配列とループ、関数とコールバック、オブジェクトを順に組み立てる全 33 レッスン(525 分)の基礎文法コースです。FizzBuzz、作品リスト、関数への整理、作品データの構造化を通して、入力から結果を返す処理を自分で分解して書きます。DOM 操作は次のコースで扱います。

1
条件分岐
01. if 文の基本15分
02. if / else if / else で段階判定15分
03. switch 文で値を一覧から選ぶ15分
04. 条件を組み合わせる20分
05. FizzBuzz で複数条件を組み立てる20分
06. つくる 時間帯で挨拶を変える20分
07. 第1章まとめクイズ10分
2
配列とループ
01. 配列のきほん15分
02. 要素を足す・取り除く15分
03. for ループで合計を求める15分
04. for-of で配列を走査する15分
05. while で条件を満たす間くり返す15分
06. break と continue でループを制御する15分
07. つくる 作品リストを一覧にする20分
08. 第2章まとめクイズ10分
3
関数
01. 関数宣言15分
02. アロー関数15分
03. デフォルト引数15分
04. 早期 return でネストを浅くする15分
05. 変数のスコープ15分
06. コールバック関数15分
07. forEach で配列をまわす15分
08. つくる 処理を関数に整理する20分
09. 第3章まとめクイズ10分
4
オブジェクト
01. オブジェクトのきほん18分
02. オブジェクトで複数の値を返す16分
03. const と参照18分
04. ?. で安全に取り出す16分
05. 分割代入18分
06. スプレッド構文18分
07. find と includes で探す16分
08. つくる 作品データを構造化する25分
09. 第4章まとめクイズ10分

条件を組み合わせる

入れ子と &&
解説

このレッスンで分かること

  • 判定材料が 2 つ以上あると、if の入れ子はどんどん深くなります
  • && と || を使えば、入れ子をインデント 1 段の並びに書き換えられます

インデントが右へ逃げていく

判定に使う値が 2 つになった瞬間、コードの形が変わります。作品カードに出す一言を、本人が見ているかどうかと閲覧数の 2 つから決めるとしましょう。素直に考えると、まず本人かどうかを見て、本人ならさらに閲覧数を見る、という順になります。

JavaScript

function cardNote(isOwner, views) { if (isOwner) { if (views >= 100) { return "よく見られています"; } else { return "これから伸ばしましょう"; } } else { return "作品を見る"; } }

正しく動きますし、考えた順序がそのまま形になっているので、書いた本人には読みやすく感じます。問題は条件が増えたときです。ここに「今年の作品なら新着」を足し、さらに「画像付きなら見出しを変える」を足すと、if が 4 段重なり、インデントが画面の右端へ逃げていきます。そうなると、次のことが起きます。

  • どの else がどの if の相方なのか、目で追わないと分からない
  • 条件の組み合わせのうち、どれが抜けているのか見つけられない
  • 1 つ足すたびに全体が 1 段深くなる
解説

深い入れ子は、読み手に「いま成立している条件」を全部覚えさせる構造です。3 段目にいる読み手は「本人で、100 以上で、今年の作品」の 3 つを同時に頭に置いておかなければなりません。人間の短期記憶はそこまで強くありません。

&& でつなぐと 1 段に戻る

&& は「かつ」でした。内側の条件を外側の条件と && でつなげば、入れ子をやめて 1 段の並びに書き換えられます。

JavaScript

function cardNote(isOwner, views) { if (isOwner && views >= 100) { return "よく見られています"; } else if (isOwner) { return "これから伸ばしましょう"; } else { return "作品を見る"; } }
観点入れ子1 段の並び
インデント3 段1 段
条件と戻り値離れていて追いにくい1 行で対になっている
条件を足すとき深くなる行が増えるだけ

うれしいのは、上から 1 行ずつ読むだけで条件と戻り値が対になって並ぶことです。日本語の仕様書をそのまま読んでいる感覚に近づきます。2 つ目の枝に「かつ 100 未満」を書き足す必要が無いのは、前のレッスンで見たとおりです。

条件式が長くなってきたら、真偽値の変数に切り出す手もあります。const isPopular = isOwner && views >= 100; としておけば、if の行を読むだけで意図が伝わります。真偽値の変数名は is や has で始めるのが慣習です。

よくある間違い

  • && と || を取り違える — 「本人で、かつ 100 以上」は && です。|| にすると、本人でない人にまで同じ一言が出てしまいます
  • 比較を省略して書く — 数学の書き方をそのまま持ち込むと、条件がいつも成立します

JavaScript

// NG。"png" は空文字ではないので、それだけで true 扱いになる if (ext === "jpg" || "png") { } // OK if (ext === "jpg" || ext === "png") { }
  • 書き換えたのに順番を直さない — 入れ子を機械的に開くと、広い条件が先に来てしまうことがあります。書き換えたら代表的な入力を 3 つほど手で流し、元のコードと同じ答えになるか確かめてください

要件

  1. 関数名は pickupLabel、引数は真偽値 published とカテゴリ名の文字列 category の 2 つ
  2. published が true かつ category が "web" なら "注目作品" を返す
  3. published が true でカテゴリが "web" 以外なら "公開中"、published が false なら "下書き" を返す
  4. if の入れ子ではなく && を使い、インデント 1 段の else if の並びで書く

入出力例

pickupLabel(true, "web") → "注目作品" pickupLabel(true, "design") → "公開中" pickupLabel(false, "web") → "下書き" pickupLabel(false, "design") → "下書き" pickupLabel(true, "") → "公開中"

ヒント

条件がいちばん狭いのは「公開かつ web」です。これを先頭に書きます

2 つの条件は published && category === "web" のように && でつなぎます

2 番目の枝に「かつ web ではない」を書き足す必要はありません。else if は前の条件が false のときしか来ないためです

生田 陸人
監修生田 陸人
ゆめさくエンジニア / 現役ソフトウェアエンジニア監修者プロフィールを見る →
編集 ゆめさく編集部·公開 2026/08/05·更新 2026/08/26

関連レッスン

  • FizzBuzz で複数条件を組み立てる

    数値を 1 つ受け取り、3 の倍数なら Fizz、5 の倍数なら Buzz、15 の倍数なら FizzBuzz を返す関数を書きます。判定の順番を学ぶ定番のドリルです。

  • つくる 時間帯で挨拶を変える

    0 から 23 の時刻を受け取り、時間帯に合った挨拶を返す関数を作ります。第 4 章の総まとめとして、プロフィールサイトの表示を時間で変えます。

  • 第1章まとめクイズ

    第4章で学んだ if / else if / else、switch、論理演算子による条件の組み立てを 5 問で確認します。判定の順番と境界値の扱いが中心です。

  • 配列のきほん

    複数の値をひとつの変数にまとめて持つための入れ物が配列です。作成のしかたと、番号を使った要素の取り出しかたを覚えます。

このレッスンに出てくる用語

意味があいまいなまま進んだ語は、ここから読み直せます。

  • インデントPythonはインデント(通常スペース4つ)でコードブロックを定義する。
  • 戻り値呼び出し元への返答を表す点線矢印
  • 変数データに名前をつけて参照する仕組み
  • 関数処理に名前を付けて再利用できる単位
  • 引数位置引数=順番で渡す。
main.js
学習モード
エディタを読み込んでいます

メモ

条件を組み合わせる

⌘S で保存