はじめてのTypeScriptプログラミング入門 30日コース | ObjectとFunction - Day 11:関数の応用

30日で身につけるTypeScript
スポンサーリンク
スポンサーリンク
  1. Day 11:関数の応用で「柔らかく賢い関数」を作る
  2. Optional Parameter:あってもなくてもいい引数
    1. Optional Parameterとは
  3. Default Parameter:渡されなかったときの「標準値」
    1. Default Parameterとは
  4. Rest Parameter:可変長の引数をまとめて受け取る
    1. Rest Parameterとは
  5. Arrow Function:短く書ける関数の記法
    1. Arrow Functionとは
  6. Callback:関数を「引数として渡す」
    1. Callbackとは
  7. 実践:商品価格計算関数を設計する
  8. Step 1:基本の価格計算関数を作る
  9. Step 2:割引率をOptional Parameterで扱う
  10. Step 3:消費税率をDefault Parameterで扱う
  11. Step 4:商品価格計算を1つの関数にまとめる
  12. Step 5:Arrow Functionで書き直してみる
  13. Step 6:Callbackで「計算後の処理」を差し込む
  14. Day 11 練習テンプレート
  15. Day 11のまとめ
  16. Day 11:関数の応用を「手になじませる」練習
  17. Optional Parameter:あってもなくてもいい引数
    1. Optional Parameterの基本
  18. Default Parameter:渡されなかったときの「標準値」
    1. Default Parameterの基本
  19. Rest Parameter:可変長引数で「いくつでもどうぞ」
    1. Rest Parameterの基本
  20. Arrow Function:短く書ける関数の記法
    1. Arrow Functionの基本形
  21. Callback Function:関数を「引数として渡す」
    1. Callbackの基本イメージ
  22. 練習1:デフォルト値付き関数を作る
    1. デフォルト値付き関数の例:送料計算
  23. 練習2:可変長引数で合計・平均を計算する
    1. 合計を計算する関数(Rest Parameter)
    2. 平均を計算する関数(Rest Parameter)
  24. 練習3:Arrow Functionで書く「短い関数」
    1. 文字列をトリムする関数
    2. 数値を2倍にする関数
  25. 練習4:Callback Functionで「後処理」を差し込む
    1. 計算結果をコールバックで受け取る関数
  26. Day 11 練習テンプレート
  27. Day 11のまとめ

Day 11:関数の応用で「柔らかく賢い関数」を作る

Day 11では、関数をもう一歩進めて、Optional Parameter / Default Parameter / Rest Parameter / Arrow Function / Callback といった「応用テクニック」を扱っていきます。 題材は「商品価格計算」。 商品価格・数量・割引率・消費税率を使って、現実的な計算ロジックを、柔軟な関数として設計する流れを体験していきます。

Optional Parameter:あってもなくてもいい引数

Optional Parameterとは

Optional Parameter(オプショナルパラメータ)は、「引数があってもなくてもいい」という意味の引数です。 TypeScriptでは、引数名の後ろに ? を付けて表現します。

function greet(name: string, title?: string): string {
  // title があればそれも含めて挨拶文を作る
  if (title) {
    return `${title}${name}さん、こんにちは`;
  } else {
    return `${name}さん、こんにちは`;
  }
}

console.log(greet("Taro"));              // Taroさん、こんにちは
console.log(greet("Hanako", "先生"));    // 先生のHanakoさん、こんにちは
TypeScript

ポイント:

  • title?: string が Optional Parameterです。
  • 呼び出し側は、greet("Taro") のように省略してもOKです。
  • 「状況によって渡したり渡さなかったりする情報」を扱うときに便利です。

Default Parameter:渡されなかったときの「標準値」

Default Parameterとは

Default Parameter(デフォルトパラメータ)は、「引数が渡されなかったときに使う標準値」をあらかじめ決めておく仕組みです。

function greetWithDefault(name: string, title: string = "さん"): string {
  // title が渡されなければ "さん" が使われる
  return `${name}${title}、こんにちは`;
}

