2011年11月20日日曜日

Python使いへの道~道草編(2)

Python使いへの道~道草編(1)では『どんぶり学習』について触れました。
今回の道草編(2)では、『どんぶり学習』の延長線です。
ちょっと調べればわかることなのですが、新しいプログラミング言語をやった時、「はてな?」となるのが、プログラミングの入口です。
C言語でCUIプログラムを経験したあと、windowsプログラムを作る時も、「はてな?」  と思ったし、
Java言語を初めてやったときも、「どこから始まってるんだい?」 と思ったし。
Androidアプリの開発をしたときも、「アプリはここからスタートする」と学ぶわけだし。
Pythonを始めた時もそうでした。
C言語とPythonは文法が類似しているので、Pythonプログラムを初見でもある程度把握することはできました。

が、しかし、だがしかし、

「プログラムはどこから始まっているんだい?」という疑問はやはり。

そこで、難しい事ではないんだけど、知っていないとプログラムを把握できない、
「プログラムの入口」について、少しまとめてみます。


●C言語/C++
main() から始まるというのは、あまりにも有名な話。
GUIプログラムの場合、OSに依存します。Windowsアプリの場合 WinMain() です。


●Java
Javaアプリケーションとして実行するためには、main()メソッドが必要です。Servlet になると、また話は変わりますね。


●Python
main() のような関数をわざわざ作らなくても、実行することはできます。必要な処理を並べて書いていけば、その順番で処理をしていくだけです。


Pythonでよくみる  if __name__ == __main__ :  これについて、少し。


通常プログラムを作成する時は、メンテナンス性や効率性を考えて、関数を複数作成し、それを組み合わせて実行するようにしていきます。Pythonも関数を作成して処理を組み立てていきます。


これを記述すると、そのファイルがスクリプトとして実行された時
  if __name__ == __main__ : ○○
○○で指定された関数から実行されるようになるというわけです。


また、プログラムを作成したら、ファイルが複数になってしまったという時など、非常に便利です。
  if __name__ == __main__ : ○○
各ファイルに、これさえ記述しておけば、単純に指定した関数を実行するスクリプトととして実行できます。関数毎のテストが非常に楽になりますね。


いやー、C言語などでは、テスト用のメイン関数をわざわざ作ったりと、難しくはないですが、面倒でした。そもそもPythonとC言語の実行形式を比較するのは、仕組みが違うものなのでどうかとは思いますが、こういう違いを把握することは大事だと思います。


その他の言語でも、同じように特徴がありますので、そこのところをまず抑えてみてください。