ハンガリアン記法とは? わかりやすく解説

ハンガリー記法

読み方ハンガリーきほう
別名:ハンガリアン記法
【英】Hungarian Notation

ハンガリー記法とは、Microsoftプログラマーであるチャールズ・シモニーCharles Simonyi)により考案された、変数名先頭小文字データ型付けプログラムコーディング記法である。

ハンガリー記法は、ソースコード可読性が高いという長所がある。例えば、他人書いたソースコードはもちろん、自分書いたソースコードでも、変数データ型宣言箇所探す必要がない。またソースコード間違いに気が付きやすいという利点もある。

Windowsプログラムバイブル本とも言われるチャールズ・ペゾルドCharles Petzold)の著書プログラミングWindowsのような影響力のある本で採用紹介されたこともあって広まった

もっとも、ハンガリー記法はチャールズ・シモニー意図とは違った形で広まったとも言われており、現在は必ずしも評判良いばかりとは言えない。近年ではMicrosoft自身も、ハンガリー記法を推奨しておらず、一例として.NET Frameworkでは採用されていない


参照リンク
Hungarian Notation - (英文
プログラミングのほかの用語一覧
コーディング:  バグ  パラメータ  パーサ  ハンガリー記法  番兵  バグフィックス  ビッグエンディアン

ハンガリアン記法

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2025/03/22 07:58 UTC 版)

ハンガリアン記法(ハンガリアンきほう、: Hungarian notation)あるいはハンガリー記法(ハンガリーきほう)とは、プログラマプログラムソースコードを書く際に変数名やクラス名などの識別子に特別な接頭文字ないし接尾文字をつけることで、他の人がその識別子を見たときに識別子の使用方法・データ型情報・スコープなどが分かるようにするための命名法である。

ハンガリアン記法という名称は考案者チャールズ・シモニーハンガリー出身であることに由来する[1][2]

二種類のハンガリアン記法

本来、シモニーの考案したハンガリアン記法とは、変数の意味や使用目的から接頭辞を決定することであり、型では区別できない情報を変数名に付与することで、紛らわしい変数の意味を明白にし混同をさけるためのものであった[1]。たとえば、論理座標とデバイス座標、X軸とY軸、ドルと円などで、これらは単純に型による安全性に頼ることはできない。

マイクロソフトアプリケーション開発グループで開発されたこの記法は ExcelWord などの開発で成功を収めたため、Windows 開発グループでも採用された[1]。その際、シモニーの論文中の "type" がデータ型のことであると誤って解釈され、変数名にデータ型を表す接頭語や接尾語をつける記法だと誤解された[1]。シモニーの意図していた記法をアプリケーションハンガリアン、誤解に基づく記法をシステムハンガリアンと呼ぶ[1]Windows APIおよびMFCはほとんどがシステムハンガリアンに従っている。システムハンガリアンは現在[いつ?]批判されることが多く、.NET Frameworkでは使われていない[3]COMもシステムハンガリアンが伝統的に使われていたが、.NETの登場後に新しく追加されたコンポーネントに関してはシステムハンガリアンを採用しないものが増えている[4]

ハンガリアン記法に二種類あることは あまり知られておらず[要出典]、単に「ハンガリアン記法」と言及された場合でも、システムハンガリアンの意味で用いられていることが多い。

具体例

アプリケーションハンガリアン

アプリケーションハンガリアンは、間違えたコードを間違えて見えるようにする記法である。

たとえば、相対座標にRelative Positionのrp、絶対座標にAbsolute Positionのapという接頭辞を付けることにした場合、ウィンドウの位置を設定する window.SetPosition(rpX, apY); のような記述は誤りであることが明確に分かる。

また、ドルの接頭辞をdol、円の接頭辞をyenとした場合、dolIncome + yenDeposit のような計算は間違いであることが明確である。

このように、間違っているコードが間違っていると分かるようにするための記法が本来のハンガリアン記法である。

システムハンガリアン

すべて接頭で使用する。C言語およびC++特有の言語仕様、言語機能および型名に依存する規約がほとんどである。

文字 意味 使用例
b または f 論理型 bDirtyFlag
ch 文字型 chSeparator
by バイト型 (符号なし1バイト整数) byGrayLevel
n または i 整数型 (int, integer) nPower
l 長整数 (long) lDate
u 符号なし整数 uiCount
w ワード型 (WORD) wLanguageCode
dw ダブルワード型 (DWORD) dwSize
fp または f 単精度浮動小数点 fpPrice
db または d 倍精度浮動小数点 dPi
p または lp ポインタ lpDirectSound
s 文字列 sPlayerName
sz ゼロ終端文字列型 szFileName
fn 関数ポインタ fnCallback
h ハンドル型 hThread
hwnd または h ウィンドウハンドル型 (Windowsのみ) hMainWindow
g_ グローバル変数 g_iErrorCode
c_ 定数 (const) c_nBufferSize
s_ 静的変数 (static) s_pLookupTable
m_ クラスのメンバー変数 m_nLength
C クラス CHoge
tag 構造体タグ tagRECT

