PHP関数の必要性を深掘り

この記事は、「独学エンジニア」という学習サイトで学んだ内容を、自分自身の理解を深めるために備忘録としてまとめたものです。
PHPで関数を作成する本当の意味や実践的な使いどころを整理しました。


https://dokugaku-engineer.com/course/serverside



---

## **レッスンの概要**

関数は**なぜ作成するのか？**

このレッスンでは、関数を作成する理由を改めて深掘りしていきます。

関数を作成する理由を理解すると、

**どのような場合に関数を作成すべきか**

**関数を作成する際に何を意識すべきか**

が明確になります！

---

## **関数を作成する最大の理由 →「プログラムの複雑さを下げる」**

プログラムの**複雑さを下げる**ことは、関数を作る最大の目的の1つです。

関数を一度作成すれば、その処理の詳細を気にせず**「関数を呼び出すだけ」**で使えます。

### **関数なしの場合（処理が直書きされている）**

```php
$discount = 0;
if ($num >= $discountNumber) {
    $discount += 500;
}
echo "割引額: " . $discount . "円";

```

**問題点**

- 何をしているのか **パッと見で分かりにくい**
- 同じ処理を何回も書くと **コードが冗長** になる

### **関数を使うと…**

```php
function getDiscountPrice($num) {
    $discount = 0;
    if ($num >= 3) {
        $discount += 500;
    }
    return $discount;
}

echo "割引額: " . getDiscountPrice(5) . "円";

```

**メリット**

- **処理の詳細を考えずに関数を呼び出せばOK！**
- **`getDiscountPrice(5)` だけで意味が伝わる**
- **コードがスッキリして読みやすい**

関数を作成することで、**「この処理が何をするのか？」を意識せずに使える** のが大きなメリットです！

---

## **コードの重複を避ける**

同じ処理を**複数の場所に書くと、メンテナンスが大変**になります。

### **関数なしの場合（コードが重複している）**

```php
$card1 = 7;
$card2 = 8;

if ($card1 - $card2 == 1 || $card2 - $card1 == 1) {
    echo "ストレートです";
}

```

**問題点**

- 同じ処理が何箇所も登場すると、**修正漏れが発生する**
- **ロジックの意図が分かりにくい**

### **関数を使うと…**

```php
function isStraight($card1, $card2) {
    return abs($card1 - $card2) == 1;
}

if (isStraight(7, 8)) {
    echo "ストレートです";
}

```

**メリット**

- **「この処理はストレート判定をするんだな」とすぐ分かる**
- **修正が必要になったとき、関数の中だけ修正すればOK**
- **関数を再利用できるので、コードがスッキリする**

**「関数を作るか迷ったら、重複する処理がないか？」をチェックしましょう！**

---

## **短い処理でも関数化すべきか？**

**「たった1〜3行の処理なら、関数にしなくてもいいのでは？」**

と考えることがあるかもしれませんが、

短い処理でも**ロジックがまとまっているなら関数化したほうが良い**です。

### **関数なし（短い処理でも意味が分かりづらい）**

```php
if ($card1 - $card2 == 1 || $card2 - $card1 == 1) {
    echo "ストレートです";
}

```

### **関数化すると…**

```php
function isStraight($card1, $card2) {
    return abs($card1 - $card2) == 1;
}

if (isStraight($card1, $card2)) {
    echo "ストレートです";
}

```

**メリット**

- **ロジックの意図が明確になる**
- **処理を変更する場合、関数の中だけ修正すればOK**
- **コードの見通しが良くなる**

**短い処理でも、ひとまとまりのロジックなら関数にしておくべき** です。

---

## **後からの仕様変更に強くなる**

関数にしておくと、**仕様変更があったときに修正が楽になります**。

例えば、ポーカーのストレート判定を考えます。

**通常のストレートの条件**

- **カードの数値の差が 1**

**仕様変更（追加ルール）**

- **K（13）とA（1）もストレート扱いにする**

### **関数なしの場合（仕様変更で修正が大変）**

```php
if ($card1 - $card2 == 1 || $card2 - $card1 == 1 || ($card1 == 13 && $card2 == 1) || ($card2 == 13 && $card1 == 1)) {
    echo "ストレートです";
}

```

**問題点**

- **条件式が複雑になって分かりづらい**
- **他の場所でもストレート判定をしていた場合、すべて修正する必要がある**

### **関数化しておけば…**

```php
function isStraight($card1, $card2) {
    return abs($card1 - $card2) == 1 || ($card1 == 13 && $card2 == 1) || ($card2 == 13 && $card1 == 1);
}

if (isStraight($card1, $card2)) {
    echo "ストレートです";
}

```

**メリット**

- **仕様変更があっても関数の中だけ修正すればOK**
- **他のコードに影響を与えずに済む**
- **ロジックの見通しが良くなる**

仕様変更が発生しやすい処理ほど、関数にまとめておくべきです！💡

---

## **まとめ**

### **なぜ関数を作成するのか？**

**プログラムの複雑さを下げる**

→ **関数を作ることで、詳細な処理を気にせず使える**

**コードの重複を避ける**

→ **同じ処理を1箇所にまとめ、修正漏れを防ぐ**

**短い処理でも関数化するべきか？**

→ **ひとまとまりのロジックなら関数化すると分かりやすくなる**

**後からの仕様変更に強くなる**

→ **関数の中だけ変更すれば良いので、修正が簡単**

---
まとめた内容は以上です。
関数を使う理由を明確にしておくことで、コードの可読性や保守性が大幅に向上すると感じました。
この記事が、PHPを学習中の方や同じように独学でプログラミングを学ぶ方の参考になれば幸いです。