18/10/05 21:02:11.53 eXLBKWdN0.net
秘密の呪文
984:デフォルトの名無しさん
18/10/05 21:42:38.07 s/+stmcD0.net
ハンガリアン記法とかいうMSが編み出した負の遺産
985:デフォルトの名無しさん
18/10/05 21:54:51.59 wRA0FWgN0.net
型付けるハンガリアンは糞だけど、グローバル変数にg_付けるのは普通でしょ
付けないの?
986:デフォルトの名無しさん
18/10/05 21:56:47.70 zW6/2yxd0.net
グローバル変数使わないしg_つけてもなんの役にも立たないし
987:デフォルトの名無しさん
18/10/05 22:29:36.85 dsZIcecxM.net
スコープを示すハンガリアンは変数のスコープを不必要に広げることに対する心理的抵抗を低減するという点で害悪
988:デフォルトの名無しさん
18/10/05 22:48:31.92 qdFd1sVz0.net
あの複雑怪奇な名前解決ルールを受け入れているC++使いからしてみれば、変数が
ローカルかグローバルかなんてわざわざ目印付けるほどのことじゃないのかも
989:デフォルトの名無しさん
18/10/05 22:49:02.31 SgefIaql0.net
パブロフの犬カヨ
グローバル変数の先頭に「g_」を付け続けると
そのうち先頭に「g_」とつけただけで
990:デフォルトの名無しさん
18/10/05 23:02:57.02 SgefIaql0.net
しかしいかにクラスFooに関連するオブジェクトは全部Fooのコンストラクタかsetterで渡すか一時オブジェク
トとしてメソッドの引数として都度渡すのがオブジェクト指向設計としての理想とはいえ実際には対数表のカ
スタマイズ版みたいにかなり普遍的な意味を持つテーブルTが存在する前提でいっぱいクラスを定義したい
ときもあるわけでそういうときはテーブルTをグローバル変数とした方がスマートに書けるTがこの世に1つし
かないのにいちいちインスタンス毎にTへのポインタを持たせるのですかみたいな、
で、そうするとグローバルであることの目立つ標識が欲しいところだがオリジナルの規則を考えるのもアホら
しいので使用人口が多そうな「g_」を使う
991:デフォルトの名無しさん
18/10/05 23:05:20.25 cQzHZ22n0.net
60億人がシステムハンガリアンの良さを発見できなかった
そういうことだ
992:デフォルトの名無しさん
18/10/05 23:06:16.17 cQzHZ22n0.net
せっかく自動化したものを蒸し返す愚行
機械に使われる人間に自ら志願するようなことでしかない
993:デフォルトの名無しさん
18/10/05 23:14:36.32 MM5jcfpFM.net
ハンガリアン記法が滅亡した時にgとかsとかのスコーププレフィックスも一緒に絶滅したと思うの。
994:デフォルトの名無しさん
18/10/05 23:19:28.57 SgefIaql0.net
もうそういうのは見飽きたからハンガリアン無差別否定派とアプリケーションハンガリアン推進派が頃しあって消滅してくれたらいいのに…
995:デフォルトの名無しさん
18/10/05 23:22:01.95 4ThlZrTR0.net
「ハンガリアン記法を使うと、コードの断片からでも何かを発見できる。」
996:デフォルトの名無しさん
18/10/05 23:25:38.27 4ThlZrTR0.net
C#では、メンバ変数 aaa をアクセスする時には、必ず、
「this.aaa」
とするらしい。これは、C++で、ハンガリアン記法を使った場合の、
「m_aaa」
に該当する。this. と m_ では、後者のほうが短く便利。
m_ も、this. も付けない場合、たとえば、コンストラクタで
同じ意味の仮引数を使いたい場合に、何らかの別の名前を
考えなければならなくなる。
997:デフォルトの名無しさん
18/10/05 23:26:32.77 eEmdo3hB0.net
サイズ変更してキャパシティ変更になったらデリートかかる可能性が高いのでそういうことを一応管理しないといけない。
998:デフォルトの名無しさん
18/10/05 23:28:00.34 SgefIaql0.net
>C#では、メンバ変数 aaa をアクセスする時には、必ず、
999:>「this.aaa」 >とするらしい。 mjd? いつから?次の元号から??
1000:デフォルトの名無しさん
18/10/05 23:29:24.93 3VgmxBOW0.net
一般的に言われているシステムハンガリアンのデメリットはg、s、mには当てはまらない。
iとかdwとかlpszみたいな糞接頭辞とは分けて考えたほうがいいと思うよ。
1001:デフォルトの名無しさん
18/10/05 23:31:13.38 4ThlZrTR0.net
個人的には、以下のような命名規則は大いに役立っており、
コード全体を見ずにコードの断片を見るだけで、何も考えずに
コーディングが出来ることが多くなる。おかげでずいぶん楽になった。
char *pszText;
char szText[256];
CString strText;
char **ppszText;
「sz」は、0終端文字列。s = string、z = zero。
p は、ポインタ、str は、CString。
pp は、ポインタへのポインタ。
1002:デフォルトの名無しさん
18/10/05 23:36:17.35 zW6/2yxd0.net
m_がついててもそれがメンバである保証が何もないからなあ。無駄なだけ
1003:デフォルトの名無しさん
18/10/05 23:39:57.45 4ThlZrTR0.net
>>981
個人的には、i や dw は滅多に使わない。
lpszは、自分では使わない。pszは使う。
なぜなら、lpsz の「l」 は、16BIT時代から32BIT 時代へ移行したときの産物だから、
今は時代遅れなので。
ところで、dwRead と書くと、宣言を見返さなくても、読み込みバイト数を表す DWORD 値だと
分かって便利。dwWrite だと、その書き込み版となる。変数名が規則変化するのでとっても便利。
たとえば、「text」という変数名だと、CString 型なのか、0終端文字列なのか、
0終端が付いてないような特殊な文字列なのかが分からない。
ところが、ハンガリアン記法を使うとそれらが明確に区別できる。
0終端文字列を配列で持っているのか、それとも、そのアドレスをポインタで
持っているのかも、sz か、psz かで区別できる。
このことはバグの少ないコーディングにとても役立つ、。
頭を使わなくても機械的にコーディングできてしまうことが多くなるから。
1004:デフォルトの名無しさん
18/10/05 23:46:52.35 SgefIaql0.net
命名のプレフィックスに関する個人的な熱い想いはカプセルの内側に隠蔽すると良い
そういう意味で「m_」は比較的どうでも良い
1005:デフォルトの名無しさん
18/10/05 23:50:11.62 3VgmxBOW0.net
>>983
それを言うならあらゆるシンボル名が正しくそれを示している保証なんてないと思うよ。
>>984
そういうのはoopやtmpと相性が悪いんで…
1006:デフォルトの名無しさん
18/10/05 23:51:01.17 elz6X2140.net
こういう話だけは食い付きがいい
さすがドカタ
1007:デフォルトの名無しさん
18/10/05 23:52:25.87 zW6/2yxd0.net
そうだよ。だから最低限にしないといけない
無駄なものをつけるのはいらんバグを増やすだけで悪
1008:デフォルトの名無しさん
18/10/05 23:54:14.41 SgefIaql0.net
個人的にはCのライブラリ関数名に「g_」がついていないのを遺憾に思う
1009:デフォルトの名無しさん
18/10/05 23:54:47.79 ZMQnisBBd.net
今時ハンガリアン使うアホがいたとは驚きなんだがw
もう絶滅したと思ってた
1010:デフォルトの名無しさん
18/10/06 00:00:43.80 JjdhAE/r0.net
>>986
>そういうのはoopやtmpと相性が悪いんで…
どういう意味?
1011:さまよえる蟻人間
18/10/06 00:06:22.53 SJezKYMvd.net
OOP == オブジェクト指向プログラミング
TMP == テンプレート/temporary
1012:デフォルトの名無しさん
18/10/06 00:07:22.53 JjdhAE/r0.net
何で相性が悪いのかが分からぬ。
1013:デフォルトの名無しさん
18/10/06 00:11:20.65 d9G2ZJ030.net
いかにハンガリアン否定派といえども
いざ実際ハンガリアンで書かれた変数名を見たら体が反応してしまうということなんだろJK
鍛錬が足りん
1014:デフォルトの名無しさん
18/10/06 00:14:20.26 JjdhAE/r0.net
ずっと前に、ハンガリアン記法で書かれた比較的大きなソース・コードを見て
とても分かりやすかったので自分もそれに習っただけなんだよね。
1015:デフォルトの名無しさん
18/10/06 00:23:46.06 PyrakEMK0.net
実際みんなが叩いてるから叩いてるってやつはいるだろうな
俺も別に悪くはないと思うよ
自分から進んで使おうとは思わないが
1016:デフォルトの名無しさん
18/10/06 00:28:00.98 GMmUDkcN0.net
型が殖える度に変数名のプレフィックスがどんどんどん殖えていくなんてコーダー側からしたら不毛なだけ
いざ型名変えたいと思っても後ろを振り向くのが怖くなる
1017:デフォルトの名無しさん
18/10/06 00:33:38.42 JjdhAE/r0.net
でも、BOOL 値の変数の先頭に b を付けたりすると、ミスを発見するのに大いに役立つ
事があるよ。
1018:デフォルトの名無しさん
18/10/06 00:36:41.02 GMmUDkcN0.net
読む側にとってはな
書く側は細心の注意を払わないといけない
簡単に後戻りできないからな
メンテ効率最悪なんだよ
1019:デフォルトの名無しさん
18/10/06 00:38:54.48 CdYUXXMG0.net
次はpart139でいいのか?
1020:デフォルトの名無しさん
18/10/06 00:42:40.48 tQclXtq/0.net
ハンガリアンは、集団にその命名方法が周知されていないといけないので、周知するところから始めないといけない。
周知できればコスト低減できるが、それまでのコストをどうみつもる?
1021:1001
Over 1000 Thread.net
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 39日 8時間 40分 40秒
1022:過去ログ ★
[過去ログ]
■ このスレッドは過去ログ倉庫に格納されています