console.log(greetWithDefault("Taro"));           // Taroさん、こんにちは
console.log(greetWithDefault("Hanako", "先生")); // Hanako先生、こんにちは
TypeScript

ポイント:

  • title: string = "さん" のように、= で初期値を指定します。
  • 呼び出し側が値を渡さなかった場合、その初期値が使われます。
  • 「ほとんどの場合はこの値でOK、たまに変えたい」というときにとても便利です。

Rest Parameter:可変長の引数をまとめて受け取る

Rest Parameterとは

Rest Parameter(レストパラメータ)は、「いくつ渡されるかわからない引数を、配列としてまとめて受け取る」ための仕組みです。 ... を使って表現します。

function sumAll(...numbers: number[]): number {
  let sum = 0;
  for (const n of numbers) {
    sum += n;
  }
  return sum;
}

console.log(sumAll(1, 2, 3));        // 6
console.log(sumAll(10, 20, 30, 40)); // 100
TypeScript

ポイント:

  • ...numbers: number[] が Rest Parameterです。
  • 呼び出し側は、sumAll(1, 2, 3) のように、好きな数だけ引数を渡せます。
  • 「複数の値をまとめて処理したいけれど、個数が決まっていない」というときに役立ちます。

Arrow Function:短く書ける関数の記法

Arrow Functionとは

Arrow Function(アロー関数)は、関数を短く書くための記法です。 (引数) => { 処理 } という形で書きます。

// 通常の関数
function double(n: number): number {
  return n * 2;
}

// アロー関数版
const doubleArrow = (n: number): number => {
  return n * 2;
};

console.log(double(5));       // 10
console.log(doubleArrow(5));  // 10
TypeScript

さらに、1行で書ける場合は return と波括弧を省略できます。

const doubleShort = (n: number): number => n * 2;

console.log(doubleShort(5)); // 10
TypeScript

ポイント:

  • アロー関数は、mapfilter などの配列メソッドと相性がよく、よく使われます。
  • 「短く書けるけれど、型はしっかり付ける」というスタイルがTypeScriptらしい書き方です。

Callback:関数を「引数として渡す」

Callbackとは

Callback(コールバック)は、「関数を引数として渡す」という考え方です。 「処理の一部を、呼び出し側に任せる」イメージです。

// callback を受け取る関数
function runTwice(callback: () => void): void {
  callback(); // 1回目
  callback(); // 2回目
}

// 実際に渡す関数(アロー関数)
const sayHello = () => {
  console.log("こんにちは");
};

runTwice(sayHello);
// こんにちは
// こんにちは
TypeScript

ポイント:

  • callback: () => void は、「引数なし・戻り値なしの関数」を受け取るという意味です。
  • 呼び出し側は、runTwice(sayHello) のように関数を渡します。
  • 「処理の中で、特定のタイミングで呼び出したい処理を外から差し込む」というときに使われます。

実践:商品価格計算関数を設計する

ここからは、商品価格計算を題材に、今日の学習内容を組み合わせていきます。

  • 商品価格(単価)
  • 数量
  • 割引率(Optional / Default)
  • 消費税率(Default)

を使って、柔軟に使える価格計算関数を作ってみましょう。

Step 1:基本の価格計算関数を作る

まずは、シンプルな「税抜き価格 × 数量」の関数から始めます。

// 税抜き価格と数量から小計を計算する関数
function calcSubtotal(price: number, quantity: number): number {
  // price: 商品の単価
  // quantity: 数量
  return price * quantity;
}

const subtotal = calcSubtotal(1000, 3); // 1000円 × 3個
console.log("小計:", subtotal); // 3000
TypeScript

ポイント:

  • 引数 price: number, quantity: number
  • 戻り値 number
  • 「まずは小計を出す」という基本ステップを関数に切り出しています。

Step 2:割引率をOptional Parameterで扱う

次に、「割引率がある場合は割り引く」処理を追加します。 割引率は、ない場合もあるので、Optional Parameterにしてみます。

