プログラミング言語
「日本語」



April 2004
Leshade Entis


■ はじめに
 日本語は約1万年前、古代縄文人によって考案された世界的にも最も古い部類のプログラミング言語の一つである。(※)
 日本語の起源は、古代の北方系言語と南方系言語であり、それぞれの特徴、即ち、強力なマクロ機能と柔軟な音節構造を共に持ち合わせているかなり珍しい言 語である。
 更に、日本語はその後、約1万年の間にわたって仕様の変更や拡張が幾度も行われ現在の形に至っている。その過程で日本独特の固有な機能を有するように なった。
 これらの特徴は日本語の利点であると同時に、習得する上での障害ともなっている。
 本書はプログラミング言語としての日本語を習得する上で、比較的良く使われる構文を主に取り上げ解説したものであり、これから日本語プログラミングを始 める人を対象として書かれている。

※念のために書いておくと、本書は日本語をプログラミング言語のように解説することによって、普段意識 しないで使っている言葉の意味を明確化して楽しもうと言う試みである。


■ 免責事項
 本ソフトウェアは使用者の責任において利用してください。本ソフトウェアによって生じた損害の責任は当方は一切関知しないもの とします。
 結果に責任が持てない方は本ソフトウェアの利用はご遠慮くださいますようお願いいたします。
 尚、本ソフトウェアは最新の日本語コンパイラでの動作を確認しております。
 もし本ソフトウェアを利用された結果、不快感を感じたり具合が悪くなった場合には、ご使用の日本語コンパイラに何らかの不具合がある可能性があります。 そのような場合には最新の日本語コンパイラに更新してください。
 但し、その場合についても利用者の責任において行ってください。


■ プログラミング言語「日本語」概要
 日本語には以下の特徴がある。

◆ 強力なマクロ機能
 日本語を特徴付けるものの一つに、豊富な助詞や助動詞を挙げることができる。
 助詞や助動詞はステートメントを柔軟にする。例えば、日本語において語順はかなり自由であるが、これは助詞や助動詞によって実現されるマクロ機能の一つ の結果である。
 より一般的には、助詞や助動詞は構文のコンテナのように機能する。
 このマクロ機能を利用することによって、我々は単一の日本語コンパイラで、マクロ定義ファイルを差し替えるだけで他の言語をコンパイルすることができ る。
原文:        I feel blue.
処理後:    ミーはブルーをフィールする。


◆ 柔軟な音節構造
 日本語の音節はかなり単純化されており、組み合わせの自由度がかなり高いのが特徴の一つである。
 また、それぞれの音には意味やイメージが割り当てられており、自在に独自の単語を創作することができる。特にそれが顕著なのが擬態語である。
 擬態語は現実の音を表していないが、音には意味があり、それらを組み合わせることにより、かなり繊細に物事の状態を表現することができる。
例:    はにゃ〜〜〜ん
 この機能は非常に強力であるため、マクロ機能と組み合わせることにより、ステートメントの殆どを擬態語だけで構成することさえ可能である。(※)
例:    ごぉごぉざぁざぁびゅうびゅうの中を、とぼとぼ行ってたら、ふにゅ〜〜でぬめぇ〜〜〜っとしたのがうじゃうじゃしてたし、さっきはブーブーがダー、バ シャっで、もうびしょびしょでくたくたで、ふえぇ〜〜〜〜んって感じ。
※一般に擬態語を多用すると低級なイメージを与えるが、日常の会話を文章化すると面白いことが分かるだ ろう。


◆ 高度な抽象化と隠蔽
 日本語は、物や心の状態を繊細に記述できる一方で、動作などの対象に対して抽象的な記述が可能であるのも特徴の一つである。
 特に程度を表す修飾語は極めて抽象化される。
 これは他の言語とは大きく異なる点であるが、日本語コンパイラはプログラマの気持ちを察して最適なパラメータを自動的に選択してくれるので、どの程度か を詳しく記述する必要が無いのである。


