メタ構文変数
出典: フリー百科事典『ウィキペディア(Wikipedia)』
メタ構文変数(メタこうぶんへんすう、Metasyntactic variable)はプログラミング言語の記述で使われる識別子の一種。サンプルプログラムなどで意味のない名前が必要な場合に利用される、「意味のない名前」であることが広く知られた識別子のことである。
目次 |
[編集] 概要
プログラミング言語では識別子(変数や関数などの名前のこと)を自由に定義できるが、サンプルプログラムなどでまったく意味の無い変数に適当な名前がなく困ってしまうことがある。しかしどんな名前でも構わないからといって「wikipe」や「abcd」などとつけると、そのプログラムを見た他の人はその変数に何の意味があるのかと悩むことになる。そのようなときに、「hoge」(ほげ)をはじめとするメタ構文変数を利用する。メタ構文変数はプログラマの間でサンプル用の意味が無い変数名であることが認知されているので無用な混乱が避けられるほか、書く側も苦労して名前をひねりだす必要がなくなる。
厳密には変数名ではない識別子(特定言語におけるクラス名やモジュール名など)について hoge 等が使われた場合でも「メタ構文変数」と呼ぶ。 また整数リテラルや 一般文書の人名記載例等、明らかに識別子でないものや、プログラミングに限定されない分野で用いられる類似概念も含めて「メタ構文変数」と呼ばれることもある。
[編集] 起源
hogeやhogehogeの起源は定かではないが、「ほげを考えるページ」によると1980年代の前半ごろから使われだしたとされる。
[編集] メタ構文変数の例
[編集] 識別子
狭義のメタ構文変数。
日本語圏で使用されるメタ構文変数として「hoge(ほげ)」「piyo(ぴよ)」「fuga(ふが)」「hogera(ほげら)」「hogehoge(ほげほげ)」などがある。また、英語圏由来の「foo」「bar」「baz」「qux」「quux」「foobar」もよく使われる。
メタ構文変数には系統(ファミリー)があり、一つの文脈では一つのファミリーの変数群を利用することが多い。メタ構文文法の系統は、特定言語圏や特定分野などの一部の文化圏に限定される場合も多い。従って、各国語が独自のメタ構文変数を導入していることも多く(英語版を参照)、「hoge」や「hogehoge」を使うのは日本語圏だけとなっている。
[編集] hoge と piyo
hoge系統は日本独自のメタ構文変数群である。
この系統のメタ構文変数は、まずhogeを使い、piyoは hogeを使用したあとの2つ目のメタ構文変数として使われる。hogeを使用せずにpiyoだけ使用されることはまずない。 同様に変数のバリエーションを増やすため、fuga や hogera と発展していく。
メタ構文変数はしばしば名前を重ねたり、2つのメタ構文変数名を繋げたりして名称のバリエーションを作るが、hoge系統では hogehoge、piyopiyoなどの重ね合わせ名のバリエーションを作る。hogepiyoと言った掛け合わせ名はあまり見ない。
hogeは日本においてメタ構文変数の代表として使われる。
[編集] foo と bar
英語圏で使用される foo、bar も広く使われる。hoge系統と同様に、まず foo を使い、2つめ以降に bar, baz 等と使う。foobar と言った掛け合わせ名は作るが、foofoo, barbar などの重ね合わせ名は見ない。
[編集] 数字
サンプルプログラムに使われる無意味な整数リテラルにも同様の概念が存在し、「23」や「42」などが用いられることもある。「42」は人生、宇宙、すべての答えに由来する。
[編集] 人名
プログラミングに限定されず広く利用されるメタ構文変数的な概念に人名がある。
日本語圏では「○○太郎」「○○花子」などが使われる。○○の部分には、記入を促す団体名をもじった名字や「日本」「山田」等が用いられることが多い。
英語圏では AliceやBob があり、日本語でも「アリス」「ボブ」として使われることがある。物理学や通信工学あるいは暗号学で、プロトコル等を解説するときにエンティティの名前として使われる。
[編集] メタ構文変数由来の固有名詞
メタ構文変数名が固有名詞となることがある。
[編集] xyzzy
xyzzy(エックス・ワイ・ズィズィー または ズィズィー)は、 もともと英語圏のメタ構文変数だが、テキストエディタ xyzzy(読みかた不定) として固有名詞化している。
[編集] foobar2000
foobar2000の名前も同じく英語圏のメタ構文変数であるfoobarに由来する。
[編集] 関連項目
[編集] 外部リンク
- ほげを考えるページ(消滅したページの転載)
- RFC3092(日本語訳)
カテゴリ: プログラミング | プログラミング言語の構文 | 名前