場合分けロジックの整理

場合分けロジックの望ましい書き方

  • 判断や処理のロジックをメソッドとして独立させる
  • elseをなくす(早期リターンする=ガード節にする)とコードが簡潔になる
  • インターフェースを使って異なるクラスを同じクラスとして扱う
    • クラスを区別するための場合分けの必要がなくなる

区分オブジェクト

インターフェイスによるポリモーフィズムは区分の一覧がわかりにくいという問題がある(個々のクラスを確認するしかない)。

enum
  • enumによって区分ごとのクラス一覧を明示することができる
  • 各区分ごとの値をインスタンス変数として保持できる
  • 各区分ごとのロジックをメソッドとして記述できる
  • 状態遷移などを表現すると吉
<?php
interface Colorful
{
    public function color(): string;
}

enum Suit: string implements Colorful
{
    case Hearts = 'H';
    case Diamonds = 'D';
    case Clubs = 'C';
    case Spades = 'S';

    // インターフェイスの規約を満たすための実装
    public function color(): string
    {
        return match($this) {
            Suit::Hearts, Suit::Diamonds => 'Red',
            Suit::Clubs, Suit::Spades => 'Black',
        };
    }
}

このようにインターフェイスenumを駆使して区分ごとのロジックをわかりやすく整理する方法を区分オブジェクトという。

  • インターフェイスを使うことで区分ごとのクラスを使う側は条件分岐の必要性から解放される
  • enumを使うことで区分の一覧性が高まり、コードの見通しが良くなる