hitode909の日記

趣味はマリンスポーツですの日記です

モジュールが定数を持っていて,外から使える,みたいなのがあると思う.
たとえば,ウィンドウの幅は固定だからWINDOW_WIDTHという定数で取れるとか.

package Window;
use Exporter::Lite;

our @EXPORT = qw(
    WINDOW_WIDTH
    WINDOW_HEIGHT
);
use constant WINDOW_WIDTH  => 640;
use constant WINDOW_HEIGHT => 480;


定数にしておくと,640だったのが,あとで画面が良くなって,1280になったときに,上の行だけ変えれば済む.
それが,プログラムの実行中にウィンドウの幅を変えたい,ということになると,至るところで,WINDOW_WIDTHと書いてしまっているから,プログラム全体を置き換えないといけない.
最初は固定でも,あとから変わったときの書き換えが大変だから,定数のように見えてもメソッドにしたほうがよい,ということがあると思う.

package Window;

sub get_width {
    640;
}

sub get_height {
    480;
}


あと,クラスメソッドにしているけど,あとから事情が変わって,インスタンスメソッドにする必要が出てくるとか.

Window->get_width # これだと実行時に画面の幅変えられない.
Window->new(ここで何かパラメータ渡す)->get_width # これだとパラメータによって値を変えたりできる.


なんかWINDOW_WIDTHは例として悪かった.
普通に作ると最初からWindowクラスのメソッドにすると思う.
円周率なんかは定数でも良いと思う.
円周率以外で定数にしたほうがよいもの何かあるんだろうか.
けど円周率でも精度を指定できてメソッドで取れるほうがよいということもありそう.