@nqounetです。
「Mooで覚えるオブジェクト指向プログラミング」シリーズの第3回です。
前回の振り返り
前回は、hasとsubを使って、データとロジックをまとめる方法を学びました。
Messageクラスを作り、content属性とshowメソッドを定義しましたね。
| |
今回は、このクラスを使って 複数のオブジェクトを作成する方法 を学びます。
コピペの問題点
掲示板で3つの投稿を管理したいとしましょう。オブジェクト指向を知らなかった頃は、こんな風に書いていたかもしれません。
| |
変数が増えるたびに、変数名の末尾の数字を変えていく……。これでは変数が10個、100個になったときに破綻してしまいます。
変数名を考えるのも大変ですし、処理を追加するたびにコピペが必要です。まさにスパゲティコードへの入り口ですね。
解決策:newでオブジェクトを生成する
Mooのクラスには、newというメソッドが自動的に用意されています。これを コンストラクタ と呼びます。
コンストラクタは「オブジェクトを作る工場」のようなものです。同じ設計図(クラス)から、同じ構造を持つオブジェクトを何個でも作り出せます。
| |
Message->new(content => '...')と書くだけで、content属性を持ったオブジェクトが作られます。
変数名は相変わらず$msg1、$msg2と増えていますが、クラスの構造を変更すれば、すべてのオブジェクトに一斉に反映されます。これがオブジェクト指向の強みです。
応用:配列に格納してループ処理
さらに一歩進んで、オブジェクトを配列に入れてみましょう。
| |
これで、オブジェクトがいくつあっても、ループで簡単に処理できます。投稿が100個に増えても、forループの部分は1行のままです。
配列を使えば、変数名に番号をつける必要もありません。データの追加も配列にpushするだけです。
まとめ
newはオブジェクトを生成するメソッドで、コンストラクタと呼ばれる- 同じクラスから複数のオブジェクトを作成できる
- オブジェクトを配列に格納すれば、ループで一括処理できる
- コピペで変数を増やすより、オブジェクトを増やすほうが管理しやすい
次回予告
次回は、属性を「勝手に書き換えられない」ようにする方法を学びます。is => 'ro'とis => 'rw'の違いを理解しましょう。お楽しみに。