■ 主な構文
 ここでは日本語でよく使われる構文を挙げ説明する。

◆「どうも」
 「どうも」にはさまざまな用法がある。

<どうも文>
 「どうも」だけからなる文は、特に「どうも文」と呼び、何もしない。
 古いシングルタスクのシステムでは、「どうも」を何度も繰り返すことによってタイミングを制御することもあったが、マルチタスク環境では後で述べる「ど うも」プリフィックスで同期を取らなくてはならない。
例文:どうも、どうも。
<どうもプリフィックス>
 「どうも」をステートメントの先頭に記述することによって、続くステートメントを特殊な同期状態で実行する。
 通常、日本語コンパイラは、暗黙にある一定の同期状態を維持するコードを生成する。この事によって、皆まで記述せずとも何となく動作するコードを生成す ることができる。
 「どうも」プリフィックスはより深く、前後のコンテキストから自動的に処理の内容を補完するため、ステートメントを厳密に記述する必要がない。この同期 状態は特別に「どうも同期」と呼ぶ。
例文:どうも、すいません。
<変数名や関数名>
 特に意味を持たない変数名や関数名に「どうも」を用いる。
 これ自体に意味はない。
 但し、ある特殊なシステムでは、「どうも」がNHKのマスコットキャラクターに予約されている場合があるので注意が必要である。

<どうも型>
 「どうも」は型を特定しない。
 特に「どうもポインター」として用いられることが多い。
 いかなる型のポインターも「どうもポインター」へ代入することができる。


◆ 「よろしく」
 「よろしく」は善処を指示する命令である。
 例えば、次のステートメント;
どうも、よろしく。
は、現在のコンテキストにおいて、「どうもポインター」に代入されたオブジェクトについて、それが何を望んでいるか自体をオブジェクト自身が知っており、 それを実現するための手続きを自動的に選択し実行する関数と等価であり、それは「どうも同期」を維持した状態で実行される。


◆ 「良い意味で」
 「良い意味で」は擬似命令の一種である。
 「良い意味で」自体は実行されず、続く式の解釈の方法をコンパイラに指示する。
 日本語では、式は常に「悪い意味で」解釈される。従って、「悪い意味で」と言う擬似命令は普通使われない。
 「良い意味で」と宣言しておくことにより、以降のステートメントが「良い意味で」解釈されるようになる。
例文:良い意味で競争する。

◆ 「お世話になっております」
 「お世話になっております」は宣言文の一種で、日本語コンパイラを恐縮させる。
 恐縮状態の日本語コンパイラは、以降のプログラムを悪意を持って解釈しないはずである。


◆ 「失礼します」
 「失礼します」は宣言文の一種で、失礼な記述をしてはならない場合に記述する。
 この文を記述しておくことによって、プログラマはコンパイラに対して失礼が無いように気をつけながらコーディングすることができる。


◆ 「お疲れ様です」
 「お疲れ様です」は宣言文の一種である。
 他に適当な宣言文が思いつかないほどにプログラマが疲れている場合、とりあえず記述しておけばコンパイラが適切に処理してくれる。
 「どうも」を付けておけばなお良い。


◆ 「もし」
 仮定のステートメントを記述したい場合に、条件を伴って予め記述する。
 大抵の場合、ありもしない妄想に先立って「もし」文を記述する。
 しかし、多くの日本語コンパイラはこの「もし」文を完全にサポートしていないため、誤った結果を生み出す場合があり、使用には注意が必要である。
 「もし」文の代わりに「良い意味で」文を使うとこの問題を回避できる場合もある。
 また、「もし」文をサポートしているコンパイラについても、その多くが不完全な実装であるため、複数の条件を結合した複雑な条件式を記述すると正しくコ ンパイルされない場合が多々ある。
 特に注意すべきは、「説明が足りません」と言うエラーメッセージである。
 このエラーメッセージを見て、正確性と厳密性を期するために条件式をよりいっそう複雑にしてはならない。なぜならば、このエラーメッセージ自体がエラー であり、複雑な条件式を理解できなかったときに発せられるものだからである。
 この問題の根本的な原因は教育時分における不具合があるのだが、これを解決するのは困難である。そこで単一の「もし」文を、複数の「もし」文に分割し て、それぞれの「もし」文で記述する条件式を単純化するとこの問題を回避できる場合がある。
 これでも回避できない場合には更に、「もし」文と「もし」文の間に、適当な数の「どうも」文を挿入して適当な同期を取ると良い場合もある。


