トップ «前の日記(2011-02-05) 最新 次の日記(2011-02-07)» 編集

日々の破片

著作一覧

2011-02-06

_ Rubyはプログラミングをたのしくする……か?

一昨日の東京RubyKaigiの高橋さんの基調講演(なのかな)は、Rubyのたのしさを語るというやつで、「それにしても「Rubyのよさ」を説明しようとして見事玉砕したRubyコミュニティの巨人の連なりに高橋さんも並んでしまったなあ。」と評されてしまっているけど、でもあらためて考えてみるっていう意味ではそう悪くはなかった。

というか、おれははて?と考えてしまったのだった。本当にRubyはプログラミングをたのしくしてくれてるのか?たとえば、最近の仕事をちょっと考えてみる。

C#のWinFormアプリケーションでグループボックス内に可変個のチェックボックスがあり、あるタイミングでそいつらのチェックをすべて解除する。

だいたいそういうプログラムでは山のようにcheckBox1.Checked = false;みたいな行が並ぶものと相場が決まっている。だからもちろんそういう書き方はしない。

すべてのコントロールは内包するコントロールをControlsプロパティに持っている。ということはいちいちチェックボックスのインスタンス変数を操作しなくても次のように記述できる。

foreach (var cb in groupBox1.Controls)
{
    if (cb is typeof(CheckBox))
    {
        (cb as CheckBox).Checked = false;
    }
}

でも、ループの中で条件判断するってのは、ポリモーフィズムが利用できるのにswitch-caseを使うくらいばかな書き方だ(効率上の理由であえて選択するってのはもちろんあるので、常にばかな書き方とは言えないけど)。

リスト内包表記のうまみを知ってしまったら、それを利用すべきだ。C#だとそれはつまりLinqだ。

foreach (var cb in from Control c in groupBox1.Controls where c is typeof(CheckBox) select (c as CheckBox))
{
    cb.Checked = false;
}

実際問題として、こんなことでもささやかにたのしい。MSDNや言語仕様を眺めてちょっとでもいかした長生きする(=若い)書き方を見つけてその動作を確認して書いてみてそれをものにして使いこなすようになる。新しいことを覚えるのはおもしろく、それを使えればうれしく、実際に意味を持った成果物となればたのしい。

そうか、わかった。なんのことはない。

プログラミングはたのしいのだ。

それがたのしくなくさせるための仕掛けや罠が張り巡らされているので、みんな勘違いをさせられているのだ。

そのため、そういった仕掛けや罠から自由なRubyだとプログラミング本来のたのしさを得られるということではなかろうか。

とすれば、Rubyがたのしいとしたら次の2つの理由からだろう。

1つは、すべてが式だということだ。だから、ステートメント主体の言語と異なり、比較的自由に書き方を変えられる。もちろん、それを言ったら僅かなスペシャルフォームを除けばすべてが自由なLispのほうが上かも知れないけど(スペシャルフォームをマクロの中に閉じ込めれば事実上なんの制限もないことになるし)、にもかかわらずS式のような形式の押し付けがない。オープンクラスというのもこっちの理由となる。sealやfinalといった愚かな制約のせいで、どれだけJavaやC#の魅力が損なわれたことか(C#はそれを救済するためか、妙な静的メソッドの追加機能が後から付いたけど)。

もう1つは、それが少なくとも10年前は、メインの仕事言語ではなかったということかも知れない(おれにとっては今もメインの仕事言語ではない)。

メインではないということは、どう書こうがどう使おうがおれの自由だということだ。

前者は技術的な制約からの自由をもたらすものであり、後者は社会的な制約からの自由をもたらすものだ。たのしいことだ。もちろん自由というのはたのしいということだ(そいつに伴う責任とかを勘定に入れてさえも)。

というわけで、おれが疑問でしょうがないのは、前田修吾さんのプログラミング規約(まあ、必要性がわかってしまうところはあるけれど、それはおれのたのしくない側面なのでしょうがない)とかにしたがっているかどうかのチェックを受けたり、SIer的な箸の上げ下ろしまで指定した詳細設計書みたいなものを元にプログラミングしたとしても、それでもRubyでプログラミングするのはたのしいのかどうかだ。もし、こういった制約があっても、それでもたのしいのだとしたら、おれはその理由を実に知りたい。

たのしいRuby 第3版(高橋 征義)

_ kitajgj

とまあ結局プログラミングはたのしく、それはマシンを駆る万能感に由来すると思うし、その意味じゃバイク乗りと大して変わらないわけで、制約が少なくやり方はたくさん、やり方がたくさんということは、昨日のおれより今日のおれという成長感を得られやすく、それなりに厳しくもあり優しくもあるコミュニティがあり、そういった成長を助けてくれる雰囲気が醸成されている、そういったことが理由ってことだろう。

で、それを一言でしめしたのがkitajさんの名言、さすがバイク乗り、皮膚感覚でわかってる、ってことだな。


2003|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|05|06|07|08|09|10|11|12|
2020|01|02|03|04|05|06|07|08|09|10|11|12|
2021|01|02|03|04|05|06|07|08|09|10|11|12|
2022|01|02|03|04|05|06|07|08|09|10|11|12|
2023|01|02|03|04|05|06|07|08|09|10|11|12|
2024|01|02|03|04|05|06|07|08|09|10|11|

ジェズイットを見習え