2008-01-31 (Thu) [長年日記]
▲ まつもとゆきひろ氏が自ら解説,ITpro EXPOのRuby検定問題
東京ビックサイトで開催したITpro EXPO 2008のITpro EXPO検定の問題解説を、まつもとさんとやらせていただきました。自虐ネタ+トリッキーなひっかけ問題が大目だったので、参考になるようなお話ができたか心配です。*1
まつもとさん、つたない進行をフォロウありがとうございました。 それと、ネタにもさせてもらったばかりか会場に応援に来てくれたMasuidriveさんには頭が上がりません。ありがとうー!
Matzとかけあいという役得を大きく利用して素朴な疑問に応えてもらったのでちょっとここで紹介。以下回答はMatzのコメントより。進行しながらでテンパり気味の記憶なので必ずしも正確ではないのであしからず。
偽がnilなのはLispの影響か?
そのとおり。
では真がtでなくtrueなのはなぜ?
tは一時変数として時間をいれたりなにかと使えて便利。 言語で予約しちゃうのは惜しかった。*2
0が真なのはなぜ?
プログラムは例外条件が多くあると汚くなりやすい。 ならば割り切って偽はnilだけにしたほうがシンプルと判断した。
gotoが無いのはなぜ?
gotoがあるとプログラムが汚くなりやすいのもあるが、実装が大変という理由もある。 Javaのように予約だけして実装しないという手もあったりするが、そうもしなかった。*3
例外がbegin/rescueなのはなぜ?
try/catchは、試してやろうとか上から目線というか堅苦しくって好きになれない。 beginのまず初めてみようみたいな前向きさが好み。 *4
破壊的メソッドでも末尾に「!」がついてないメソッドがあるのはなぜ?
厳密なルールを適用して必ず破壊的メソッドには「!」を付けるような言語も存在する*5。 でも破壊的なメソッドが必要な場面は結構多い。全部に付けていくと「!」が多くなってプログラムが見難くなる。だから厳格なルールにはしなかった。 「!」ありとなしの両方のメソッドがある場合に「!」無しのほうが安全ですよというサインとして目安でつけている。
*2 pは予約語じゃない(ので変数名とかに使える)のでOK。<br>*3 thisはJava/C++流。selfはSmalltalkから<br>*4 try/catchは「例外が起きるか試してみる」という発想。<br> begin/rescueは「例外は緊急事態。救助しなくちゃ」という発想<br>*5 Schemeです
こんなところまでフォロウありがとうございます><