◆ 「検討してみます」
 「検討してみます」文はタスクをスプールする。
 スプールされたタスクは徐々に実行されるはずだが、実際には、その多くが実行される前に破棄される。


◆ 「試してみます」
 「試してみます」文は、エラーが予想される一連の手続きの前に宣言する。
 この文を記述しておくことにより、仮に何らかの問題が発生しても、例外エラーハンドラが助けてくれるはずである。
 しかし「試してみます」文は「もし」文同様に、多くの日本語コンパイラにおいてサポートされていない。そのような環境では「試してみます」文は何も意味 せず、問題が発生した場合には、復旧可能かどうかにかかわらずプロセスが強制的に停止させられてしまう。
 従って「試してみます」文を利用するにはコンパイラが対応しているかどうかを十分に確認しておかなければならない。
 「試してみます」文に対応していないコンパイラでは、革新的なことや挑戦的な記述は一切行ってはならず、常に前例や慣習に気をつけなくてはならない。


◆ 「わ」「ね」「アル」「にょ」その他終助詞
 ステートメントの末尾に任意の終助詞を記述することができる。
 終助詞は主に感情を表現するが、最近は可読性を重視し、インスタンスの型を明示的に区別する目的で用いられることも多い。
 以下の例文は、いずれも異なるインスタンスの同じメソッドである。
例文:
    良い天気ですわ。
    良い天気ね。
    良い天気アル。
    良い天気にょ。



■ 日本語プログラミングに於ける心得
 最後に日本語プログラミングにおける心得を記す。
 以下のことに気をつければ、良いプログラムを記述することができるだろう。

◆ 式を曖昧に記述せよ
 式を厳密に記述する事は、日本語プログラミングにおいては野暮である。
 常に曖昧に記述するように心がけよ。
 そうすれば、コンパイラやインタプリタ、又は、実行時にシステムが宜しくやってくれるだろう。

◆ 臭い物には蓋をせよ
 一般的に「悪」と思われていることを記述してはならない。
 誤って「悪」を記述したコードが実行されると例外エラーが発生する。場合によってはシステムが停止する恐れがあるので避けるべきである。
 「悪」を記述したいなら、むしろ逆に、巧妙に「悪」を避けて記述せよ。敢えて記述しないことによって、コンパイラやインタプリタは、プログラマの意図を 察してくれるはずである。

◆ 受動形による記述を試みよ
 近代以降、特に現代の日本語プログラミングの主流は受動形による記述である。
 ステートメントを受動形によって記述することにより、プログラムはあたかも実行結果と無関係で、主体性の無い客観的な立場をとるかのように振舞う。
 この事によって、プログラマは結果に対する責任を逃れた気分になれる。
 最近では、生じた責任をコンパイラやインタプリタ、又は実行したシステムに転嫁することが主流のスタイルである。

◆ 分かち書きはしてはならない
 見易さを重視して単語と単語の間に空白を挿入する分かち書きをしてはならない。
 日本語において空白は意味を持っており、不用意に空白を挿入すると、何も無いはずの空白から、意図しない意味を汲み取られてしまう場合があるので注意が 必要である。

◆ 構文エラーは推奨される
 どのように記述してよいか分からない場合、誤りのある構文で良いからとにかく記述せよ。
 コンパイラやインタプリタは、構文エラーからプログラマの悩みを理解し、心温まるエラーメッセージを出力してくれるだろう。


Copyright (C) 2004 Leshade Entis. All rights reserved.