「自然な日本語」というワナ


昨日のエントリーに後輩gackt君がコメントしてくれたのですが、コメントで返事を書くには惜しい内容だったので、ひとつのエントリーとして書いてしまいます。

久しぶりにまじめに(笑).

同じ内容を私が自然に書くと,以下のようになると思います.
気軽な意見として(ふーんみたいな)参考にしていただけると...

“ウィンドウ”という名前のJFrameを新規作成する.
“ラベル”という名前で,「こんにちは!」という内容のLabelを新規作成する.

“ウィンドウ”に“ラベル”をaddする.
“ウィンドウ”をpackする.
“ウィンドウ”をshowする.

ありがとん。

でも「私が考える自然な日本語」に振り回されるのはやめにします。過去の言霊は「日本語プログラミング言語は、自然な日本語表現である」という周囲の考え、そして「俺はこう考える」「私ならこう書く」を過剰に取り入れようとしました。今回は違うアプローチをしますわ。

java.lang.Systemのoutに対して、「こんにちは」を渡して、printlnを命令する。

私の意図としては、手続き呼び出し文の文法はオブジェクト指向を教えることが目的でした。そのためにメッセージの送り先を意識させるために「〜に対して」、メッセージパッシングを意識させるために「〜を命令する」にしてます。

引数渡しは、その言葉通り「〜を渡して」にしました。複数の引数がある場合は(A,B,C)とリストで表現します。ここは「自然な日本語」を犠牲にしていますが、代わりにシンプルな日本語の構造が手に入ります(逆に引数表現を「自然な日本語」にしようとするのはとても難しい)。

100を番号と名付ける。

また変数宣言文は、「名前」を意識させることが重要です。これは後輩gackt君も「〜という名前の〜」と書いている通りですね。ですが、私が提案する「〜を〜と名付ける」の方がよいと思います。

なぜなら、これは私の直感ですが、日本人は動詞によって何をやっているか考えるのだと思います。文の動詞表現は本当によく考えて決める必要がある。だから「名付ける」という動詞を使っているのであって、「〜という名前」という名詞表現はアカンのです。

また文構造があまり複雑にならない方がいい。「〜という名前の〜」という文は、主節と従属節からなる複文です。複文は短く自然に意味を表現するには便利なのですが、文構造を不必要に複雑にします。初心者が「とりあえず意味は分かるが、文構造(=プログラムの構造)は分からない」という状態になるのは避けたいです。



また日本語プログラミングを考える際にもう一つ注意するべきことは、「助詞をもって意味を表現しようとしてはいけない」ことでしょうね。例えば、この後輩gackt君の表現。

“ウィンドウ”に“ラベル”をaddする.
“ウィンドウ”をpackする.
“ウィンドウ”をshowする.

手続きの主体に付属する助詞が「に」だったり「を」だったり、揺れています。この揺れは私も過去に死ぬほど悩まされました。例えば以下のArrayListクラスの手続きは「を」「に」「から」「の」4種類の助詞が付く可能性があります。

arrayListをclearする。
arrayListに〜をaddする。
arrayListから〜をremoveする。
arrayListのsize

この揺れが初心者にとって学習の障壁になることは明らかです。レシーバをどのように探したら分からなくなりますし、そもそもレシーバという概念が理解できなくなります。

こういった揺れを防ぐには、助詞で何かを表現しようとしないことが重要です。上の4例は助詞を使ってarrayListがどんな存在なのかを説明しようとしていて、それが自然さの源泉です。その自然な表現を諦め、助詞で意味を表現しようとするのをやめます。

だから最初の手続き呼び出しの表現は、意味を表すのに「対して」「渡して」「命令する」という動詞を使っています。簡潔に表現しようとすれば、「対して」「渡して」は助詞に置き換えることが出来ます。こんな風に。

java.lang.Systemのoutに「こんにちは」をprintlnする。

これは簡潔で自然な表現ですが、以上のような弊害があるためNGなのです。多少たどたどしくとも、シンプルな文構造、教えたい内容に直結した動詞表現を採用した方が良いと思うのです。