この記事で学べる知識:関数の型付け
この記事の練習問題を解くために必要な知識:
ビルトイン関数、関数の定義と呼出し、関数の戻り値、デフォルト引数とキーワード引数、関数の型付け、無名関数とアロー関数、スコープ
<<前のページ | PHP記事一覧 |
次のページ>> |
PHPの「関数の型付け」とは
この章ではPHPにおける「関数の型付け」の意味や使い方を学習します。用語の解説が不要な方はここをクリックして練習問題へ飛びましょう。
PHPでは関数を定義する際に、引数や戻り値に型を指定することができます。
これを「関数の型付け」と呼びます。
型付けを利用することでコードの品質が向上し、バグを減らす効果が期待できます。
本記事では関数の型付けについて基本的な考え方や使い方を解説します。
型付けの目的と利点
関数の型付けは、引数や戻り値に対して「このデータ型であるべき」というルールを強制する仕組みです。
これにより以下の利点があります:
- コードの読みやすさ向上: 関数の意図が明確になります。
- バグの予防: 不適切なデータ型が渡された場合、エラーを早期に検出できます。
- 一貫性の確保: プロジェクト全体で統一的なデータ型管理が可能です。
型付けの基本構文と例
PHPでは関数の引数と戻り値に対して型を指定できます。
以下は基本構文と例です:
引数と戻り値に型を指定
// 二つのint型の引数を受け取り、int型の戻り値を返すaddNumbers関数の定義
function addNumbers(int $a, int $b): int {
return $a + $b;
}
echo addNumbers(5, 10); // 出力: 15
// echo addNumbers("5", 10); // エラー: 型の不一致
int $a, int $b
は引数の型を指定しています。: int
は戻り値の型を指定しています。- 異なる型が渡された場合はエラーが発生します。
ユニオン型の利用
PHP 8.0以降では、ユニオン型を使用して複数の型を許容することができます。
ユニオン型の例
// int型かstring型の引数を受け取り、String型の戻り値を返すformatValue関数の定義
function formatValue(int|string $value): string {
return "Value: " . $value;
}
echo formatValue(42); // 出力: Value: 42
echo formatValue("Hello"); // 出力: Value: Hello
// echo formatValue(3.14); // エラー: 型の不一致
int|string
は、引数がint
またはstring
のいずれかであることを意味します。- 異なる型が渡されるとエラーになります。
Nullable型の指定
型付けにおいて「値が null でも許容される」場合は?
を使用して Nullable 型を指定します。
Nullable型の例
// string型かnullの引数を受け取り、int型の戻り値を返すgetLength関数の定義
function getLength(?string $input): int {
return $input ? strlen($input) : 0;
}
echo getLength("Hello"); // 出力: 5
echo getLength(null); // 出力: 0
?string
は引数がstring
またはnull
を受け取ることを意味します。null
が渡された場合でもエラーになりません。
まとめ
関数の型付けはコードを安全かつ明確にするための重要な機能です。
PHPでは引数や戻り値の型を指定することでコードの品質向上が期待できます。
次回は「無名関数とアロー関数」について学びましょう。型付けを活用して堅牢なプログラムを作成してください。
関数の型付けの練習問題:エラーを防ぐ安全な関数を学ぼう
入力された数値を2倍にする関数を作成しましょう。
この関数では引数と戻り値の両方に型を指定し、PHPの型付けの仕組みを体験します。
関数を使う際、適切な型でない場合はエラーが発生するようにしてください。
この問題の要件
以下の要件に従ってコードを完成させてください。
doubleValue
という関数を作成すること。- 引数には 整数型(int) のみを受け取る。
- 戻り値は 整数型(int) である。
- 引数の値を2倍にして返す。
- ユーザーに数値を入力してもらうこと。
fgets
を使用して標準入力からデータを受け取る。- 入力値の前後の余白を
trim
で取り除くこと。
- 入力された値が数値であるか確認すること。
- 数値でない場合は「エラー: 数値を入力してください」と表示して終了する。
- 数値が正しく入力された場合は、
doubleValue
関数を呼び出し、結果を画面に表示すること。
ただし、以下のような実行結果となるコードを書くこと。
*****↓↓正解コードの実行結果の例↓↓*****
数値を入力してください:
7
入力した数値の2倍は: 14
数値を入力してください:
abc
エラー: 数値を入力してください。
この問題を解くヒント
1からコードを組み立てることが難しい場合は、以下のヒントを開いて参考にしましょう。
正解のコードは上から順に以下のような構成となっています。
(※下記の□はコード内のインデントを表しています)
1:関数doubleValue
を定義(引数に整数型を指定し、戻り値も整数型)
□ 引数を2倍にした結果を返す
2:「数値を入力してください: 」と改行を出力
3:標準入力から値を取得し、trim
で前後の空白を削除した結果を変数$input
に代入
4:if文
で$input
が数値かどうかを判定
□ $input
を整数型にキャストし、変数$number
に代入
□ doubleValue
関数を呼び出し、その結果を変数$result
に代入
□ 「入力した数値の2倍は: 」と変数$result
の内容を出力
5:else文
□ 「エラー: 数値を入力してください。」と出力
以下のコードをコピーし、コメントに従ってコードを完成させて下さい。
<?php
// 2倍する関数: 引数に整数型(int)を指定し、戻り値も整数型を指定します。
/*
【穴埋め問題1】ここにdoubleValue関数を定義し、引数に整数型(int)を指定して戻り値も整数型を指定してください。
また、関数内で引数を2倍にして返すコードを書いてください。
*/
// メイン処理部分
echo "数値を入力してください: " . PHP_EOL;
// ユーザーからの入力を取得 (ビルトイン関数fgetsを使用)
$input = trim(fgets(STDIN)); // 入力値の前後の空白を削除します
// 入力値の型チェックを実施
if (is_numeric($input)) {
// キャストして関数を呼び出します
$number = (int)$input;
// doubleValue関数を呼び出して結果を取得
$result = doubleValue($number);
// 結果を表示
echo "入力した数値の2倍は: " . $result . PHP_EOL;
} else {
// 入力が数値でない場合のエラーメッセージ
echo "エラー: 数値を入力してください。" . PHP_EOL;
}
以上がこの問題の穴埋めコードです。
このヒントを見てもまだ回答を導き出すのが難しいと感じる場合は、先に正解のコードと解説を見て内容を理解するようにしましょう。
練習問題の解答と解説
この問題の一つの正解例とそのコードの解説を以下に示します。
正解コードの例
例えば以下のようなプログラムが考えられます。
<?php
// 2倍する関数: 引数に整数型(int)を指定し、戻り値も整数型を指定します。
function doubleValue(int $number): int {
// ここで引数の数値を2倍にして返します。
return $number * 2;
}
// メイン処理部分
echo "数値を入力してください: " . PHP_EOL;
// ユーザーからの入力を取得 (ビルトイン関数fgetsを使用)
$input = trim(fgets(STDIN)); // 入力値の前後の空白を削除します
// 入力値の型チェックを実施
if (is_numeric($input)) {
// キャストして関数を呼び出します
$number = (int)$input;
// doubleValue関数を呼び出して結果を取得
$result = doubleValue($number);
// 結果を表示
echo "入力した数値の2倍は: " . $result . PHP_EOL;
} else {
// 入力が数値でない場合のエラーメッセージ
echo "エラー: 数値を入力してください。" . PHP_EOL;
}
正解コードの解説
このコードでは「関数の型付け」を学ぶことを目的としています。
入力された数値を2倍にする関数を作成し、その引数と戻り値の型を明確に指定しています。
コードをブロックごとに分解して説明します。
関数の定義と型付け
function doubleValue(int $number): int {
return $number * 2;
}
- 関数の定義:
function doubleValue
によって、doubleValue
という名前の関数を定義しています。 - 引数の型付け:
(int $number)
は、この関数が 整数型 (int) の引数のみ受け取れることを指定しています。 - 戻り値の型付け:
: int
は、この関数が 整数型 (int) の値を返すことを指定しています。 - 型付けの利点: 型付けを行うことで、誤った型のデータが渡された場合にエラーを出して安全性を高めることができます。
メイン処理部分
echo "数値を入力してください: " . PHP_EOL;
$input = trim(fgets(STDIN));
echo
: 文字列を出力します。ここでは「数値を入力してください」と画面に表示します。fgets
: 標準入力 (キーボードからの入力) を取得するビルトイン関数です。trim
: 入力値の前後の余分な空白や改行を取り除くために使います。PHP_EOL
: 改行を表します。環境に依存せず、適切な改行コードを使用します。
型チェックと条件分岐
if (is_numeric($input)) {
$number = (int)$input;
$result = doubleValue($number);
echo "入力した数値の2倍は: " . $result . PHP_EOL;
} else {
echo "エラー: 数値を入力してください。" . PHP_EOL;
}
is_numeric
: 入力値が数値であるかを確認する関数です。数値でない場合はエラーメッセージを表示します。- キャスト:
(int)
は入力値を整数型に変換します。 - 関数の呼び出し:
$result = doubleValue($number);
で、定義した関数を呼び出し、引数に渡した値を2倍にして戻り値を取得します。 - 条件分岐:
if-else
文を使用して入力が数値である場合とそれ以外の場合で処理を分けています。
まとめ
このコードでは「関数の型付け」の重要性を学びました。
型付けを行うことで不適切なデータが渡された際にエラーを早期に検出でき、コードの安全性が向上します。
ぜひ自分で新しい関数を作り、型付けの効果を実感してください!
<<前のページ |
PHP記事一覧 |
次のページ>> |
この記事への質問・コメント
この記事を作成するにあたりAIを活用しています。
問題ないことは確認していますが、もし間違いや表現の違和感などありましたら、ご指摘頂けると大変助かります。