タグ

ブックマーク / bingo-nakanishi-perl.hatenadiary.org (5)

  • 第140回 ブロックを渡せるのはRubyだけじゃない! Perlだって渡せるんだ! - bingo_nakanishiの他言語出身者のためのPerl入門

    YAPCが始まりましたね。 去年は参加したのですが(聴衆の方ですが)、今年は非常にとてつもなく残念な事に参加できません。 でも気分だけでもひたりたいのでPerlのお話を少々。 Rubyに備わったブロックという概念 Rubyは言語自体に高階関数をブロックという形でもっており、 eachなどで使われているのは有名です。 例: array = [1,3,5,9] array.each{|i| puts i} eachに与えている { }の部分がブロックです。 自前でブロックを受け取る関数を作りたければ yield を使えばよいでしょう。 今回のお話の内容は「Perlでもブロックを渡せる」ということなので、 eachの機能, yieldの機能は知っておられるという前提で先にすすみたいと思います。 Perlのブロックを使った例 それではRubyの話はこれくらいにしてPerlの話にまいりましょう。 ま

    第140回 ブロックを渡せるのはRubyだけじゃない! Perlだって渡せるんだ! - bingo_nakanishiの他言語出身者のためのPerl入門
  • 第126回 ダックタイピング と インタフェース - bingo_nakanishiの他言語出身者のためのPerl入門

    動的型付け言語と静的型付け言語における多態性 オブジェクト指向では、多態性(ポリモーフィズム)という発想がでてくる。この多態性を実現する方法を今回は2つ紹介する。 Perlは動的型付け言語であり、ダックタイピングという手法で、多態性を実現できる。対して、静的型付け言語であるJavaでは上位の型を作ることで多態性を実現できる(今回はインタフェースを用いてみた)。 多態性を用いればif文がなくなるなどの恩恵を受ける事ができる。 (今回はこのif文がなくなる場面については説明はしない) ダックタイピング Perlでのタックタイピングを見てみよう。 my $human = Human->new(); my $duck = Duck->new(); my $dog = Dog->new(); $human->touch($duck); $human->touch($dog); いま、このようにhum

    第126回 ダックタイピング と インタフェース - bingo_nakanishiの他言語出身者のためのPerl入門
  • 第82回 バッチ処理をどのように理解するか - bingo_nakanishiの他言語出身者のためのPerl入門

    ようこそバッチ処理担当者諸君 あなたは、バッチ処理を担当することになるかもしれない。 バッチ処理とは何か バッチ処理では大量のデータを扱う。 得てしてあなたが扱うデータはファイルに何千行という形で、 CSV形式やTSV形式、固定幅バイトという形で送られて来る。 あなたは、この大量のデータを加工して次の処理にデータを渡したり、 データベースに取り込んだりするだろう。 1つや2つのプログラムであなたが扱うデータを処理しきれると思っては大間違いだ。 いくつものプログラムが有機的に結びついてひとつのデータをあらゆる形に加工するだろう。 ステータス A社からB社へデータを渡しさらにB社からC社へそのデータは渡るだろう。 C社からのデータは何らかの加工をされてA社に戻ってくるかもしれない。 このようにひとつのプログラムが終わったからといってそのデータへの処理が終わったとは限らない。 いま、どこまでの処

    第82回 バッチ処理をどのように理解するか - bingo_nakanishiの他言語出身者のためのPerl入門
  • 第80回 ソースコードリーディングのコツ 関数突入編 - bingo_nakanishiの他言語出身者のためのPerl入門

    さて、今回は、 関数に引数が渡るときの話を書きます。 変数を追うか追わないかそれが問題だ use strict; my $c = 1; hoge($c); こういうソースを見たとき、 $cの値がかわってたら大変だなぁ と思って hoge関数の中を読む事はまずない。 なぜかというと、 関数へは値のコピーしか渡らない「値渡し」だからである。 それに対して、 つぎのようになっていると「参照渡し(Perl的にはリファレンス渡し)」なので、 $cの内容がhoge関数の中で書き換えられる可能性があるのでhoge関数の中を読まなければならないだろう。 use strict; my $c = 1; hoge(\$c); ただ、値渡しの場合でも、hoge関数の中のロジックを理解しておかないと それ以降の部分を読むに苦労しそうならばhoge関数の中まで目を通しておかないといけないだろう。 目も当てられない状況

    第80回 ソースコードリーディングのコツ 関数突入編 - bingo_nakanishiの他言語出身者のためのPerl入門
  • 第78回 ソースコードリーディングのコツ - bingo_nakanishiの他言語出身者のためのPerl入門

    さて、プロジェクトに配属されたら、 すでにできあがっているソースを読まなければならないだろう。 そこで今回は、ソースコードリーディングのコツをひとつ紹介したい。 変数に着目せよ 1: my $c = 10; 2: 3: ############## 4: # 何か処理 5: ############## 6: 7: my $d = $c * 2; 8: ############## 9: # 以後の処理 10: ############## 今、このソースを上から順に下に読んでいたとして、1行目で$cが10であることがわかる。 つぎに7行目を読む事になるのだが、7行目に発想すべきことを説明しよう。 7行目では、$dに代入が行われている。 $dに代入が行われているので、「7行目以降は$cをもう使わないのではないか?」 と考えるごとができる。よって代入を見た瞬間、着目する変数を$cから$dに変

    第78回 ソースコードリーディングのコツ - bingo_nakanishiの他言語出身者のためのPerl入門
  • 1