++C++; // 未確認飛行 C ブログ

http://ufcpp.net/

頭文字略語はどうしよう

leave a comment »

まえがき

プログラミングとかで使う識別子に熟語を使いたいとき、単語と単語をつなげる流儀が以下のようにいくつかあります。

  • Pascal Case: PascalCase みたいに、単語の先頭を大文字にしてスペース取る。Upper Camel Case と呼んだりも。Pascal言語でよくこの規約使ってたから?
  • Camel Case: camelCase みたいに、文頭だけ小文字で後は Pascal Case と一緒。Lower Camel Case と呼んだりも。ラクダのこぶみたいに見えるから Camel。
  • Snake Case: snake_case みたいに、スペースのところを _ に置き換え。蛇っぽく見えるから Snake。

で、Pascal Case や Camel Case を使う場合、単語は容赦なく「先頭だけ大文字、残りは小文字」になるわけですね。

頭文字略語

ところで、英語には頭文字略語(頭字語とか言ったりもするらしい)ってものがあります。「Transmission Control Protocol、略して TCP」みたいな。通常、英語ではこの手の略語は全部大文字で書きます。じゃあ、この手の頭文字略語を Pascal Case とかにする場合はどう扱えばいいんでしょう?

マイクロソフトの規約では、2文字の頭文字略語だけ特別扱いするんですよねぇ・・・

  • 3文字以上の場合、通常の単語と同様に、Tcp とか Html とか「先頭だけ大文字、残りは小文字」
  • 2文字の頭文字略語の場合、IO とか IP みたいに全部大文字
    • ただし、camelCase で使う場合にはいっそ全部小文字化する(ioCannel みたいに)

なんで2文字だけ特別扱いするかなぁ・・・。変な混乱招くくらいなら Io でいいと思うのだけれど。しかも、規約の書き方がおかしくて、「2文字の場合は頭文字略語に限らず全部大文字」みたいに見える書き方だし。お前、C# で Do を DO とは書かねぇだろ!

ID と OK

そして何よりうっとおしいのが ID と OK。こいつら、別に頭文字略語じゃないんですよね。それぞれ:

  • identifier、略して ID
  • okey、略して OK

本来、この手の略語はソースコード中には書かない方がいいんですよね。Unix の悪習として名高いですけど、Receive を rcv、Send を snd とか書くせいで関数名が何が何だかわからないとか思ったことありませんか?

じゃあ、逆に、「ID は略語だから使うな」が通るかというと・・・。英単語として半ば定着しちゃってるんですよねぇ、id と ok。俗語ではあるけども、すでに英語の単語化しちゃってる。

なので、マイクロソフトの規約でもこの2単語だけ特例として「略語だけど使ってもいいよ」とされてたり。この際、扱いはどうなっているかというと、一般単語と同じ扱い(頭文字略語特有の「2文字のもだけ特別扱い」をしない)。要するに、GetId とか IdProvider とか書く。

規約しっかり決めようにもそもそも自然言語があいまいで

規約をどんなに手間かけて決めようとも、ID みたいにそもそも実態なんなのか意味わかんない単語がある時点で迷うんですよねぇ。元の英単語が自然言語なのでどうしてもあいまいな部分は抜けず。

例えばの話、「人名も全部 snake_case で書く」という規約を定めたとして、じゃあ、McDonald さんとか d’Alembert さんとかはどう書けばいいんでしょうね。

まあ、日本語には関係ない話ではありますが。C# みたいに普通に日本語自由に使える言語の場合、「ソースコードを日本語で書いちゃおうぜ、そしたら大文字・小文字で迷わないから」とかは思います。

広告

Written by ufcpp

2010年9月1日 @ 11:12

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。