なお、これらは組み合わせて使われることもある。例えば「lpsz: ゼロ終端文字列へのポインタ」「m_ul: メンバー変数の符号なし長整数」などといった具合である。

ゼロ終端を表す「z」は、ほとんどの場合ゼロ終端文字列を表す「sz」の形で表れるが、まれに番兵として0やNullを配置している可変長配列やリストなどのデータ構造を示すために用いられている例もある。

グローバル変数やメンバー変数を表す接頭辞は、変数の型ではなくスコープを区別するためのものであるので、システムハンガリアンとは区別する見方もある。これの類似の例として、ローカル変数やプライベート変数など、外部から参照されない変数を判別するために接頭辞・接尾辞をつけるプログラミング作法も存在する。例えばC#コードを自動生成するフレームワークなどではprivateフィールド名先頭に"_"を付けたり、C++ Coding Standards[5]などの書籍ではメンバー変数名末尾に"_"を付けたりする慣習が使われることがある。

批評

システムハンガリアン

積極的批判

  • C++C#のような言語では型付けが存在するためにシステムハンガリアンを使用することによる利点はない[6][7]

消極的批判

  • かつてWindows API/MFCにおいてハンガリアンを全面的に採用していたマイクロソフト自身が、.NET Frameworkではハンガリアンを禁止している[3]

脚注

  1. ^ a b c d e Spolsky, Joel; 青木靖 (2005年5月11日). “間違ったコードは間違って見えるようにする”. The Joel on Software Translation Project. 2019年3月17日時点のオリジナルよりアーカイブ。2009年1月22日閲覧。
  2. ^ Simonyi, Charles (1999年11月). “Hungarian Notation” (英語). Microsoft Docs. 2019年10月5日閲覧。
  3. ^ a b マイクロソフト (2007年11月). “一般的な名前付け規則”. Microsoft Docs. 2019年10月5日閲覧。
  4. ^ Windows Ribbon Framework | Microsoft Docs
  5. ^ Sutter, Herb; Alexandrescu, Andrei (2004-10-25) (英語). C++ Coding Standards: 101 Rules, Guidelines, and Best Practices (C++ In-Depth Series). Addison-Wesley Professional. ISBN 978-0321113580 
  6. ^ Stroustrup, Bjarne (2017年9月30日). “Stroustrup: C++ Style and Technique FAQ” (英語). 2019年10月5日閲覧。
  7. ^ Stroustrup, Bjarne. “Stroustrup: C++ Glossary” (英語). 2017年10月22日閲覧。

関連項目

外部リンク


ハンガリアン記法

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/11/27 00:18 UTC 版)

命名規則 (プログラミング)」の記事における「ハンガリアン記法」の解説

最もよく知られている命名規則としてハンガリアン記法 (英: Hungarian notation) がある。これには、「目的」を名前に含め方式アプリケーションハンガリアン)と、「データ型」を名前に含め方式システムハンガリアン)に分けられる

※この「ハンガリアン記法」の解説は、「命名規則 (プログラミング)」の解説の一部です。
「ハンガリアン記法」を含む「命名規則 (プログラミング)」の記事については、「命名規則 (プログラミング)」の概要を参照ください。

ウィキペディア小見出し辞書の「ハンガリアン記法」の項目はプログラムで機械的に意味や本文を生成しているため、不適切な項目が含まれていることもあります。ご了承くださいませ。 お問い合わせ



ハンガリアン記法と同じ種類の言葉


固有名詞の分類


英和和英テキスト翻訳>> Weblio翻訳
英語⇒日本語日本語⇒英語
  

辞書ショートカット

すべての辞書の索引

「ハンガリアン記法」の関連用語

ハンガリアン記法のお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



ハンガリアン記法のページの著作権
Weblio 辞書 情報提供元は 参加元一覧 にて確認できます。

   
IT用語辞典バイナリIT用語辞典バイナリ
Copyright © 2005-2025 Weblio 辞書 IT用語辞典バイナリさくいん。 この記事は、IT用語辞典バイナリの【ハンガリー記法】の記事を利用しております。
ウィキペディアウィキペディア
All text is available under the terms of the GNU Free Documentation License.
この記事は、ウィキペディアのハンガリアン記法 (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。 Weblio辞書に掲載されているウィキペディアの記事も、全てGNU Free Documentation Licenseの元に提供されております。
ウィキペディアウィキペディア
Text is available under GNU Free Documentation License (GFDL).
Weblio辞書に掲載されている「ウィキペディア小見出し辞書」の記事は、Wikipediaの命名規則 (プログラミング) (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。

©2025 GRAS Group, Inc.RSS