- PR -

C#.NETで別クラスの構造体の参照方法について

投稿者投稿内容
まさる
ベテラン
会議室デビュー日: 2006/12/21
投稿数: 59
お住まい・勤務地: 越後の中ほど
投稿日時: 2008-12-11 08:59
引用:

miyaviさんの書き込み (2008-12-11 00:52) より:
ただ、これだと複数人で開発をする時など、変数がどの型なのか一々調べる必要がありますよね。



Visual Studioを使っていれば、マウスのカーソルを当てれば型が分かりますよね?
_________________
まさるblog
セラフ
ベテラン
会議室デビュー日: 2005/12/01
投稿数: 95
お住まい・勤務地: 東北の顔の形といえば
投稿日時: 2008-12-11 09:47
基本的に英語がいいと思いますよ。
ローマ字だと、SyoとSho、CyaとTyaなど人によって書き方が異なってきますから。

string yourName;
int yourNameLength;
double average;

それぞれの名前から大体の型は予想がつくでしょう。
とはいえ、averageなどはdecimalやsingleかもしれません。

だから名前で判断してはいけないのだと思います。
ちゃんと型を調べましょう。

というか調べなくても、わかるように書けばいいのです。

コーディングにおいて、変数のスコープを最小にして、一目でその変数の型がわかるように書けばいいのです。したがって、変数の宣言がわからなくなるほど長いメソッドを書くことがそもそもの間違いです。Visual Studioを使っていれば、マウスのカーソルを当てたり、入力中なら「ctrl+j」のショートカットキーで変数の型はすぐわかりますよね。

しかも、.Netではint32もstringも全てクラスです。クラス全てにプレフィックスを作るのですか?プレフィックスをつけるクラスとつけないクラスの違いは?似通ったプレフィックスが増えたら見難くないですか?プレフィックスのつけ方が人によって違わないように辞書を作る必要は?

あれ??ハンガリアンにすることで、コーディング規約に不整合が生まれ、見にくくなり、辞書を作る手間まで増えていますねぇ。これでもハンガリアンを使う必要があると考えるなら、お使いいただいて問題ないと思います。

それとここで言われているハンガリアンを辞めましょうというのは、「システムハンガリアン」の話。「システムハンガリアン」とは、型名をプレフィックスにすることで、プレフィックスをやめようということではないですよ。「インスタンス変数」や「ローカル変数」を区別するために使用することは問題ないのではないでしょうか?

私はインスタンス変数に「 _(アンダーバー) + Camel 」を使用しています。

http://local.joelonsoftware.com/mediawiki/index.php/%E9%96%93%E9%81%95%E3%81%A3%E3%81%9F%E3%82%B3%E3%83%BC%E3%83%89%E3%81%AF%E9%96%93%E9%81%95%E3%81%A3%E3%81%A6%E8%A6%8B%E3%81%88%E3%82%8B%E3%82%88%E3%81%86%E3%81%AB%E3%81%99%E3%82%8B
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2008-12-11 10:02
引用:

miyaviさんの書き込み (2008-12-11 00:52) より:

私のイメージとしては、
 string Hankaku; //半角文字(string型)
 int Mojisu; //文字数(int型)
 double Shosu; //少数(double型)
こんなイメージを持っています。


ローカル変数であれば、先頭文字は小文字ですね。

引用:

一応、意味のある変数名なので、jittaさんの要求は満たしているように思うのですが・・・。


ローカル変数であれば許容範囲といったところだと思います。 入っている値の種類ではなく何に使う値かを示した名前の方がたぶん適切です。

引用:

ただ、これだと複数人で開発をする時など、変数がどの型なのか一々調べる必要がありますよね。
「調べる手間 < 変数の型変更などに伴う変数名との不整合による手間」という事でしょうか。


そもそも複数人で開発する時に同じクラスを 2 人以上で触るなんてことはほとんどないと思うのですが...。 他の人が担当している別のクラスを見なければいけないのは、インターフェイス部分だけで良いですし、その部分に関しては型がどうであれ注意深く見る必要があります。 もし自分の担当しているクラスの中で、変数に振り回されているなら、クラスのメンバ (の数) が不適切、あるいはメソッドの中の変数の数が不適切なだけだと思います。

引用:

また、グローバル変数とローカル変数も、特に命名規則で区別しないのでしょうか。


そもそもグローバル変数は使うことがないので必要としません。 仮にそれなりに広域な変数が必要だったとしても多くとも 2, 3 個程度のものでしょう。 こういった広域な変数は全体に影響が及ぶものですから、多くは静的クラスで事足りたり (どうせ Setting 周りだったりするので) Settings で完結したりします (そうではなくて、ただの public メンバを仰っているのであれば、それは先頭大文字ということで区別がつくでしょう)。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
オウオウ
常連さん
会議室デビュー日: 2008/11/26
投稿数: 38
投稿日時: 2008-12-11 19:02
(利用規約違反のため削除いたしました。@ITクラブメンバーシップセンター)
miyavi
常連さん
会議室デビュー日: 2006/12/07
投稿数: 27
投稿日時: 2008-12-12 02:02
皆様、返信頂きありがとうございます。

