« 2008年4月16日

2008年4月17日の投稿

2008年4月18日 »

昨日のエントリでintPrintCountのような「型に関する接頭辞」をつけるとわかりやすいと書きました。

一行で一目置かれるプログラム
http://blogs.itmedia.co.jp/yohei/2008/04/post-52d8.html

これは、そういう文化の下で育った一部の人にはわかりやすい、というのが正解のようです。

wikipediaにこんな記述がありました。

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

ハンガリアン記法 - Wikipedia
http://ja.wikipedia.org/wiki/%E3%83%8F%E3%83%B3%E3%82%AC%E3%83%AA%E3%82%A2%E3%83%B3%E8%A8%98%E6%B3%95

この続きに書いてあったことによると、型を意識して変数を命名する記法をシステムハンガリアン、本来の意図の通り変数の意味や使用目的を意識して変数を命名する記法をアプリケーションハンガリアンというそうです。

昨日の例でいうintPrintCountはintの部分に着目すればシステムハンガリアンの代表的な例と言えるでしょう。Printのところを見るとアプリケーションハンガリアン的でもあります。自分が普段書くコードを思い返してみると、システムハンガリアン記法に沿ってintやらstrやらをつけただけでなく、アプリケーションハンガリアン記法に沿った命名(intPrintCount)をしている事を確認してほっとしました。ついでに、私的にJavaで書いたコードを探して見てみたところ型の接頭辞を使っていませんでした。言語が持つ雰囲気に影響されているのかもしれません。

さて、この2つの記法ですがアプリケーションハンガリアンであれば、システムハンガリアンになっていても良いか?というとそういうわけではないようです。

システムハンガリアンへの反論(wikipediaのハンガリアン記法より抜粋)

  • システムハンガリアンを使っているソースコードを修正してデータ型を変更した際、変数名を変えるのを忘れて、データ型と変数名が対応しなくなることがある。
  • システムハンガリアンに慣れているプログラマ以外にとっては可読性の低い記法である。
  • Microsoft自身が、(.NET Frameworkで)システムハンガリアンを廃止している。

1番目は身に覚えがありますね。上流から流れてくるデータの仕様が変わってInteger型の変数をLong型の変数に変えるというときには結局すべての場所で使用されている変数名を置換しなくてはなりませんでした。(おかげでその変数が絡むすべての処理を目視で確認することができましたが。)型を接頭辞にしていなければ宣言だけ変更して影響範囲を調査すれば良いわけで、効率を落としてしまいますね。

2番目は、自分にとってはわかりやすいですが、そう思わない人がきっとたくさんいるのだと思います。そう言われると以前一緒に仕事をしたJava出身の人から「読みづらい」と不評でした。

3番目は、そういえばそんなようなことを研修で習ったような……という気がしたのでソースを探してみました。

「.NET Framework 開発者ガイド」より

ハンガリー表記法は使用しないでください。
ハンガリー表記法では、識別子のデータ型など、パラメータに関するメタデータをエンコードするために、識別子にプレフィックスを含めます。

.NET Framework 開発者ガイド 名前に関するガイドライン
http://msdn2.microsoft.com/ja-jp/library/ms229002(VS.80).aspx

やはり明確にやめるよう記述されていました。きっと現在でもintPrintCountのような変数を規約化しているところは、既にその方式で書かれたコードがわんさかある事でしょう。そうなっているとシステムハンガリアン記法を変えることは容易な事ではなくなってしまいますが、それでも世の中の流れを意識しておく必要はあるかと思います。(VisualBasic界では今後も生き続けるような気もしますが。)

他にも、@itのアンケートで型のプレフィックスをつける派は劣勢になっていました。Insider.NETでのアンケートなので.NET界でも反対派が多いことがわかります。確かにdataTableなりsqlConnectionなりのすべてのオブジェクトにプレフィクスを考えていたら日が暮れそうです。

賛成 18 16.22%
反対 73 65.77%
機能限定なら賛成 16 14.41%
その他 4


変数名に変数の型のプレフィックスを付けることに関しての質問および投票です - Insider.NET
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=43470&forum=7

他にもITproにこんな記事がありました。

