読者です 読者をやめる 読者になる 読者になる

カラクリサイクル

『輝かしい青春』なんて無かった人の雑記

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

Development Tips

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


いや、なんの話かって言うと、@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 っぽいモノだけを使ってプログラミングするアレだ!

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

まあでも。

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

というコトで以上

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

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

終わります。