// 小計と割引率から、割引後の金額を計算する関数
function applyDiscount(subtotal: number, discountRate?: number): number {
  // discountRate が渡されていない場合は、割引なし(そのまま)
  if (discountRate === undefined) {
    return subtotal;
  }

  // 割引率は 0.1 なら 10% 割引というイメージ
  const discountAmount = subtotal * discountRate;
  const discountedTotal = subtotal - discountAmount;
  return discountedTotal;
}

const subtotal2 = 3000;

// 割引なし
console.log("割引なし:", applyDiscount(subtotal2)); // 3000

// 10%割引
console.log("10%割引:", applyDiscount(subtotal2, 0.1)); // 2700
TypeScript

深掘りポイント:

  • discountRate?: number が Optional Parameterです。
  • discountRate === undefined で「渡されていないかどうか」をチェックしています。
  • 「割引があるときだけ割り引く」という現実的なロジックを、関数に閉じ込めています。

Step 3:消費税率をDefault Parameterで扱う

次に、消費税率を扱います。 消費税率は、ほとんどの場合は同じ値(例:10%)なので、Default Parameterがぴったりです。

// 税込み金額を計算する関数
function applyTax(amount: number, taxRate: number = 0.1): number {
  // taxRate が渡されなければ 0.1(10%)が使われる
  const tax = amount * taxRate;
  const totalWithTax = amount + tax;
  return totalWithTax;
}

const amount = 2700;

// デフォルトの 10% 消費税
console.log("税込(10%):", applyTax(amount)); // 2970

// 8% 消費税(別の税率を指定)
console.log("税込(8%):", applyTax(amount, 0.08)); // 2916
TypeScript

深掘りポイント:

  • taxRate: number = 0.1 が Default Parameterです。
  • 呼び出し側が税率を渡さなければ、10%が自動的に使われます。
  • 「標準値が決まっているけれど、状況によって変えたいこともある」というときに、とても自然な書き方になります。

Step 4:商品価格計算を1つの関数にまとめる

ここまでの要素を組み合わせて、商品価格計算の総合関数を作ってみます。

  • 単価 price
  • 数量 quantity
  • 割引率 discountRate(Optional)
  • 消費税率 taxRate(Default)
// 商品価格計算の総合関数
function calcTotalPrice(
  price: number,
  quantity: number,
  discountRate?: number,   // Optional:割引率(例: 0.1 で 10%)
  taxRate: number = 0.1    // Default:消費税率(デフォルト 10%)
): number {
  // 1. 小計を計算
  const subtotal = price * quantity;

  // 2. 割引を適用(割引率があれば)
  let discounted = subtotal;
  if (discountRate !== undefined) {
    const discountAmount = subtotal * discountRate;
    discounted = subtotal - discountAmount;
  }

  // 3. 消費税を適用
  const tax = discounted * taxRate;
  const total = discounted + tax;

  return total;
}

// テスト
console.log("=== 商品価格計算 ===");

// 単価 1000円 × 3個、割引なし、消費税10%
console.log("ケース1:", calcTotalPrice(1000, 3)); 

// 単価 1000円 × 3個、10%割引、消費税10%
console.log("ケース2:", calcTotalPrice(1000, 3, 0.1)); 

// 単価 2000円 × 2個、5%割引、消費税8%
console.log("ケース3:", calcTotalPrice(2000, 2, 0.05, 0.08));
TypeScript

重要ポイント:

  • Optional ParameterとDefault Parameterを同時に使っています。
  • 「割引率がない場合は割引なし」「税率が渡されない場合は10%」という、現実的なルールを関数に閉じ込めています。
  • 関数の中で処理を順番に並べることで、「計算の流れ」が読みやすくなっています。

Step 5:Arrow Functionで書き直してみる

同じ calcTotalPrice を、Arrow Functionで書いてみると、記法の違いが見えてきます。

