トップ «前の日記(2005-09-03) 最新 次の日記(2005-09-05)» 編集

日々の破片

著作一覧

2005-09-04

_

早稲田を通ったらいつの間にか大学芋があったとこからまっすぐな道が都電のほうに続いていて、なんじゃこりゃと思って降りたら右側にでっかなビルがある。確か第2文学部とかがあったあたりかな? とか思いながら右折してもう一度右折(明治通りにでると混んでそうだから、早稲田通りを直接Uターンせずに大きく回って夏目坂へ抜けようとしているのだ)したら、見覚えのある道が出てきて、混乱した。

そう言えばグラウンドを潰したとか聞いた覚えがあるけどこうなったのか。で、見覚えのある坂を登りきるとさっきの新しい道に繋がっていて、本当はこっちの坂に出たかったのになと(そうすれば、都バスの車庫を越えてポストモダンなマンションのある道に出てそのまま夏目坂に入れるのだが、道が違ったから右折のタイミングも間違えたのであった)思ったが、それはそれとして、抜弁天から靖国通りへ続く道も妙に整備されたし、時々道ががらっと変わる(そう言えば甲州街道から大山へ続くとこも妙にまっすぐな道ができた)のだが、あれはおもしろい。どこへ行かされるのかわからないところと、ヘタをうつと行き止まりになるところとか(たとえば、今はつながったか以前、国立からピーコックのところを通って立川方面へ抜ける道とか)、で、私道協会の支配の先の乃木坂の道も変わるんだろうかとか。そう言えば私道協会の道はここ数日、良く猫を見かける。私道協会の厳しい指導にもかかわらず、こっそり猫を育てている心優しい人がいるんだろうか。人影に物怖じしないきれいな猫たちだ。

_ トリッキーなコード

そんなものは無いというのには強く同意する。

私(あるいは私が想定する存在しない誰か)が読んでも理解できない、あるいは一目ではわかりにくいコード、ならあるかも知れない。

でも、聞くは一時、聞かぬは一生というものでもなく、調べるのは一瞬、それでおしまいなわけで、ある言語の文法にしたがって記述したものが理解できないということはありえない。難読化していたって読むのは可能なのだが、それは別の話になるので、あくまでも書いた人が普通に書いたコードのこと。

というか、もしあるのなら、それはその仕事に向かない。遠視の人の辞書の校正のようなもので、別の人に代わってもらったほうが良いだろう。だいたい自然言語の文章と異なりコンパイラーですら解釈できるのに、まして人間様が読めないはずはありえない。

だから、「トリッキー」という言葉が出てきたら、眉にツバを付けて臨むべき、あるいはそんなくだらない迷信で対処するのではなく、ばかですね、と言えば良い。

もし、あるコードが読み手にとって難しければ、理解せず(あるいは読みもせず)にコピペということは無いだろう。したがってコピペ&修正ミスという黄金パターンにはまることも無い。無駄が多いとコピペしやすい(読んでその気になれるし、行数があるから打ち込むのではなくコピペしたくなる)ので、結果として修正が漏れる(行数が多いから)。しかし既存のコードなのでコンパイルは通る。

とはいうものの、センスの良い短いコードが往々にしてトリッキーと呼ばれることがあるようだが、実際に読みにくいのはセンスの無い(悪いじゃなくて、無いという厳然たるもの)コードで、これはどんなに長く書こうが短く書こうがインデントがあろうがなかろうが、読めないんだよね。なぜだろうか。

・子供の作文パターン(メリハリがなく、要点が絞れず、すべてが平坦)

今日僕は朝起きて顔を洗って歯を磨いてランドセルに教科書を詰めているうちに登校の時間になったので朝ごはんを食べたかったけど登校の時間になったので今日の朝ごはんのおかずは僕の好きな卵焼きだったけど時間がなかったので食べるかどうか迷っているうちに……

このパターンのプログラムは往々にしてコーディング規約を満たしているのだが最悪に読みにくい。

・ゆんゆんパターン(実装継承を好むシロウトパターン)

今日僕は朝起きて卵焼きだったけど詰めているうちに時間がなかったので登校の時間になったので歯を磨いて……

もっとよく考えましょう。子供の作文と同じことをもっとまずくやっていますね。でもなぜかコーディング規約を満たしていたり

・トリッキーなコード

だらだら用意をしていたら登校の時間になってしまった。朝のおかずは大好物の卵焼きだったのでちょっと迷ったが結局あきらめた。というわけで今日は朝抜きだから早く給食の時間になると良いな。

歯磨きや洗顔が抜けているトリッキーなコードです。

追記:言語的な解説としては、「aに1を加算する。aが0でなければ……」ではなく「aに1を加算し、その結果が0でなければ……」のほうが、組み合わせが増えた場合にマッチングのストレスがかからないから、代入と比較は同時にすべきであるという話。if ((buff = breader.readLine() != null) {みたいなやつ。確かにこのての書き方でコピペによるミスをしているのを見たことは無い。

#なんかタイムリーに同じようなことをこないだ記事に書いた(表現は違うけど)ので激しく同意したのであった。


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|

ジェズイットを見習え