概要: と、僕は勝手に思ってます。
いや、なんの話かって言うと、@lestrrat さんのスライド、
http://go-talks.appspot.com/github.com/lestrrat/go-slides/2014-yapcasia-go-for-perl-mongers/main.slide#1Go For Perl Mongers
を読んでいた時に、
あれ、これ(golang の)struct 型とか interface 型とかの罠ってどう乗り越えたっけな?
と思い出していたときに、
Golang の struct 型と interface 型の関係は、 Perl で言う所の
Role::Tiny::With
とRole::Tiny
みたいな感じなのかな?
と理解していたのを思い出したので、今日はその辺り書きます。
1. なんと言ったら分からないので、以下実際のコード
1.1 Golang と Perl で Ninjable(ってなんだよ)なインターフェースを定義する
1.1.1 Golang
package ninjable type Ninjable interface { Nanja() }
1.1.2 Perl
package Ninjable; use strict; use warnings; use Role::Tiny qw/ requires /; requires qw [[ Nanja ]] ;
1.2 Golang と Perl で Ninjable
を満たす何かを実装する (だから Ninjable ってなんだ)
1.2.1 Golang
package ninjable type MASAKARINinja struct { Ninjable } func (masakari *MASAKARINinja) Nanja() { panic(`コードを書け、解釈してやる。慈悲はない`) }
1.2.2 Perl
package MOHIKANNinja; use strict; use warnings; use utf8; use Role::Tiny::With qw/ with /; with qw [[ Ninjable ]] ; sub Nanja { die "ひでぶ"; }
2. まあ僕はこんな感じでマッピングして最初の方は乗り切りました
えー、サンプルコードが Ninjable
というワケの分からないサンプルなのは気にしない方向で(ぉ
まあ簡単にざっくりと言ってしまうとですね、
- Golang の struct 型 と interface 型への理解の仕方
というのは、
- Perl における
Role::Tiny::With
とRole::Tiny
への理解の仕方
と、 同質ではないか な、と僕は勝手に思っています。というか僕は今でもそれで理解しています。
んで、ぶっちゃけ Golang にしても Perl にしても、
- Role based Programming (勝手に名付けた)
を習得していないと、多分に罠踏んづけて踏み抜いて爆発する結果となると思うんですが、基本的に、 Perl を書いてきた方であれば、Golang のアレは、
Moose::Role
とかMouse::Role
とかMoo::Role
とかRole::Tiny
っぽいモノだけを使ってプログラミングするアレだ!
と感じたら良いのではないかなぁ、と。
まあでも。
なるほど分からんって感じな説明だとは思いますけどね。これ (>_<;)
というコトで以上
久しぶりにプログラマーっぽいコトを書きましたです。はい。
特にオチなどはないです。
終わります。