占いページを作ってみる(6) 占い結果の作成ロジック その1

今回からは、占いの結果を作成するロジックを作成する作業に入りたいと思います
どんなロジックのイメージかというと、「ボタンが押された時間と星座の情報を元に、あらかじめ用意された複数の占い結果テキストの中のひとつを選択する機能」という感じです
これは、ひとつの機能としてまとめたいので、クラスとして作ってしまったらいいんじゃないかと思います
というわけで、MyUranai.pmというモジュールを作ることにしましょう
手順は、今まで書いた占いサイトを作ってみるの(1)〜(4)と同じことを繰り返すことになります

ファイル作成

package MyUranai;

use strict;

1;

まず、これだけ書いて、MyUranai.pmという名前で保存します
一番上にpackage MyUranai;と書いて、このファイルがMyUranaiモジュールであることを示します。最後の1;は書いてないとエラーになりますが、結構忘れるので、最初に書いておくと安心です

おおまかな設計

クラスを作る上で最初に考える必要があるのが、このクラスをどういう風に使わせるかだと思います

  • インスタンスを作らせるか、スタティックに使わせるか
  • メソッドはどんな名前ならわかりやすいか
  • 引数はどうするか、戻り値はどうするか

なんか偉そうなこと書きましたが、私の場合、だいたい使い慣れている既存のモジュールに似せて作っちゃいますねぇ(・ω・)先人の知恵を拝借、みたいな
今回のクラスは、単純に「星座情報を引数にしたら占い結果テキストが戻り値になるメソッドが実装されていればいいクラス」だと思うので、あとは好みの問題かもしれないのだけれど

  • インスタンスを作成するためのnewメソッドを作る
  • getUranaiTextメソッドを利用者用に用意して、引数には星座情報を要求する
  • getUranaiTextメソッドは占い結果テキストを返す
  • ボタンが押された時間(正確には違うけど)は、クラスの中で用意する
  • 占い結果はランダムに選ぶことにしよう

ということだけ決めておきます
詳しい実装方法は今は考えません

形だけ作ってみる

そうするとこんな感じになりますかね

package MyUranai;

use strict;

sub new{
	my $pkg = shift;
	bless {}, $pkg;
}

sub getUranaiText{
	my $self = shift;
	my $seiza = shift;
	
	#今の時間を取得
	
	#ランダムに占い結果を選ぶ
	
	return '';
}

1;

インスタンスを作る方法でクラスを使うようにするので、newメソッドを作りました
このMyUranaiモジュールを利用する時には

use MyUranai;
my $my_uranai = MyUranai->new();
my $uranai_kekka = $my_uranai->getUranaiText($seiza);

という感じにインスタンスを作成して使うことになりますね
この結果、getUranaiTextメソッドに渡される最初の引数の値は、$my_uranai自身になるので、

sub getUranaiText{
	my $self = shift;

という感じで、それは$selfに入れてやります
まあ、今回は$selfは使いどころがないのだけれど


次回はgetUranaiTextの中身について、もうちょっと詳しく考えてみましょう