【Perl,PHP】LLバトルロワイヤル14【Ruby,Python】
■ このスレッドは過去ログ倉庫に格納されています
0820807
2011/02/05(土) 13:52:12>式と文の違いは、オブジェクト指向とは関係ない。
>クロージャなら関数が持ってる。
>>807の指摘がOOPとは関係ないのであれば、大いに関係のある
「関数型言語との比較」という観点で見たPythonの欠点に書き換えましょう。
・ラムダ式(無名関数)の中で局所宣言(let式)ができない
・条件分岐が式ではなく文として実装されている
前者については、Smalltalk/Rubyには両者ともラムダ式はありませんが、代わりに
ブロック(クロージャ)があるので、局所宣言を含む無名関数を自然に記述できます。
Pythonで初心者にも分かり易い「局所宣言を含む無名関数」は書けますか?
後者については、明確なPython欠点でしょう。
確かにPython 2.5から三項演算子は追加されましたが、その構文
<true expr> if <cond expr> else <false expr>
はPython固有の記法で、手続き型言語を含めた言語の中でも「異質な存在」です。
これなら、まだ Lisp風の
(cond <cond expr> <true expr> <false expr>)
ような前置記法、あるいは、Smalltalk(やForth)風の
<cond expr> ifTrue: <true expr> ifFalse: <false expr>
のような後置記法のほうがマシ(自然)に見えます。
「ラムダ式の実装が不完全」で、しかもプログラミングで多用される
「条件分岐が式ではない」Pythonは、関数型言語としても中途半端な言語に見えます。
これもまた手続き型言語へ「関数型を後から継ぎ足し」た言語設計ではないかと思います。
■ このスレッドは過去ログ倉庫に格納されています