// Arrow Function版の商品価格計算関数
const calcTotalPriceArrow = (
  price: number,
  quantity: number,
  discountRate?: number,
  taxRate: number = 0.1
): number => {
  const subtotal = price * quantity;

  let discounted = subtotal;
  if (discountRate !== undefined) {
    const discountAmount = subtotal * discountRate;
    discounted = subtotal - discountAmount;
  }

  const tax = discounted * taxRate;
  const total = discounted + tax;

  return total;
};

console.log("Arrow版 ケース1:", calcTotalPriceArrow(1000, 3));
console.log("Arrow版 ケース2:", calcTotalPriceArrow(1000, 3, 0.1));
TypeScript

ポイント:

  • function キーワードの代わりに、const 関数名 = (引数) => { ... } という形になっています。
  • 型の付け方は通常の関数と同じです。
  • 「関数を変数として扱う」感覚が少し見えてきます。

Step 6:Callbackで「計算後の処理」を差し込む

最後に、Callbackを使って、「計算後に何をするか」を外から指定できるようにしてみます。

// 計算結果を受け取って何かするためのコールバック型
type PriceCallback = (total: number) => void;

// コールバックを受け取る商品価格計算関数
function calcTotalPriceWithCallback(
  price: number,
  quantity: number,
  discountRate: number | undefined,
  taxRate: number,
  callback: PriceCallback
): void {
  const subtotal = price * quantity;

  let discounted = subtotal;
  if (discountRate !== undefined) {
    const discountAmount = subtotal * discountRate;
    discounted = subtotal - discountAmount;
  }

  const tax = discounted * taxRate;
  const total = discounted + tax;

  // 計算結果をコールバックに渡す
  callback(total);
}

// 実際に使うコールバック(アロー関数)
const printTotal = (total: number): void => {
  console.log("計算結果(コールバック):", total);
};

// 実行
calcTotalPriceWithCallback(1000, 3, 0.1, 0.1, printTotal);
TypeScript

深掘りポイント:

  • PriceCallback 型で、「totalを受け取って何かする関数」を表現しています。
  • calcTotalPriceWithCallback は、計算ロジックだけを担当し、「結果をどう扱うか」はコールバックに任せています。
  • こうした「役割分担」は、コードの再利用性やテストのしやすさを高めるうえで、とても重要です。

Day 11 練習テンプレート

最後に、今日の内容をまとめた練習用テンプレートを載せておきます。 このままコピーして、割引率や税率、コールバックの中身を変えながら試してみてください。

// day11-template.ts
// Day 11:関数の応用 テンプレート

// Optional / Default / Arrow / Callback を使った商品価格計算

type PriceCallback = (total: number) => void;

// 総合的な商品価格計算関数(通常の関数)
function calcTotalPrice(
  price: number,
  quantity: number,
  discountRate?: number,
  taxRate: number = 0.1
): number {
  const subtotal = price * quantity;

  let discounted = subtotal;
  if (discountRate !== undefined) {
    const discountAmount = subtotal * discountRate;
    discounted = subtotal - discountAmount;
  }

  const tax = discounted * taxRate;
  const total = discounted + tax;

  return total;
}

// Arrow Function版
const calcTotalPriceArrow = (
  price: number,
  quantity: number,
  discountRate?: number,
  taxRate: number = 0.1
): number => {
  const subtotal = price * quantity;

  let discounted = subtotal;
  if (discountRate !== undefined) {
    const discountAmount = subtotal * discountRate;
    discounted = subtotal - discountAmount;
  }

  const tax = discounted * taxRate;
  const total = discounted + tax;

  return total;
};

// Callbackを使う版
function calcTotalPriceWithCallback(
  price: number,
  quantity: number,
  discountRate: number | undefined,
  taxRate: number,
  callback: PriceCallback
): void {
  const subtotal = price * quantity;

  let discounted = subtotal;
  if (discountRate !== undefined) {
    const discountAmount = subtotal * discountRate;
    discounted = subtotal - discountAmount;
  }

  const tax = discounted * taxRate;
  const total = discounted + tax;

  callback(total);
}

// テスト用コールバック
const printTotal = (total: number): void => {
  console.log("計算結果:", total);
};

