小さな関数
前項にも関連が深い内容になりますが、関数の扱いに慣れるまではやたらと大きな関数を作りがちです。
関数の扱いに慣れれば慣れるほど、「小さな関数」が大活躍することがわかってきます。
次の例を見てみましょう。
$name = '';
$errors = array();
if(isset($_POST['name'])=== true){
$name = $_POST['name'];
}
if($name === ''){
$errors[] = '名前が入力されていません';
}
if(mb_strlen($name) > 20){
$errors[] = '名前は20文字以内で入力してください';
}
以下略
以上のようなコードがあったとしましょう。
ここに一つ小さな関数を導入します。
function is_valid_name_length($name){
return mb_strlen($name) <= 20;
}
$name = '';
$errors = array();
if(isset($_POST['name'])=== true){
$name = $_POST['name'];
}
if($name === ''){
$errors[] = '名前が入力されていません';
}
if(is_valid_name_length($name) === false){
$errors[] = '名前は20文字以内で入力してください';
}
以下略
たったこれだけで、つまらない関数のようにも思えますが、 この処理が複数のページで行われていることを想定してみましょう。 このようにすることで
- 名前の最大長を変更したい
- 名前の最大長を定数で設定したい
などの改善が、このたった一つの関数を変更するだけで行えるようになります。
同様に、
function is_valid_name_length($name){
return mb_strlen($name) <= 20;
}
function is_empty($string){
return $string === '';
}
$name = '';
$errors = array();
if(isset($_POST['name'])=== true){
$name = $_POST['name'];
}
if(is_empty($name) === true){
$errors[] = '名前が入力されていません';
}
if(is_valid_name_length($name) === false){
$errors[] = '名前は20文字以内で入力してください';
}
以下略
とすることで、例えば
- 空文字だけでなく、空白文字だけの場合も未入力扱いとする。
という変更があった時に
function is_empty($string){
return trim($string) === '';
}
と1箇所変更するだけで対応することができます。 このように、小さな関数は更新を容易にしたり、コードを読みやすくする働きがあります。
コードの一部を関数化する時にはまずこのように小さなところを少しずつ関数化していくようにすると良い関数化ができるようになります。まずは5行以内で書けそうな処理に絞って関数化するところから始めてみましょう。