すぐわかるオブジェクト指向Perl 2周目
「オブジェクト指向Perlマスターコース」から一時撤収
- 2016年8月
- 分からないなりに読み進む、という選択肢はあるものの、どうにもやる気が出ずに眠くなる
- 自作スクリプトを書いていて、「俺のオブジェクト指向Perlはこれで良いのだろうか?」という不安を放置している
- なんでもクラス内のプロパティに格納するクセがついてしまった。あまり良い事ではなさそうなので矯正したい
- というわけで、もう一度基礎に立ち返る事にする。
- もひとつ。高名な・・・寿司LoverでCTOでゲーマーで技術顧問のnaoyaさんのこのツイートを見て決心したというのもある。
技術書はどんどこ新しいの読むんじゃなくて、これはと思ったのを何回も読むのが力がつくと思われます
— Naoya Ito (@naoya_ito) 2016年8月2日
第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>