これは、旅人の服とこん棒、そして僅かなCOBOLだけを持った勇者ケンが、Python(パイソン)という大蛇を相手に死闘を繰り広げ、後に和製ビルゲイツと呼ばれるまでの辛く長い道のりを綴った現在進行形の物語である。今日もまた、新しい伝説が生まれる…
それはある読者から届いた一通のメールが始まりだった。差出人の素性はわからなかったが、あらゆるプログラム言語に精通していることは文面から感じ取ることができた。そしてメール本文はこう締めくくってあったのだ。
「プログラミングを学ぶのにCOBOLが適している」というのは私にはかなりギャグに聞こえるのですがどうなのでしょうか
この言葉は私の築き上げたものを根底から覆すのに十分だった。プログラムの言語選択なんて、記述の違いだけでどれも同じだろ?むしろ記述する場所やフローチャート=ワンステップという概念を持つCOBOLはプログラム初心者を対象にした場合、本当に適していないのか?私は速攻で返信を出すことになる。
いつも熟練者からメールで言われるのは、COBOLはダメだということ。どこがどうダメなのかは一切語られることなく、とにかくダメだと。それを問いただしても一度だって返信がきたためしがない。今回も返信は期待できないな…、そう思っていた矢先にKさん(前回の差出人)より返信が届いた。Kさんは、決して驕ることなく、見下すことなく、懇切丁寧にCOBOLの置かれた現状を私にもわかるよう説いてくれていたのだ。私は感動すら憶えた。そして悟った。自分はCOBOLという言語から一歩も外に出ていないじゃないかと。他言語の現状を何も分かっちゃいないんだと。
メールを通じ、Kさんに初心者向けの言語としてお勧めの言語は何かと相談してみた。そこで教えていただいたのが、今回やってみようと思ったPythonという言語だ。Javaという選択肢も勿論ある。しかし私にはどちらも同じ位置からのスタートである。また最終的にはLispの習得も考慮した末、Pythonに決定したわけだ。COBOLで組めれば他言語でも組めるはず。ただし開発スピードは下手をすると百倍以上の違いが生じると言われる。じゃあそのパワフルな言語を体験してみようじゃないか。
Pythonは完全オープンソースである。つまり無料だ。プラットフォーム(使用OS)も網羅され動作環境は問題ない。早速、Pythonサイトからダウンロード開始。どれがいいのかよくわからないので、Python 2.3.4 (windows) をダウンロードしてみる。インストールには、ちゃんとしたインストーラがあるので超楽チン。あっという間にセットアップ完了。ははは、勝った。これで今日から私も蛇使いだぜ。おっと大事なことを忘れていた。Python(パイソン)は、和訳するとニシキ蛇のことなんだ。開発者がモンティ・パイソンの大ファンだったことから名付けられた、そうサイトに書かれていた。ちなみにRubyという言語は日本人が作ったんだ。きっとワンピースの大ファンなんだろう。うん、それはルフィーだ。
ここでPythonの主な特徴を挙げてみる。他のサイトでも書かれているので、ここでは自分で感じた部分だけを書くにとどめよう。
じゃあ早速やってみるか。おもむろにPythonを起動する。よくわからないがPythonと書かれたアイコンを起動。おおっ、DOSプロンプトじゃんか。エディタとか無いのか?まあいいや、秀丸にPython用マクロがあるかもしれない。後日探そう。まずは画面に打ってみる。
>>> print 'hello' hello
おおっ!パソコンが喋った!というか、この程度じゃ今日び小学生だって驚かない。続けてやってみる。
>>> 2+2 4
ほほう。そう来たか。どうやらこの蛇、初歩的な算数は出来るようだ。じゃあこれはどうだ?
>>> a,b=3,5 >>> print a,b,a+b 3 5 8
や、やるじゃん。このニシキヘビ、できる。宣言なしで変数が利用できるじゃないか。COBOLで同じことをするためには、WORKINGで予めa,b,cを作成(宣言)し、c=a+bという算術式を表示命令の前にやっておく必要がある。既にCOBOLは負けてるぜ。他に何かないかとヘルプを開いてみる。ん?んん?ジーザス…全部英語やん。。。ちなみにこの画面(Command line)を終了させる時は「Ctrl+Z」だ。
DOSプロンプト画面以外にもPythonの起動が出来ないかと、色々いじってるうちに発見した。Pythonメニュー内にある、「IDLE (Python GUI)」を起動してもPythonを利用できるじゃないか。しかも予約語をタイプすればオレンジ色に変わるし、コロンを打って改行すれば自動的にインデントしてくれる。これはすごく便利だ。今度からこっちを利用するようにしよう。この画面(GUI)を終了させる時は「Ctrl+Q」だ。
ヘルプが英語表記ということで、いきなり座礁に乗り上げた感はあるが、気を取り直して突き進む。と、そこへ助っ人が掛けつけて来てくれた。「へへへっ。旦那、日本語訳ヘルプありますぜ!」ナニッ!?その男は某サイトからダウンロードしてくれたヘルプファイルを手渡すと何処かに去って行った。いい奴だ。水戸黄門にならって『乳母車の弥七』と命名してやろう。ヘルプファイル版のほかに、PDF、HTMLファイルでも日本語訳が配布されているので、自分に合ったものを利用するといいだろう。早速、この中にあるチュートリアルを読んでみる。フムフム…
>>> 7/2 3 >>>7.0/2 3.5 >>>7.0/3 2.3333333333333335おお、そういうことか。整数だけの演算だと小数点は切り捨てになるんだ。そして小数点以下まで指定しておけば、少数点以下までの計算をしてくれる、と。
>>> range(10) [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
range() は、数列リストを自動で生成する便利な組み込み関数だ。1〜10じゃなく0〜9だって点に注意しなきゃいけない。じゃあどうしても1〜10にしたいならどうすんのさ?
>>> range(1,11) [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
ふははは、楽勝だ。range(スタート値,エンド値)、すなわち範囲さえ指定してやればいいってこと。こういう関数系がとにかくCOBOLは弱い。このrange()関数を使って、今度は10回ほどパイソンに「こんにちは!○回目です」と言わせ続けてやろう。
>>> for x in range(1,11): print 'hello!',x,"desu" hello! 1 desu hello! 2 desu hello! 3 desu hello! 4 desu hello! 5 desu hello! 6 desu hello! 7 desu hello! 8 desu hello! 9 desu hello! 10 desu
END文の代わりにインデント(字下げ)という文法は変わってるけど、馴れればソースが見やすいし、解かりやすい。for文は他言語でも頻繁に利用される繰り返し命令。文の最後に「:」(コロン)をつければ、それ以降の文をインデントがなくなるまで実行されるって仕組み。なお、文字列は「'」でも「"」でもOKという点も何気に注目だ。
>>> for x in range(5,11):print 'hello!',x,'desu' hello! 5 desu hello! 6 desu hello! 7 desu hello1 8 desu hello1 9 desu hello! 10 desu
「:」さえ付ければ、改行しないで続けて記述することも可能なんだ。でもインデントしないとソースコードが解かりづらい諸刃の剣。素人にはお勧めできない。今度は別の命令語を使って同じ処理をやってみる。
>>> a=5 >>> while a<=10: print 'hello!',a,'desu' a=a+1 hello! 5 desu hello! 6 desu hello! 7 desu hello! 8 desu hello! 9 desu hello! 10 desu
while文という繰り返し命令。whileとは〜するまでの間だけ、みたいな意味合いだ。注意としては「条件を越えるまで」ではなく、「条件を満たしている場合だけ」という点。条件に見合う間は以下の命令を繰り返しますよということだ。
ここまでやってきて、ふと疑問に思う事がある。これ、毎回自分で入力しなきゃダメなのか、と。PythonはBasicと同じインタプリタ(コンパイルを実行時におこなう)ではあるが、別でソースプログラムだけ書いておいて実行させるのが普通だろう。毎回毎回ポチポチとキーボード打ってらんない。じゃあどうやるんだろう?
まず、予めテキストエディタ(メモ帳とか)で簡単なソースを作成してみた。
print 'hello!'これを「test.py」という名前で自分がPythonをインストールしたフォルダへ保存する。ちなみに「.py」という拡張子がPythonのスクリプト(ソース)を指すんだ。じゃあ実際に起動してみようじゃないか。
>>> import test hello!でけた。簡単だね。importという命令で呼出すことができるんだ。COBOLでいうところのCOPY文と同じだと思えばいいかな。CALL文なんかのサブルーチン的な用途とは若干違うと思うけど。まぁ何か分かったらドンドン追記していこうと思う。楽しいぜPython!
「IDLE (Python GUI)」は便利なんだが、常に対話(Shell)モードというのは使えない。エディタとしての必須機能(新規・編集・保存)が出来なければダメだろう。そう思いながらIDLEをカスタマイズできないか探りをいれる。ん?これか!?画面上部の「Option」の中に「Configure IDLE」というのがある。この中の「General」というタブに、「Startup Preferences」というのがあるじゃないか!ここでスタート時に編集モードで起動するか対話モードで起動するか選択できるようになっている。すぐさま「Open Edit Window」にチェックを入れて「OK」をクリック。これで次回からはエディタとして利用できるね。
ちなみに実行する時は「Run」→「Python Shell」で対話モードへと切り替えられるぞ。次回の起動時はまた編集モードに戻るんだ。
このIDLEは「F1」ボタンでヘルプファイルを開くようになっている。でも英語だから意味がわからない。実は上に記述した「和訳Helpの入手」のヘルプファイルを現行の英語ヘルプと置き換えてあげれば、いつでもF1キーで和訳ヘルプを呼出せるようになるから知っておくと便利だよ。
How to replace Help file
あとはチュートリアルを目を皿のようにして眺め倒すと、ちょっぴり幸せになれると思います。For beautiful human life.
今度はファイルの読み書きをやってみる。「#」はそれ以降をコメントにする記号。案外知られてなかったりするけど、Cobolでは「*>」で同じようにコメントが書けるぞ。
# テキストファイルを1行読んでは1行書く try : i = open("C:/temp/text1.txt","r") # input o = open("C:/temp/text2.txt","w") # output while 1 : s = i.readline() if s == "" : break o.writelines(s) i.close() o.close() print "### Mission complete! ###" except : print "??? file not found! ???"
コレが実行結果。 ※ソースは「test5.py」にて保存済み。入力ファイルは作成済み
>>> import test5 ### Mission complete! ###
じゃあわざと入力ファイル(C:/temp/text1.txt)を削除して再テストしてみる。
>>> import test5 ??? file not found! ???
ちゃんと動作してるようだ。言い忘れたけど出力ファイル(C:/temp/text2.txt)は無ければ勝手に作られるし、存在すれば上書きされる。なんと追記も可能なんだ。用途に合せて変化させよう。open()関数のことはヘルプファイルに詳しいことが書かれているので説明は省略。
カツオです。最近プログラミングにハマっちゃって毎日遅くまでコードを書いてます。お陰で学校の授業はさっぱり。さて次週は、
以上の三本です。お楽しみに♪ (to be continue...)