関数設計の基本と実践ポイントまとめ

この記事は、独学エンジニアという学習サイトで学んだ内容をもとに、PHP関数の設計ポイントを整理した自分用の備忘録です。

関数の使い方次第で、コードの読みやすさ・保守性・バグの起こりにくさが大きく変わってきます。

ここでは「関数名・引数・返り値」という3つの視点から、関数をよりよく設計するためのコツをまとめました。

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


---

## **良い関数名をつける**

関数名が適切なら、それだけで**関数の役割が明確** になります。

関数名を考えるときのポイントを見ていきましょう。

### **1. 関数が行うことをすべて説明する**

**NG**: `processData()` → 何を処理するのか不明

**OK**: `sanitizeUserInput()` → ユーザー入力をサニタイズする関数

関数が何をするのか明確でないと、利用時に誤解を生んだり、バグにつながります。

「関数がやることをすべて説明する」ようにしましょう

---

### **2. 返り値を反映させる**

**NG**: `calculate()` → 何を計算するのか不明

**OK**: `calculateTotalPrice()` → **合計金額を計算** することが明確

関数が**何を返すのか** を関数名で表現すると、利用時に迷わずに済みます。

また、**単数形・複数形の区別** も重要

`getUserName()` → **1人のユーザー名を返す**

`getUserNames()` → **複数のユーザー名を返す**

---

### **3. 曖昧な動詞を使わない**

**NG**: `handleCalculation()` → 「handle（処理する）」は抽象的すぎる

**OK**: `sumUpPrices()` → **価格を合計することが明確**

「handle」「process」「do」などの曖昧な動詞は避け、**具体的な動詞** を使いましょう

---

### **4. 数値で関数名を区別しない**

**NG**: `saveData1()`, `saveData2()` → **1と2の違いが分からない**

**OK**: `saveUserData()`, `saveOrderData()` → **保存するデータの種類が明確**

**関数名に意味のあるキーワード** を入れると、何をする関数なのかが明確になります！

---

## **引数のベストプラクティス**

関数の**引数（パラメータ）** は「関数のインターフェース」です。

分かりやすい設計にすることで、関数の使いやすさが格段に向上します

### **1. すべての引数を使用する**

**NG**:

```php
function createUser($name, $age, $email, $unusedParam) {
    // $unusedParam が使われていない
}

```

**OK**:

```php
function createUser($name, $age, $email) {
    // 不要な引数を削除
}

```

**使わない引数は削除しましょう**

---

### **2. 引数の型を明示する**

**NG**:

```php
function calculateTotal($price) {
    return $price * 1.1;
}

```

**OK**:

```php
function calculateTotal(float $price): float {
    return $price * 1.1;
}

```

型指定すると、**誤った型の引数を防ぐ** ことができるので、コードの信頼性が上がります

---

### **3. 引数の数は 7 個以下にする**

**NG**:

```php
function registerUser($name, $email, $password, $phone, $address, $city, $country, $zip) { ... }

```

**OK**:

```php
function registerUser(array $userData) { ... }

```

**多すぎる引数は配列やオブジェクトにまとめる**

---

### **4. 似た引数を使う関数は順番を統一する**

**NG**:

```php
function createUser($name, $age, $email) { ... }
function updateUser($email, $name, $age) { ... }

```

**OK**:

```php
function createUser($name, $age, $email) { ... }
function updateUser($name, $age, $email) { ... }

```

**引数の順番がバラバラだと混乱のもと！** **統一しましょう**

---

## **返り値のベストプラクティス**

関数の **返り値** も、設計のポイントです

### **1. すべての状況で値を返す**

**NG**:

```php
function checkHand($cards) {
    if (isStraight($cards)) {
        return "ストレート";
    }
    if (isPair($cards)) {
        $result = "ペア"; // return を忘れてる
    }
}

```

**OK**:

```php
function checkHand($cards) {
    $result = "ハイカード"; // デフォルト値を設定
    if (isStraight($cards)) {
        $result = "ストレート";
    } elseif (isPair($cards)) {
        $result = "ペア";
    }
    return $result; // 必ず値を返す
}

```

**すべてのケースで値を返すように設計しよう**

---

### **2. 返り値の型を明示する**

**NG**:

```php
function getUserAge($name) {
    return "25"; // 文字列を返してしまう
}

```

**OK**:

```php
function getUserAge(string $name): int {
    return 25; // 型を統一する
}

```

**「何が返るのか」を明確にすることで、バグを防げます**

---

## **まとめ**

### **関数を使いこなすためのポイント**

**関数名を分かりやすくする**

* 何をするかすべて説明する

* 返り値を反映した名前をつける

* 曖昧な動詞を使わない

**引数の設計を見直す**

* 使わない引数を削除する

* 型を明示する

* 似た引数の順番は統一する

**返り値の設計を見直す**

* すべてのケースで値を返す

* 返り値の型を明示する

---
まとめた内容は以上です。

関数はプログラムの中でも特に再利用性・可読性・保守性に直結する重要な要素なので
関数名・引数・返り値の設計を意識することで、より「伝わる」コードが書けるようになると思います。

この備忘録が、学習中の方にとって少しでも役に立てば幸いです。