/note/tech

なぜpython使いは単純なfor文より醜悪なリスト内包表記を好むのか

pythonのオフサイドルールは爆弾みたいなもので、そんなものを信頼してコードを書いていたら命が幾つあっても足りないのである。その点リスト内包表記は他の(オフサイドルールではない)言語のブロック構文と同様に信頼できる。だから、ブロックが重要になる処理(つまり大抵の処理)では、python使いは可能ならリスト内包表記で書きたいと思うのである。

では、pythonがオフサイドルールを採用したことは失敗だったのか? これはなんとも言えないだろう。オフサイドルールのデメリットは上記の通りだが、メリットも当然たくさんある。なんといっても見やすく、書きやすく、閉じカッコのために1行を費やしてディスプレイの有効活用できる範囲を狭めるなんて真似も必要ない。また、この記事で述べたように、オフサイドルールの言語ではブロックのネストを深めることは爆弾の山を積み上げる行為に等しい。言語自体にブロックのネストを抑制する機能が備わっていると解釈すれば、pythonを使うことで良質なコードが生まれやすくなる効果があるかもしれない(本当かよ)。

ただ、もしpythonにリスト内包表記という「インデントブロックの代用手段」がなければ、pythonはまるっきり使い物にならないプログラミング言語になったことは確実と思われる。まあ、それならmap,reduce,filterで代用したかもしれないが・・・

なぜpython使いはリスト内包表記を好むのか。それは、端的に言えば「for文だとインデントが狂いそうで怖い」というこの言語の悲しすぎる現実のせいだった。