私がPythonを選んだ理由(修正:10/29 15:37)

たまには、Diaryじゃない話題でも。
id:qnighyさんの記事に書かれているのは、おそらく私のことなので、真面目にPythonを選んだ理由について考えてみた。

(略)
現に僕は、do〜endが気に食わなくてRubyではなくPythonを勉強しようと思っている人を知っているし、
(略)

Rubyのユーザーを増やすためにできること。 - 簡潔なQ

見た目的なあれ

結局、プログラマは、スクリプトエンジンやコンパイラみたいに正確に構文解析をしてコードを解釈するのではなく、視覚的な部分(インデント構造や改行等)でコードを読み解いていくのが普通だと思う。
少なくとも私は、いくら簡単な構造のプログラムでも、こんなコード

#include<stdio.h>
int main(void){printf("Hello, World!");return 0;}

は生理的に無理で、

#include<stdio.h>

int main(void)
{
	printf("Hello, World!");
	return 0;
}

こういう風にインデント、改行がなきゃ読みにくいったらありゃしない。
特に最近のIDEはどれも高性能で、VSとか使ってると、IntelliSense+自動インデントが便利すぎて手放せなくなったりする(C#erになったのは、その辺かも知れない)


じゃあ、比べてみましょうじゃないかと。
作ったのは引数nまでのフィボナッチ数列を出力する関数fib
Cでのサンプルは

C
void fib(int n)
{
	int a = 0, b = 1;
	while(b < n)
	{
		printf("%d", b);
		int t = a;
		a = b;
		b += t;
	}
}

(Cには、",演算子"という演算子があったりして"a, b = b, a + b"なんてことはできないので注意が必要。ここでは変数tを用意した)

Ruby
def fib n
	a, b =0, 1
	while b < n
		puts b
		a, b = b, a + b
	end
end
Python
def fib(n) :
	a, b = 0, 1
	while b < n :
		print(b)
		a , b = b, a + b

パッとみた感じ、どっちも読みやすいんじゃないかなーとか思われるかたもいるかもしれないが、私的にPythonの方が読みやすい。
その原因は、id:qnighyさんも言及されているように、do〜end記法だったりする。
私が、Cの流れを組んだ言語にしか触れてこなかったこともあるだろう。
まぁ、とにかく、id:qnighyさんには申し訳ないが、Ruby的な記法は気持ち悪いと感じてしまうのだ(これは、ある程度の慣れによって解決されてくるかもしれないが)


また、一番はじめに挙げたCでの例でもわかるように、C、Rubyでは同じコードを比較的柔軟に書ける(良い意味でも悪い意味でも)
それに対して、Pythonでは基本的にこれ以外の書き方は出来ない(多少の差異はあるにせよインデント構造は崩れない)
よって、誰でも読みやすいコードが書けるようになる。
これも、Pythonに惚れた理由。


これが、1点目。

.Net的なあれ

まぁ、私は.Neterな訳で、.Net Frameworkとの連携も一応考えてた。
で、Pythonには、IronPythonがあって、Rubyにはない
みたいなことを書こうとしてたんだけど、調べてみたらIronRubyなるものがあったw

いや、まだよく調べられてないんでIronPythonIronRubyのどっちが上か(というか、順位付けできるのか?)なんてことは言えないんだが、IronPythonの方が安定してそう(?)みたいなことは思った。(根拠はほぼない(ぁ)


これが、2点目(だったもの)

まとめ

というわけで、ほとんど見た目的なあれでPythonにしたようなものなんですが、そこがコーディングしてる時には結構重要だったりするので、Ruby < Pythonになっちゃったと。
でも、Rubyも慣れたらなんとかなるのかな?とか思い始めたのがここまで記事を書いてきた感想。
そして、何でこんな記事を書いたかといえば、初めはid:qnighyさんの記事を理解はできたんだけど、何となく自分が感じた気持ち悪さのニュアンスが違うなぁとか思ったから。
でも、書いてるうちに同じことを意味してることに気づいた(ぁ
(それこそdo〜end記法の気持ち悪さ)
久しぶりに(というか、こんな長文記事は初めてかな?)長く書いたので、疲れました。
ここらで終わりにしようかと思います。
ここまで私の駄文を読んでくれた方。ありがとうございました。