Golang の struct 型とか interface 型は、Perl で言うところの Role 脳でなんとかなる

読了まで:約1分


概要: と、僕は勝手に思ってます。


いや、なんの話かって言うと、@lestrrat さんのスライド、

を読んでいた時に、

あれ、これ(golang の)struct 型とか interface 型とかの罠ってどう乗り越えたっけな?

と思い出していたときに、

Golang の struct 型と interface 型の関係は、 Perl で言う所のRole::Tiny::WithRole::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::WithRole::Tiny への理解の仕方

と、 同質ではないか な、と僕は勝手に思っています。というか僕は今でもそれで理解しています。

んで、ぶっちゃけ Golang にしても Perl にしても、

  • Role based Programming (勝手に名付けた)

を習得していないと、多分に罠踏んづけて踏み抜いて爆発する結果となると思うんですが、基本的に、 Perl を書いてきた方であれば、Golang のアレは、

Moose::Role とか Mouse::Role とか Moo::Role とか Role::Tiny っぽいモノだけを使ってプログラミングするアレだ!

と感じたら良いのではないかなぁ、と。

まあでも。

なるほど分からんって感じな説明だとは思いますけどね。これ (>_<;)

というコトで以上

久しぶりにプログラマーっぽいコトを書きましたです。はい。

特にオチなどはないです。

終わります。

#FIXME

にゃるら(カラクリスタ)

『輝かしい青春』なんて失かった人。
次に備えて待機中。

今は趣味でプログラミングをして
生活しています。