// テスト実行
console.log("=== Day 11 テスト ===");
console.log("ケース1(割引なし・税10%):", calcTotalPrice(1000, 3));
console.log("ケース2(10%割引・税10%):", calcTotalPrice(1000, 3, 0.1));
console.log("ケース3(5%割引・税8%):", calcTotalPrice(2000, 2, 0.05, 0.08));

console.log("Arrow版 ケース1:", calcTotalPriceArrow(1500, 2));

calcTotalPriceWithCallback(1000, 3, 0.1, 0.1, printTotal);
TypeScript

Day 11のまとめ

Day 11では、

  • Optional Parameterで「あってもなくてもいい引数」を扱う方法
  • Default Parameterで「渡されなかったときの標準値」を設定する方法
  • Rest Parameterで「可変長の引数」をまとめて受け取る方法
  • Arrow Functionで、関数を短く・柔らかく書く記法
  • Callbackで、「関数を引数として渡し、処理の一部を外から差し込む」考え方
  • 商品価格計算という現実的な題材を通して、これらを組み合わせる練習

を一通り体験しました。

今日のコードは、ぜひ割引率や税率、数量を変えたり、コールバックの中でログを取ったりアラートを出したりしながら、「関数の応用テクニックがどんな場面で効いてくるか」を自分の感覚で確かめてみてください。 関数が柔軟に設計できるようになると、プログラム全体がぐっと“賢く”動き始めます。


Day 11:関数の応用を「手になじませる」練習

Day 11のテーマは、関数の応用です。 今日のキーワードは次の5つです。

  • Optional Parameter(オプショナル引数)
  • Default Parameter(デフォルト値付き引数)
  • Rest Parameter(可変長引数)
  • Arrow Function(アロー関数)
  • Callback Function(コールバック関数)

ここでは、それぞれを小さな例題→少し深掘り→テンプレートという流れで、初心者の方でもスッと読める形で解説していきます。

Optional Parameter:あってもなくてもいい引数

Optional Parameterの基本

Optional Parameterは、「引数があってもなくてもいい」という意味の引数です。 TypeScriptでは、引数名の後ろに ? を付けて表現します。

// Optional Parameter を使った挨拶関数
function greet(name: string, title?: string): string {
  // title が渡されているかどうかでメッセージを変える
  if (title) {
    return `${title}${name}さん、こんにちは`;
  } else {
    return `${name}さん、こんにちは`;
  }
}

console.log(greet("Taro"));              // Taroさん、こんにちは
console.log(greet("Hanako", "先生"));    // 先生のHanakoさん、こんにちは
TypeScript

重要ポイント:

  • title?: string が Optional Parameterです。
  • 呼び出し側は、greet("Taro") のように省略してもOKです。
  • 「状況によって渡したり渡さなかったりする情報」を扱うときに便利です。

Default Parameter:渡されなかったときの「標準値」

Default Parameterの基本

Default Parameterは、「引数が渡されなかったときに使う標準値」をあらかじめ決めておく仕組みです。

// Default Parameter を使った挨拶関数
function greetWithDefault(name: string, suffix: string = "さん"): string {
  // suffix が渡されなければ "さん" が使われる
  return `${name}${suffix}、こんにちは`;
}

console.log(greetWithDefault("Taro"));           // Taroさん、こんにちは
console.log(greetWithDefault("Hanako", "先生")); // Hanako先生、こんにちは
TypeScript

重要ポイント:

  • suffix: string = "さん" のように、= で初期値を指定します。
  • 呼び出し側が値を渡さなかった場合、その初期値が使われます。
  • 「ほとんどの場合はこの値でOK、たまに変えたい」というときにとても自然な書き方になります。

Rest Parameter:可変長引数で「いくつでもどうぞ」

Rest Parameterの基本

Rest Parameterは、「いくつ渡されるかわからない引数を、配列としてまとめて受け取る」ための仕組みです。 ... を使って表現します。

