概要: と言うような話を書きたくなった
僕はしばらく前まで、
をメインにプログラミングしてたんだけど、 最近また Perl でもプログラミングを再開したので、 今日はその辺りの話を書いてみる。
Perl 使いから見た Golang
正直なところ、Golang の型システムってどうなの? っていうと、 Golang の型システムは、
interface
型は、メソッドの引数/戻り値の定義しかできないMoo::Role
みたいな感じ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