1. 肩書きを省略した標準の呼び出し
  2. 肩書きを渡したとき
  3. 作品が 1 つも無いとき
  4. name が空文字列のとき
  5. works が配列でないとき
コース一覧
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分

つくる 処理を関数に整理する

解説

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

  • 1 本の大きな関数を、役割ごとの小さな関数に分けられます
  • ガード節、デフォルト引数、forEach を 1 つのコードで組み合わせます

検査も組み立ても 1 本に詰め込むと、直す場所が決まらない

第 6 章では、関数まわりの道具を 7 つ手に入れました。名前を付ける関数宣言、短く書くアロー関数、省略に備えるデフォルト引数、入口ではじくガード節、変数を閉じ込めるスコープ、関数を渡すコールバック、そして配列をまわす forEach です。今回はその総仕上げとして、プロフィールページに出す文字列を組み立てる buildProfilePage を書きます。作りたいのは次の形です。

プレーンテキスト

こんにちは、山田 太郎さん Web エンジニアを目指しています 1. プロフィールサイト 2. 自己紹介カード

これを 1 本の関数に全部書くこともできます。ですがそうすると、挨拶の文言を変えたいときも、作品の並べ方を変えたいときも、入力の検査を足したいときも、同じ 1 本を開くことになります。どこを直せばいいのか分からない、という状態はここから生まれます。

仕事の性質で分ける

仕様を読み直すと、性質の違う仕事が 3 つ混ざっています。

仕事担当
挨拶の 1 行を作る挨拶担当の関数
作品の一覧を組み立てる一覧担当の関数
入力を検査して全体をつなぐbuildProfilePage

分ける利点は、直す場所が 1 か所に決まることです。挨拶を変えたければ挨拶担当だけを見ればよく、他は開かなくて済みます。まとめ役は、部品を呼んでつなぐことに集中します。

形だけ、別の題材で見ておきます。

JavaScript

function buildCard(title, body) { if (typeof title !== "string" || title === "") return "表示できません"; return cardHeader(title) + "\n" + body; }

最初の行が「受け付けない入力」、最後の行が「やりたいこと」。本体が 1 行で、しかも一番浅いインデントにあります。この形にたどり着けるのが第 6 章の成果です。検査はまとめ役の 1 か所に集め、部品の側では書きません。部品は正常な値が来る前提で書いてよい、と約束しておくと全体が読みやすくなります。

分けすぎにも気を付けてください。1 行しかない処理を関数にすると、定義を探しに行く手間のほうが大きくなります。同じ処理が 2 か所以上に出てくる、名前が付けられて数行ある、独立して確かめたい。このどれかに当てはまるときだけ分けます。

配列かどうかは typeof では分からない

配列が来るはずのところへ null が届く、という場面はよくあります。ところが typeof は、配列も null も "object" と答えるので判定に使えません。

JavaScript

console.log(typeof ["A", "B"]); // object console.log(typeof null); // object console.log(Array.isArray(["A", "B"])); // true console.log(Array.isArray(null)); // false

配列かどうかを確かめたいときは Array.isArray を使います。ガード節に並べておけば、本体では中身があることだけを考えればよくなります。

よくある間違い

  • 作業用の配列を関数の外に置く — 行を集める配列を外に置くと、2 回目の呼び出しに前回の行が残ります。スコープのレッスンで見たとおり、宣言は関数の中です
  • 空配列のときを決めていない — 空の配列をつないでも空文字列になるだけで、エラーは出ません。画面には不自然な余白だけが残ります。何を返すかを先に決めてください

要件

  1. 関数名は buildProfilePage、引数は name, works, role の順にすること
  2. role にはデフォルト引数 Web エンジニアを目指しています を設定すること
  3. 不正な入力はガード節で冒頭にはじき、文字列 入力エラー を返すこと
  4. 挨拶を作る関数と作品一覧を作る関数に分け、buildProfilePage から呼び出すこと

入出力例

buildProfilePage("山田 太郎", ["プロフィールサイト","自己紹介カード","スキル一覧の表"]) → "こんにちは、山田 太郎さん Web エンジニアを目指しています 1. プロフィールサイト 2. 自己紹介カード 3. スキル一覧の表" buildProfilePage("鈴木 花子", ["自己紹介カード"], "デザイナー") → "こんにちは、鈴木 花子さん デザイナー 1. 自己紹介カード" buildProfilePage("山田 太郎", []) → "こんにちは、山田 太郎さん Web エンジニアを目指しています 作品はまだありません" buildProfilePage("", ["プロフィールサイト"]) → "入力エラー" buildProfilePage("山田 太郎", null) → "入力エラー"

ヒント

先に分け方を決めます。挨拶の 1 行を作る関数、作品一覧を作る関数、全体を組み立てる関数の 3 本です

作品一覧は空の配列に forEach で push し、0 件なら `作品はまだありません` を返してから join します

配列かどうかの判定は typeof ではなく Array.isArray(works) を使ってください

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

関連レッスン

  • 第3章まとめクイズ

    第6章で学んだ関数宣言とアロー関数、デフォルト引数、ガード節、スコープ、コールバックと forEach を 5 問で確認します。

  • オブジェクトのきほん

    関連する値をひとつの箱にまとめる入れ物がオブジェクトです。作成とプロパティの読み書きを身に付けます。

  • forEach で配列をまわす

    配列の各要素に対してコールバック関数を順番に呼んでくれるメソッドを学びます。作品一覧の組み立てを forEach で書き直します。

  • コールバック関数

    他の関数に引数として渡し、あとで呼んでもらう関数について学びます。第9章でボタンのクリックに反応させるとき、この仕組みがそのまま使われます。

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

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

  • 関数処理に名前を付けて再利用できる単位
  • デフォルト引数引数省略時の値を = で指定する記法
  • 引数位置引数=順番で渡す。
  • アロー関数=> で書く軽量な関数。this を継承する
  • 変数データに名前をつけて参照する仕組み
  • スコープ変数が参照可能な範囲
  • コールバック子から親へ通知するための関数 props
  • 配列サイズ固定の同型データの集まり
main.js
学習モード
エディタを読み込んでいます

メモ

つくる 処理を関数に整理する

⌘S で保存