1. 0 は 15 の倍数として FizzBuzz
  2. 1 はどれでもないので文字列の 1
  3. 3 は Fizz
  4. 5 は Buzz
  5. 15 は FizzBuzz
コース一覧
JavaScript基礎文法:処理を組み立てる
FizzBuzz で複数条件を組み立てる

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分

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

条件はきびしい順に
解説

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

  • 剰余演算子 % は割り算の余りを返し、倍数の判定に使えます
  • 条件どうしが重なっているときは、狭いほうを先に書きます
  • 数値をそのまま返すと、文字列を期待するテストは通りません

「割り切れたか」をどう聞くか

FizzBuzz は英語圏の数え上げゲームです。1 から順に数え、3 の倍数では数の代わりに Fizz、5 の倍数では Buzz、両方の倍数では FizzBuzz と言います。これをプログラムにする課題が入門の定番になったのは、条件分岐の順番という、初心者がいちばんつまずくところが凝縮されているからです。今回はプロフィールサイトを離れ、数を 1 つ受け取って、その 1 つぶんの答えを返す関数を書きます。

まず要るのは「割り切れたか」を聞く手段です。剰余演算子 % は、割り算の余りを返します。

JavaScript

console.log(9 % 4); // => 1 console.log(8 % 4); // => 0 console.log(0 % 4); // => 0

余りが 0 なら割り切れた、つまり倍数だということです。条件式にすると n % 4 === 0 の形になります。

3 行目に注目してください。0 はどんな数で割っても余りが 0 です。つまり 0 は、あらゆる数の倍数として扱われます。テストに 0 が含まれているときは、必ず手で流して確かめてください。

先に書いた条件が、後ろの条件を飲み込む

ここからが本題です。倍数の判定には、条件どうしが重なるという厄介な性質があります。

JavaScript

// NG。8 を渡しても「2 の倍数」しか返らない if (n % 2 === 0) { return "2 の倍数"; } else if (n % 4 === 0) { return "4 の倍数"; }

8 は 4 の倍数ですが、同時に 2 の倍数でもあります。else if は最初に当たった枝で打ち止めなので、2 つ目の枝には永遠に届きません。

条件当てはまる数広さ
n % 4 === 00, 4, 8, 12狭い
n % 2 === 00, 2, 4, 6, 8広い

4 の倍数は、2 の倍数の中にすっかり含まれています。含まれている側、つまり狭い条件を先に書かなければ、そこへはたどり着けません。逆に、重なりのない条件どうしなら順番は自由です。書き始める前に「この条件とこの条件は重なるか」を確かめる癖を付けてください。

なお、2 つの条件を同時に満たすことは && でも表せます。n % 2 === 0 && n % 3 === 0 は「6 の倍数」と同じ意味です。仕様書の言い回しに近いほうを選んでください。

解説

この考え方は FizzBuzz だけの話ではありません。会員ランクの判定でも、割引の適用でも、エラーの分類でも、条件が重なる場面ではいつも同じことを考えます。FizzBuzz が入門課題として愛される理由はここにあります。

数値のまま返すとテストが赤くなる

倍数でないときに数そのものを返す仕様でも、返すのは数値ではなく文字列です。String() に通せば、数値を文字列に変えられます。

JavaScript

console.log(String(7)); // => 7 console.log(typeof String(7)); // => string

テンプレートリテラルで書いても結果は同じです。戻り値の型がそろっていないと、呼び出す側が毎回型を気にすることになります。

よくある間違い

  • 重なりを見落として並べる — 書き終えたら、複数の条件を同時に満たす値を 1 つ選んで手で流してください。そこが合っていれば残りはほぼ通ります
  • else を付けずに if を並べる — return で返す形なら結果は変わりませんが、変数に代入して組み立てる形だと、後ろの代入で上書きされます

要件

  1. 関数名は fizzBuzz、引数は 0 以上の整数 n の 1 つ
  2. 15 の倍数なら "FizzBuzz"、3 の倍数なら "Fizz"、5 の倍数なら "Buzz" を返す
  3. どれにも当てはまらないときは String(n) のように数値を文字列にして返す
  4. 戻り値は必ず文字列にし、数値のまま返さない

入出力例

fizzBuzz(0) → "FizzBuzz" fizzBuzz(1) → "1" fizzBuzz(3) → "Fizz" fizzBuzz(5) → "Buzz" fizzBuzz(15) → "FizzBuzz"

ヒント

倍数の判定は剰余演算子を使い、n % 3 === 0 のように余りが 0 かどうかで見ます

if と else if を 3 つつなげ、最後の else で String(n) を返します

15 の判定を最後に書くと "FizzBuzz" が永遠に出ません。書けたら 15 と 0 を手で流して確かめてください

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

関連レッスン

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

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

  • 第1章まとめクイズ

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

  • 配列のきほん

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

  • 関数宣言

    function キーワードで処理に名前を付け、引数を受け取って戻り値を返す仕組みを学びます。プロフィールサイトの挨拶づくりを関数にまとめます。

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

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

  • 剰余演算子% で割り算の余りを得る演算子
  • 演算子//は切り捨て除算(7 // 2 = 3)。
  • テストバグを見つける工程
  • 関数処理に名前を付けて再利用できる単位
  • 分類カテゴリを当てる教師ありタスク
  • テンプレート投稿の型。迷わず書き始められる
  • テンプレートリテラルバッククォートで文字列に式を埋め込む書式
  • 戻り値呼び出し元への返答を表す点線矢印
main.js
学習モード
エディタを読み込んでいます

メモ

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

⌘S で保存