@nqounetです。
前回は、ハッシュを使って処理を振り分ける「ディスパッチテーブル」を学びました。
今回は、処理そのものを変数に入れるコードリファレンスを学びます。
コードリファレンスとは
前回のコードでは、ハッシュにメソッド名(文字列)を登録していました。
| |
コードリファレンスを使うと、メソッド名ではなく処理そのものを変数に入れることができます。
flowchart LR
subgraph 前回
A1["'show_list'"] --> B1["文字列"]
end
subgraph 今回
A2["sub { ... }"] --> B2["処理そのもの"]
end
基本的な使い方
サブルーチン(関数)を変数に代入するには、sub { ... }という書き方を使います。これを「無名サブルーチン」と呼びます。
| |
$handlerにはサブルーチンへの参照(リファレンス)が入っています。実行するときは->()をつけます。これがコードリファレンスの基本です。
ハッシュに格納して呼び出す
では、前回のディスパッチテーブルをコードリファレンスで書き換えてみましょう。
| |
メソッド名の代わりにsub { ... }を直接登録しています。実行するときは$handlers{$action}->()で呼び出せます。
メソッドを別途定義する必要がなくなり、処理とアクション名の対応が一目でわかるようになりました。
まとめ
- コードリファレンスは、サブルーチンを変数に入れる仕組みである
sub { ... }で無名サブルーチンを作り、変数に代入できる- 実行するには
->()をつける - ハッシュに処理そのものを登録できるようになる
- 関数をデータとして扱う第一歩である
次回予告
次回は、処理をクラスに分ける方法を学びます。各機能を別々のクラスに切り出して、責任を分離していきましょう。
