sironekotoroの日記

Perl で楽をしたい

すぐわかるオブジェクト指向Perl 2周目

オブジェクト指向Perlマスターコース」から一時撤収

  • 2016年8月
  • 分からないなりに読み進む、という選択肢はあるものの、どうにもやる気が出ずに眠くなる
  • 自作スクリプトを書いていて、「俺のオブジェクト指向Perlはこれで良いのだろうか?」という不安を放置している
  • なんでもクラス内のプロパティに格納するクセがついてしまった。あまり良い事ではなさそうなので矯正したい
  • というわけで、もう一度基礎に立ち返る事にする。
  • もひとつ。高名な・・・寿司LoverでCTOでゲーマーで技術顧問のnaoyaさんのこのツイートを見て決心したというのもある。

第1章

  • さらっと。
  • File::Find はホント素晴らしいよな・・・
    • サブルーチンを引数で渡す、っていう意味が今ならわかる。

第5章

上のプログラムで

$codeRef = \&daikeiNoMenseki(3,4,5);

の用にサブルーチンに引数を渡してしまい、コードレフの取得とサブルーチンの実行を一気に行おうとしては(?)いけません。
上のように書いた場合は、 &daikeiNoMenseki(3,4,5) によってサブルーチン実行がおこり、戻り値17.5という無名スカラーへのリファレンスが $codeRef に入りますが、そんなことしたい人は絶対にいないと思います。
138p

  • サブルーチンの実行と戻り値の取得が出来て楽でよさそう、とか思ったけど、なるほど。

第11章、というよりも「翔丸

  • 途中、クラスとインスタンスの説明で能條純一のコミック「翔丸」を取り上げて説明する部分があり、一度読んだときによく分からなかったんですね
  • 二回目を読むにあたり、原作全3巻を読んでみたんですが・・・主人公がカッターナイフをふるう都度(そんで仲間が増える都度)「インスタンス」「インスタンス」って思い浮かんできて別の意味で楽しかったです
  • でも原作読まないと分かんないよなぁ、これ
  • 翔丸 - Wikipedia
  • うちだったらどんなたとえを使うだろう・・・
    • 吸血鬼
      • クラスオブジェクト:吸血鬼、ヴァンパイアロード?
      • コンストラクタ:噛みつき
      • インスタンスクラス:血を吸われた人
      • メソッド:噛みつき、引っ掻く
    • ゾンビ
  • なかなかに難しい

第11章(翔丸抜き)

  • 自分である程度オブジェクト指向でプログラムを書いてみて、改めてこの本を読み返すと本当によく分かる。
  • そして、最初に読んだ時、いかに適当に読み飛ばしていたか・・・
  • まぁ、それでもそれなりに書けるんだから、この本すごい、Perlすごい
  • クラス、クラスオブジェクト、インスタンスオブジェクト、コンストラクタ、オブジェクト、プロパティ、メソッド、メッセージ、分かる!わたしにも分かるぞ!

第12章

  • プラグマモジュール、 overload の "0+" って何?って思ったけど、 Perl演算子の一つなんだ・・・
  • オブジェクトと数値や文字列を同時に引数にとる時、第一引数がオブジェクトになるよう、自動的に引数の順番が並べ替えられる。
  • 並べ替えが行われた場合には、第3引数に真値が入る
  • すごい、1周目やったときの記憶が無い・・・

第14章

  • Calendar::Simple を使った CGI
  • だけど2周目なので、ちょっと変えて軽量 WAF の Mojolicious::Lite を使って実装
#!/usr/bin/env perl
use Mojolicious::Lite;
use Calendar::Simple qw(calendar);
use Time::Piece;

# Documentation browser under "/perldoc"
plugin 'PODRenderer';



get '/' => sub {
    my $self = shift;

    my $t = localtime;
    my ($year,$month,$day) = split /-/ , $t->ymd;

    my $cal  = calendar($month , $year);
    $self->stash( cal => $cal ,year => $year , month => $month);
    $self->render('index');
};

post '/' => sub {
    my $self = shift;

    my $year  = $self->param('year');
    my $month = $self->param('month');
    my $cal   = calendar( $month, $year );
    $self->stash( cal => $cal ,year => $year , month => $month);
    $self->render('index');
};

app->start;
__DATA__

@@ index.html.ep
% layout 'default';
% title 'Welcome';
Welcome to the Mojolicious real-time web framework!


<form action ='<%= url_for %>' method='post'>
    <%= number_field 'year' , style => 'width:50px' %>年
    <%= select_field 'month' => [(1..12)] %>
    <input type='submit' value='表示'>
</form>

<table border=1>
    <tr>
            <th>日</th>
            <th>月</th>
            <th>火</th>
            <th>水</th>
            <th>木</th>
            <th>金</th>
            <th>土</th>
    </tr>
%    for my $week (@$cal){
    <tr>
%        for my $day (@$week){
            <td><%= $day %></td>
%        }
    </tr>
%    }

</table>

@@ layouts/default.html.ep
<!DOCTYPE html>
<html>
  <head><title><%= title %></title></head>
  <body>
    <%= content %>
  </body>
</html>

2周目を終えて

  • 2016年9月19日
  • オブジェクト指向Perl マスターコース」を早々に挫折して戻ってきた本書だけど、うん、戻ってきてよかった
  • 1周読んだ時には無い発見があった
    • つまり見落とし
  • 用語を整理できて、改めてオブジェクト指向Perl の入り口にたてた気がする