Perl使いがGolang使いになってPerl使いに戻ってきた感想

読了まで:約2分


概要: と​言うような​話を​書きたくなった


僕は​しばらく​前まで、

を​メインに​プログラミングして​たんだけど、​ 最近また​ Perl でも​プログラミングを​再開したので、​ 今日は​その​辺りの​話を​書いてみる。

Perl ​使いから​見た​ Golang

正直な​ところ、​Golang の​型システムって​どうなの?​ って​いうと、​ Golang の​型システムは、

  1. interface 型は、​メソッドの​引数/戻り値の​定義しかできない​ Moo::Role みたいな​感じ
  2. strcut 型は、​ Moo で​作った​クラスのような​感じ

ととらえると、​結構​分かりやすいな、と​僕は​感じで​いる。

で、​Golang は​静的型付けなわけだけど、​この、

  • 静的型付け

って​いうのは、​僕は​今回が​初めてで、​結構​感激したと​いうか、​ ああ、​静的型付けって​こんなに​便利なんだ!​ と​思ったんだけれども、​ この​静的型付け、

  • 内部的に​入出力の​値を​厳格に​定めたい

と​いう​時には​便利なんだけれども、​ぶっちゃけると​ Web API の​ように、​ フレキシブルな​値を​扱うには​かなり​向いてない。

まあ Golang の​場合、​空の​ interface 型を​定義すれば​なんかなるとは​言え、​ それでもまあ面倒と​言えば​面倒なので、​ その​辺りは​ Perl 等の​動的型付けの​ほうが​便利かなぁと​思います。

Perl の​便利な​ところ、​不便な​所

ぶっちゃけ​これは​ Golang と​真逆と​いうか、​フレキシブルな​システムや​入出力を​扱うには​結構​便利っちゃぁ​便利だけど、​きっちりと​入出力の​型を​定めたい、と​いう​時には​結構​不便な​気が​する。

特に、​構造体っぽい​クラスを​作りたい​とき、​Golang だと

type User struct {
Username  string
Email          string
}

と​簡単に​かけるけど、​これが​ Perl でMoo​使って​書くと、

package MyApp::Structure::User;
use strict;
use warnings;
use Moo;
use MooX::Types::MooseLike::Base;
has usename => (
is   => 'rw',
isa => Str,
);
has email => (
is  => 'rw',
isa => Str,
);

と​いう​感じに​なるので、​若干冗長かなぁと​感じる。​ だた、​Perl の​場合は、​構造体っぽい​クラスの​値に​対する​ Validation が、​ Golang と​比べて、​かなり​柔軟に​かけるので、​ その​辺りは​まあトレードオフかなぁと。

Perl と​ Golang の​使い分け方に​ついて

まあ僕と​しては、

  • 入出力を​厳格に​定めたい​プログラム → Golang

  • フレキシブルな​構造に​したい​プログラム → Perl

と​いう​感じではないか​ lang:ja と​思ってます。

と​いう​訳で​本日の​小ネタと​いうか​個人的感想は​以上。

Golang 楽しいれす(^q^)  Perl もたのしいれす(^p^)

#FIXME

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

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

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