// 可変長引数で合計を計算する関数
function sumAll(...numbers: number[]): number {
  let sum = 0;

  // numbers は配列として扱える
  for (const n of numbers) {
    sum += n;
  }

  return sum;
}

console.log(sumAll(1, 2, 3));        // 6
console.log(sumAll(10, 20, 30, 40)); // 100
TypeScript

重要ポイント:

  • ...numbers: number[] が Rest Parameterです。
  • 呼び出し側は、sumAll(1, 2, 3) のように、好きな数だけ引数を渡せます。
  • 「複数の値をまとめて処理したいけれど、個数が決まっていない」というときに役立ちます。

Arrow Function:短く書ける関数の記法

Arrow Functionの基本形

Arrow Functionは、関数を短く書くための記法です。 (引数) => { 処理 } という形で書きます。

// 通常の関数
function double(n: number): number {
  return n * 2;
}

// Arrow Function版
const doubleArrow = (n: number): number => {
  return n * 2;
};

console.log(double(5));       // 10
console.log(doubleArrow(5));  // 10
TypeScript

さらに、1行で書ける場合は return と波括弧を省略できます。

const doubleShort = (n: number): number => n * 2;

console.log(doubleShort(5)); // 10
TypeScript

重要ポイント:

  • Arrow Functionは、mapfilter などの配列メソッドと相性がよく、よく使われます。
  • 「短く書けるけれど、型はしっかり付ける」というスタイルがTypeScriptらしい書き方です。

Callback Function:関数を「引数として渡す」

Callbackの基本イメージ

Callback Functionは、「関数を引数として渡す」という考え方です。 「処理の一部を、呼び出し側に任せる」イメージです。

// callback を受け取る関数
function runTwice(callback: () => void): void {
  // callback を 2 回呼び出す
  callback();
  callback();
}

// 実際に渡す関数(Arrow Function)
const sayHello = (): void => {
  console.log("こんにちは");
};

runTwice(sayHello);
// こんにちは
// こんにちは
TypeScript

重要ポイント:

  • callback: () => void は、「引数なし・戻り値なしの関数」を受け取るという意味です。
  • 呼び出し側は、runTwice(sayHello) のように関数を渡します。
  • 「処理の中で、特定のタイミングで呼び出したい処理を外から差し込む」というときに使われます。

練習1:デフォルト値付き関数を作る

ここからは、課題に沿って実際に関数を作っていきます。

デフォルト値付き関数の例:送料計算

// 商品価格と送料を合計する関数(送料にデフォルト値を設定)
function calcTotalWithShipping(price: number, shipping: number = 500): number {
  // shipping が渡されなければ 500 が使われる
  return price + shipping;
}

console.log("送料デフォルト:", calcTotalWithShipping(2000));      // 2500
console.log("送料指定:", calcTotalWithShipping(2000, 800));        // 2800
TypeScript
  • shipping: number = 500 が Default Parameterです。
  • 「だいたい500円だけど、場合によって変えたい」という現実的なパターンを表現しています。

練習2:可変長引数で合計・平均を計算する

合計を計算する関数(Rest Parameter)

// 可変長引数で合計を計算
function sum(...values: number[]): number {
  let total = 0;
  for (const v of values) {
    total += v;
  }
  return total;
}

console.log("sum(1, 2, 3):", sum(1, 2, 3));           // 6
console.log("sum(10, 20, 30, 40):", sum(10, 20, 30, 40)); // 100
TypeScript

平均を計算する関数(Rest Parameter)

// 可変長引数で平均を計算
function average(...values: number[]): number {
  if (values.length === 0) {
    console.log("エラー: 値がありません");
    return NaN;
  }

  const total = sum(...values); // さきほどの sum 関数を再利用
  return total / values.length;
}

console.log("average(10, 20, 30):", average(10, 20, 30)); // 20
TypeScript
  • Rest Parameterで受け取った値を、配列として扱っています。
  • 既存の関数 sum を再利用することで、「関数を組み合わせる」感覚も育ちます。

練習3:Arrow Functionで書く「短い関数」

文字列をトリムする関数

