トップページ > プログラム > 2018年10月06日 > JjdhAE/r

書き込み順位&時間帯一覧

55 位/221 ID中時間01234567891011121314151617181920212223Total
書き込み数0200000000000000000000002



使用した名前一覧書き込んだスレッド一覧
デフォルトの名無しさん
クラス名・変数名に迷ったら書き込むスレ。Part28 [無断転載禁止]©2ch.net

書き込みレス一覧

クラス名・変数名に迷ったら書き込むスレ。Part28 [無断転載禁止]©2ch.net
376 :デフォルトの名無しさん[sage]:2018/10/06(土) 01:13:06.07 ID:JjdhAE/r
「システム・ハンガリアン記法」を嫌う人がいるようだけど、個人的には実際に長年使ってみて、
コーディング効率が上がっていると感じる。

ネット上でよく見かける反論に、「システム・ハンガリアン記法は、(代入などで型が異なれば)コンパイラ
がエラーを出してくれるのだから不要」というものがある。

しかし、システム・ハンガリアン記法を使っていれば、たとえば、代入のコードをコーディングしたい最中に
周囲の変数の変数名を見て、エラーが起きない組み合わせを探すと、実は、非常にわずかな組み合わせ
しか無いことが多い。

そして、そのわずかな組み合わせの中に必ず正しいコードがあるので、人間の作業は、
そのわずかな組み合わせの中から選ぶだけでよくなるので、思考の節約になってくれる。

もし、システム・ハンガリアンを使っていなければ、この思考の節約が働かないので、
本格的に考えないといけないことがあり、余計に時間がかかってしまうことがある。

正しいコードが次のようなものだったとする:

pXxxx = pYyyy + ofsAaa;

周囲には、pXxx, pYyy, ofsAaa 位しか変数がないとすれば、頭を使わなくても、可能な組み合わせは、
上記のコードを含む少数のパターンしかないことがすぐに分かる。

そのうちから正しいコードを「選ぶ」事と、意味で考えることを二重に行うことで、早く正解のコードを
書くことが出来るようになる。

ところが、システム・ハンガリアン記法を使っていなければ、意味で考えることしか出来なくなり、
思考パターンを減らすことが出来ない。また、コンパイルしてみないと「検算」もも出来ない。
クラス名・変数名に迷ったら書き込むスレ。Part28 [無断転載禁止]©2ch.net
377 :デフォルトの名無しさん[sage]:2018/10/06(土) 01:42:44.00 ID:JjdhAE/r
さらに、文字列などを使っている時、

CString     strText;
const char   *pszText = (const char *)strText; // operator char *() 演算子による型変換
int        lenText = strText.GetLength();

などと、同じ Text という名前の文字列に対して、CString 文字列や、それを高速アクセスするための
文字列へのポインタ、文字列の長さ、の各々に対する変数名を機械的に付けられるのは重宝している。

さらに、よくあるのは、メンバ変数と全く同じ意味のローカル変数や仮引数がある状況。

この場合、毎回、新しい生を考え出すのは大変なので、メンバ変数には必ず先頭に m_ を
つけていると便利。今の場合、

m_strText   = strText;
m_lenText   = lenText;

のように美しくバランスするのがとても好きだ。
これだと、エラーが正しいコードであることがとても分かりやすい。

また、「m_」の接頭辞は、次のようなコンストラクタでも重宝する:
CPerson::CPerson( const CString &strName ) {
m_strName = strName;
}
さらに、引数が同じ文字列でも、0終端文字列の場合は、
CPerson::CPerson( const char *pszName ) {
m_strName = pszName;
}
とすればよいだけなので、とても美しい。


※このページは、『2ちゃんねる』の書き込みを基に自動生成したものです。オリジナルはリンク先の2ちゃんねるの書き込みです。
※このサイトでオリジナルの書き込みについては対応できません。
※何か問題のある場合はメールをしてください。対応します。