Oh 脳《121》Python が純粋な OOP 言語って本当ですか? episode: 1

記事一覧|Oh 脳: after ZERO《其之佰弐拾壱》
Python が純粋な OOP 言語って本当ですか? episode: 1

《著》真樹育未《監修》小泉ひよ子とタマゴ倶楽部
第0版♪1988/10/12

Python3.1 の隘路

ハイブリッド型の OOP 言語の典型である Java/C# などと比べて、純粋な OOP 言語が謳い文句の Ruby/Python などは「純度が高い」と言えるでしょう。しかし、真の OOP を支援する Smalltalk などと比べて「 不純 な」部分が見え隠れします。これらの違いを金の「純度」に例えるなら、Smalltalk は 24K、Ruby/Python は 18K、Java/C# は金メッキというところでしょうか。

予約語を数える

予約語の数」を引き合いに、プログラミング言語の優越を比較する話を耳にします。ともすると、Python予約語 が約 30 余と少ないことから、Java/C# より優位であるかのような論調になりがちです。Smalltalk を知る人からは「そんなに必要なの」とか「それは 多すぎる 」と批判されるかもしれません。

予約語の数は、言語仕様の複雑さ(肥大化)を警告する目安になります。予約語のいくつかは、構文規則に深く関係するもの(たとえば制御構造、定義など)があります。自然言語に例えると、これらの予約語の数は「基本構文」の数に相当します。

英語には、5つの基本文型がある(より詳細な区分法もありますが)とされます。基本文型(予約語)の数が多いことが、多彩な文章(コード)表現の糧となるなら価値があります。しかし、多くの予約語が「未熟な言語仕様のツケを清算する」ために必要とされたなら、いかがなものでしょうか。過去の歴史を紐解いて、複雑な言語仕様の末路を探ると、新たな視座が得られます。言語仕様だけを解説するのにどれだけの頁数を必要とするか、背表紙の厚さがそれを物語ります。

とはいえ、予約語の数を基準にするのは、ことさらステップ数を強調するのと同様に、本質的な議論に立ち入れずストレスが溜まります。

属性を参照する

閑話休題。これから、基本的な構文を引き合いに、その背景にある概念モデルに「統一性があるかないか」を検証します。多くの OOP 言語が、オブジェクトの属性を参照するのに、演算子「.」を利用します。

複素数

Python3.1 でも、複素数に対して、

>>> c = 3+4j
    
3.0 4.0
各属性を参照することで、実数部 .real、虚数部 .imag の値を参照できます。変数を介さずに、リテラルに対して
    
3.0 4.0
としても、同じ結果が得られます。
■ 実数
実数ならどうでしょうか。
>>> r = 3.4
    
3.4 0.0
実数は虚数部を持たないので、値は 0.0 になりますが、属性 .imag を参照できます。リテラルも同様に、
    
3.4 0.0
としても、同じ結果が得られます。
■ 整数
整数ならどうでしょうか。
>>> n = 3
    
3 0
整数も虚数部を持たないので、値は 0 になりますが、属性 .imag を参照できます。リテラルも同様に、
    
File "", line 1 3.real; 3.imag ^ SyntaxError: invalid syntax
…と言いたいところですが、例外 SyntaxError を生成して、エラーメッセージが出力されます。 演算子「.」を用いて属性を参照するという、同じ構文規則に準拠しているはずが、それを許さないというのです。この状況を英語の基本文型に例えると、同類の単語に換えただけで、英文の規則に反すると見なされるのです。 他のプログラミング言語Java/C#/Ruby など)で、同様の検証をするのも一興です。たとえば、
3.toString();    # Java
3.ToString();    # C#
という具合です。これらのメソッドを選んだのは「すべてのオブジェクト」に有効とされているからです。

残念ながら

言語仕様の不整合に関する問題点は、Python3.1 でも解消されていません。これらの問題点は、些細なことかもしれませんが、メタプログラミングでは大きな障害になります。いくつかのリテラルを特別扱いすると、コードを 汚染 するからです。言語仕様が「統一された概念モデル」に準拠していたら、特別扱いは不要です。みなさんは気付かずに「未熟な言語仕様のツケを 清算 する」羽目に陥っていませんか? 「純粋な」OOP 言語のひとつである Smalltalk なら、このような不整合では悩みません。ちなみに、Smalltalk には予約語がいくつあるでしょうか。

まだある不純な部分

TO BE CONTINUED...
Last updated♪2009/07/20