// 前後の空白を削除する Arrow Function
const trimText = (text: string): string => text.trim();

console.log(trimText("  hello  ")); // "hello"
TypeScript

数値を2倍にする関数

const doubleValue = (n: number): number => n * 2;

console.log(doubleValue(7)); // 14
TypeScript
  • Arrow Functionは、短い処理をサッと書きたいときに向いています。
  • 型をしっかり付けておくことで、読みやすさと安全性を両立できます。

練習4:Callback Functionで「後処理」を差し込む

計算結果をコールバックで受け取る関数

// 計算結果を受け取るコールバックの型
type ResultCallback = (result: number) => void;

// 2つの数値を足して、結果をコールバックに渡す関数
function addWithCallback(a: number, b: number, callback: ResultCallback): void {
  const result = a + b;
  // 計算結果をコールバックに渡す
  callback(result);
}

// 実際に使うコールバック(Arrow Function)
const printResult = (result: number): void => {
  console.log("計算結果:", result);
};

// 実行
addWithCallback(10, 5, printResult); // 計算結果: 15
TypeScript
  • ResultCallback 型で、「結果を受け取って何かする関数」を表現しています。
  • addWithCallback は計算だけを担当し、「結果をどう扱うか」はコールバックに任せています。
  • こうした「役割分担」は、コードの再利用性やテストのしやすさを高めます。

Day 11 練習テンプレート

最後に、今日の内容をまとめた練習用テンプレートを載せておきます。 このままコピーして、値や処理内容を変えながら、自分なりの関数を増やしてみてください。

// day11-practice.ts
// Day 11:関数の応用 練習テンプレート

// 1. デフォルト値付き関数
function calcTotalWithShipping(price: number, shipping: number = 500): number {
  return price + shipping;
}

// 2. 可変長引数で合計
function sum(...values: number[]): number {
  let total = 0;
  for (const v of values) {
    total += v;
  }
  return total;
}

// 3. 可変長引数で平均
function average(...values: number[]): number {
  if (values.length === 0) {
    console.log("エラー: 値がありません");
    return NaN;
  }
  const total = sum(...values);
  return total / values.length;
}

// 4. Arrow Function(文字列トリム)
const trimText = (text: string): string => text.trim();

// 5. Arrow Function(2倍)
const doubleValue = (n: number): number => n * 2;

// 6. Callback 用の型
type ResultCallback = (result: number) => void;

// 7. Callback Function を使った足し算
function addWithCallback(a: number, b: number, callback: ResultCallback): void {
  const result = a + b;
  callback(result);
}

// 8. 実際に使うコールバック
const printResult = (result: number): void => {
  console.log("計算結果:", result);
};

// テスト実行
console.log("=== Day 11 テスト ===");
console.log("送料デフォルト:", calcTotalWithShipping(2000));
console.log("送料指定:", calcTotalWithShipping(2000, 800));

console.log("sum(1, 2, 3):", sum(1, 2, 3));
console.log("average(10, 20, 30):", average(10, 20, 30));

console.log("trimText:", trimText("  hello  "));
console.log("doubleValue:", doubleValue(7));

addWithCallback(10, 5, printResult);
TypeScript

Day 11のまとめ

Day 11では、

  • Optional Parameterで「あってもなくてもいい引数」を扱う方法
  • Default Parameterで「渡されなかったときの標準値」を設定する方法
  • Rest Parameterで「可変長の引数」をまとめて受け取る方法
  • Arrow Functionで、関数を短く・柔らかく書く記法
  • Callback Functionで、「関数を引数として渡し、処理の一部を外から差し込む」考え方

を、具体的なコードとともに体験しました。

今日のコードは、ぜひ引数の値や処理内容を変えたり、関数を組み合わせたりしながら、「関数の応用テクニックがどんな場面で効いてくるか」を自分の感覚で確かめてみてください。 関数が柔軟に設計できるようになると、プログラム全体がぐっと書きやすく、そして楽しくなっていきます。

タイトルとURLをコピーしました