私なりに感じた事をまとめてみました。

【ハンガリアン記法は問題なのか】

ハンガリアン記法に問題があることは分かりました。
しかしながら、私自身、数年間この記法でコーディングを行っており、いきなり変更することは難しそうです。

また、しっかりとルールを設けられたコーディングであれば、ソースの可視性が高まると感じております。


【ソースの可視性】

じゃんぬねっとさんからご指摘頂きましたが、複数人で同じクラスなどを編集することはあまりないと思います。

ただ、過去に開発を行ったシステムなどで、改修の際に他人が作成したソースを解読するなどという場面はよくあるのではないかと思います。

その際に、ハンガリアン記法で作成されたソースは可視性が良いという印象があります。
こちらも当然ルール化された状態の話ですが。

また、古いシステムなんかは開発環境がなかったりするので、テキストエディタを使ってコーディングすることもあります。
その場合、変数を一つ一つ確認するのは大きな工数になるのではないかと懸念します。


【ハンガリアン記法はやらないほうが良い?】

「人間は間違う生き物である」という観点で考えると、たとえルール化された状態のハンガリアン記法であっても、変数は確認すべきであると思います。
ただ、変数を確認するのであればハンガリアン記法でなくてもよくなります。

つまり、この観点ではハンガリアン記法は不要となります。

ハンガリアン記法のメリットとデメリットを考え、どちらがいいのか
私の中でゆれています。


【結論】

今まで常識と思っていたコーディングが現在の非常識?となっているようで、
少々ショックを受けましたが、ご指摘頂きました皆様ありがとうございました。

実際に試してみないとなんともいえませんが、何かアプリでも作る際に試してみようと思います。

教えて頂きました皆様、ありがとうございました。
Toshi
ベテラン
会議室デビュー日: 2007/09/18
投稿数: 68
お住まい・勤務地: 関東のどっか
投稿日時: 2008-12-12 10:53
こんにちわ。

最後のmiyaviさんのコメントを見てですが、
しっかりとルールを設けられたコーディングであれば、どのような形であれ、あるていどの可視性は確保されるかと思います。
ただ、C++やC#などの型の定義が可能な言語では、ハンガリアン記法にこだわる必要はないのではないでしょうか。
※私がハンガリアン記法を行なわないのは、変数の型の変換などが入った場合などに
 変数名の変更忘れが生じたりなど、違う点でのコストが発生するためです。

あと、古いシステムの話は本論とは関係がないと思います。
Jittaさんが話をしているのは、あくまで今回(C#等.Net系言語、オブジェクト指向系と
いったほうがいいでしょうかね?)のソースの話でしょう。

まぁ、開発環境に合わせて、適切な記法を選択できれば問題ないのではないでしょうか

> Jittaさん
違ったらご指摘のほどを。

以上です。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2008-12-12 18:54
引用:

miyaviさんの書き込み (2008-12-12 02:02) より:

ただ、過去に開発を行ったシステムなどで、改修の際に他人が作成したソースを解読するなどという場面はよくあるのではないかと思います。


"複数人で同じクラスなどを編集することはあまりない" のですから、フツーの作りさえしていれば他人のものであっても問題となることはありません。 フツーの作りであれば...。 そうでない場合は確かにあります。 それは "もし自分の担当しているクラスの中で〜" 以降で書いたとおりで、前の人の作り (メンバの数) が不適切なだけだと思います ("担当" という表現にしたのはそのため)。

百歩譲っても必要なのはクラスのメンバ変数なのだと思いますが、しかしひとつ前の投稿で申し上げたとおりでそれはそれほど多くはならないです。 これは実際に経験しているので私自身は良くわかっているつもりです。 もちろん逆パターンも経験していまして、不適切にメンバが多いクラスは (ルールさえ理解できれば) ハンガリアンの方が確かに見やすいです。

ルールは開発人員のレベルと習慣に合わせるのがベストではありますから、意思疎通が図れているならハンガリアンというのも間違いだとは言いません。 ひとつ前の投稿は .NET 開発での通常のクラスの作りからすると一般的ではないかなという意味で書かせて頂きました。 すべての言語、すべての場合で真っ向から否定するつもりはございませんので、ひとつ前の投稿で不適切な点がありましたらお許しください。

引用:

また、古いシステムなんかは開発環境がなかったりするので、テキストエディタを使ってコーディングすることもあります。
その場合、変数を一つ一つ確認するのは大きな工数になるのではないかと懸念します。


ちょっと風呂敷が広がっているような気がしますが、これは C# ではあまり考えられないです。 便乗して風呂敷を広げて擁護するならば、私は SDK/MFC 絡みであればハンガリアンは見やすいと思います。 ルールは言語ごとに用意するのが一般的ではないでしょうか。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌

スキルアップ/キャリアアップ(JOB@IT)