或阿呆のブログ

Pythonを好んで使っているプログラマです。Ruby,Perl,PowerShell,VBAなどでもたまに書いています。最近はスロット放浪記やってます。。

PerlにもPythonにも型がないわけではない。

変数に型がないということの利点について考える - サンプルコードによるPerl入門
言いたいことはわかるのだけれども、どうもひっかかる。

まず、はじめにお断りを入れると、Perlは多少しか知らない。

Pythonの例で言うと、

>>> num = 1
>>> type(num)
<type 'int'>

ご覧のように、Pythonに関しては言えば、型があるか無いかでいうと、間違い無く型はある。(type=型)Perlにも型はあるはず。

ただ、わざわざ宣言しなくてもいい。Pythonは、動的に型付けするので、使用時に型が決定される。私の理解の中で、宣言とは、使用前に変数の型を知らしめることだ。静的な型付けを行う言語では、宣言が必要。(断言は出来ないのだが・・・)。宣言が必要な言語は、変更に弱い。そこは仰る通り。逆に、宣言が不要な言語は、変更に強い。

そういう理解でPerlを眺めて見ると、思いっきり宣言しているじゃないかと・・・。

my $num = 1;
my @nums = (23, 42, 69);

まず、myってのは何だ?ローカル変数の前に使うらしい。グローバル変数の場合はourをつけるらしい。これは、C/C++ほど厳格な宣言は必要でないにしろ、一応宣言が必要ってことじゃないのか?いろいろ見ていると、○○スコープ宣言とか言われているあたり、宣言に違いない。

それから$,@はなんだ?$はスカラ変数の前につける。@は配列変数の前につける。

ちなみに、
スカラ変数=Scalar variable type
配列変数=Array variable type
らしいです。

つまり、スカラ変数型、配列変数型というわけだ。C/C++ほど型付けが厳格ではないし、種類も少ないから、型が無いと言ってもいいくらいなもんだが、やはり語弊がある。Perlでコーディングをした際に、$と@の厳密な理解が出来ていなくて、致命的な誤解をしており、バグを埋め込んでしまったことがある。Perlが悪いわけではなく、俺が悪いのだが・・・。

いろいろ見てみると、Perlには、型もあるし、宣言も必要って言う結論に落ち着くんじゃないのかなぁ・・・。

PythonとかRubyは、この類の宣言は必要無い。

ちっちゃいこと気にすんなよ!

とか言われそうだけど、ここが違うだけで、コーディングの手間がけっこう変わるわけよ。Cで、いちいちintと書くのが面倒なように、myとか書くのは面倒臭い。ましてや、$や@なんて、それこそ書くのが面倒臭い。shiftキーを押さないといけないからね。

Perlにも、Pythonにも、Rubyにも対話型シェルの実行環境があるが、Perlで書くときが格段に書きにくい。それは、その辺の言語仕様が面倒だからってのも原因の一つだと思いますがね。

もっとも、Perlのパワフルさは私も認めている。あとは、好き嫌いの問題かな。

俺はPythonのほうが好きだけど・・・。ぼそ・・・。

今年の干支はヘビらしいので、Pythonに乗り換えてはいかがかな?Rubyでもいいけど。

Pythonチュートリアル 第2版

Pythonチュートリアル 第2版

Pythonの産みの親、Guidoの本をご紹介しておきましょう。

Python万歳!!!