ハンガリー記法の利用者が減りつつあるのはなぜだろうか。一つには,以前ほど必要ではなくなったことが挙げられる。Windows 3.0以前のSDK(Software Development Kit)では各種のハンドルがすべて同じ型であったうえにポインタとしてそのままアクセスできたため,混同しないようにプレフィックスを付加することに大きな意味があったのだ。だが今ではハンドルは種類ごとに違う型として定義されているし,C++で開発するならそもそもハンドルを直接扱うこと自体,めったにない。結果,変数の型を変更するたびに名前まで変えないといけない,といったハンガリー記法のデメリットのほうが気になるようになったというわけである。

昔の“常識”,今の“非常識”:ITpro
http://itpro.nikkeibp.co.jp/free/ITPro/OPINION/20031002/1/

やはりintやらstrやらの接頭辞は必要ないといえば必要ないように感じますね。VisualStudio等のIDEを使用して開発を行っているのであれば変数にマウスを乗せるだけで型が表示されますのでぱっと見て型を知ることもできます。何もわざわざ変数名に型を含めておく必要など無いでしょう。

最後に、昨日のエントリでの私の発言を自己引用しておきたいと思います。

このあたりは所属先のコーディング規約を最優先とすべきところだと思いますので、「俺はこうしたいんだ」という信念はほどほどにしておくと良いと思います。

はい。ほどほどにしておきます……。

yohei

« 2008年4月16日

2008年4月17日の投稿

2008年4月18日 »

» このブログのTOP

» オルタナティブ・ブログTOP



プロフィール

山口 陽平

山口 陽平

国内SIerに勤務。現在の担当業務は資金決済法対応を中心とした資金移動業者や前払式支払手段発行者向けの態勢整備コンサルティング。松坂世代。

詳しいプロフィール

Special

- PR -
カレンダー
2013年5月
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  
yohei
Special オルタナトーク

仕事が嫌になった時、どう立ち直ったのですか?

カテゴリー
エンタープライズ・ピックアップ

news094.gif 顧客に“ワォ!”という体験を提供――ザッポスに学ぶ企業文化の確立
単に商品を届けるだけでなく、サービスを通じて“ワォ!”という驚きの体験を届けることを目指している。ザッポスのWebサイトには、顧客からの感謝と賞賛があふれており、きわめて高い顧客満足を実現している。(12/17)

news094.gif ちょっとした対話が成長を助ける――上司と部下が話すとき互いに学び合う
上司や先輩の背中を見て、仕事を学べ――。このように言う人がいるが、実際どのようにして学べばいいのだろうか。よく分からない人に、3つの事例を紹介しよう。(12/11)

news094.gif 悩んだときの、自己啓発書の触れ方
「自己啓発書は説教臭いから嫌い」という人もいるだろう。でも読めば元気になる本もあるので、一方的に否定するのはもったいない。今回は、悩んだときの自己啓発書の読み方を紹介しよう。(12/5)

news094.gif 考えるべきは得意なものは何かではなく、お客さまが高く評価するものは何か
自社製品と競合製品を比べた場合、自社製品が選ばれるのは価格や機能が主ではない。いかに顧客の価値を向上させることができるかが重要なポイントになる。(11/21)

news094.gif なんて素敵にフェイスブック
夏から秋にかけて行った「誠 ビジネスショートショート大賞」。吉岡編集長賞を受賞した作品が、山口陽平(応募時ペンネーム:修治)さんの「なんて素敵にフェイスブック」です。平安時代、塀に文章を書くことで交流していた貴族。「塀(へい)に嘯(うそぶ)く」ところから、それを「フェイスブック」と呼んだとか。(11/16)

news094.gif 部下を叱る2つのポイント
叱るのは難しい。上司だって人間だ、言いづらいことを言うのには勇気がいるもの。役割だと割り切り、叱ってはみたものの、部下がむっとしたら自分も嫌な気分になる。そんな時に気をつけたいポイントが2つある。(11/14)

news094.gif 第6回 幸せの創造こそ、ビジネスの使命
会社は何のために存在するのでしょうか。私の考えはシンプルです。人間のすべての営みは、幸せになるためのものです――。2012年11月発売予定の斉藤徹氏の新著「BE ソーシャル!」から、「はじめに」および、第1章「そして世界は透明になった」を6回に分けてお送りする。(11/8)

オルタナティブ・ブログは、専門スタッフにより、企画・構成されています。入力頂いた内容は、アイティメディアの他、オルタナティブ・ブログ、及び本記事執筆会社に提供されます。


サイトマップ | 利用規約 | プライバシーポリシー | 広告案内 | お問い合わせ