例外処理 / ch08 — 入力検証で例外を活用する / 演習 01

📝 ドリル 01 — 年齢を検証して例外で弾く

問題

標準入力から整数 $age を 1 行読み込みます。

validateAge(int $age) という関数を定義してください。

  • $age < 0 または $age > 150 の場合、 throw new InvalidArgumentException("age must be 0-150: $age")
  • それ以外は何もしない

main 部分では try / catch を使ってください。

  • tryvalidateAge($age); を呼び、続けて "OK: $age" を出力
  • catch (InvalidArgumentException $e)"NG: " . $e->getMessage() を出力

入力例 (tests/input.txt)

200

期待される出力 (tests/expected.txt)

NG: age must be 0-150: 200

採点

php scripts/grade.php v2/topics/10-exception/ch08-validation-pattern/drill/01-validate/

ヒント

  • function validateAge(int $age) { if ... throw new InvalidArgumentException(...); }
  • try { validateAge($age); echo "OK: $age\n"; }
  • catch (InvalidArgumentException $e) { echo "NG: " . $e->getMessage() . "\n"; }

テストケース

標準入力

200

期待される出力

NG: age must be 0-150: 200

📄 starter.php(雛形)

このコードから書き始めてください。

<?php

// TODO: 関数 validateAge(int $age) を定義する
//   - age が 0 未満または 150 超なら
//     throw new InvalidArgumentException("age must be 0-150: $age")
//   - それ以外は何もしない

// TODO: 標準入力から $age を読み込む
//   $age = (int) trim(fgets(STDIN));

// TODO: try / catch を書く
//   try { validateAge($age); echo "OK: $age\n"; }
//   catch (InvalidArgumentException $e) { echo "NG: " . $e->getMessage() . "\n"; }
✅ 解答例を見る(自分で解いてから)
<?php

function validateAge(int $age) {
    if ($age < 0 || $age > 150) {
        throw new InvalidArgumentException("age must be 0-150: $age");
    }
}

$age = (int) trim(fgets(STDIN));

try {
    validateAge($age);
    echo "OK: $age\n";
} catch (InvalidArgumentException $e) {
    echo "NG: " . $e->getMessage() . "\n";
}