【最大10000ポイント】当たる!!質問投稿キャンペーン!

自分でも具体的に言いたいことが表せないかもしれませんが
よろしくお願いします。

なかなかこれで決まりというスタイルが確立しないのですが、
何かに頼りたい自分としては、そういうことを幅広く扱っている
本などがあれば参考にしたいです。
結局最後は自分で決定するしかないということは、頭では分かっているつもりですが・・・
悩んでいることの例としてはたくさんあって、

・エラーを表示する関数名として
disp_errorなのかdisply_errorなのかshow_errorなのか
それともアンダーバー無くしてshowerrorなのか

・最大アイテム数を表す定数名として
ITEM_MAXなのかMAX_ITEMなのかITEM_NUMなのか

・データを格納するテーブル名を表す変数名として
tablenameなのかtableだけでいいのか

・~の~の~のアイテムという変数名の場合

など、これだけならそれらを聞けば解決するのですが、まだまだあります・・・
周りからみれば些細(どうでもいい)なことだと思うので
本とかをあまり見かけないのですが、
こういうことに言及しているサイトなり本などはご存知でしょうか?

このQ&Aに関連する最新のQ&A

A 回答 (6件)

★私の場合


・表示関連の関数が多数ある場合は統一させる意味で DispError() としています。
 よって表示関連の関数群は DispXXXX() と先頭4文字をつけます。
 その他
 初期化用なら→InitXXXX()
 アイテム関連→ItemXXXX()
 と先頭n文字を統一させています。
・記号定数の場合も考えは同じで
 最大~~~は MAX_XXXX
 最小~~~は MIN_XXXX
 アイテム関連は ITEM_MAX_XXXX のように ITEM_XXXX から始めます。
・テーブルの場合は末尾を Table の5文字に統一させています。
 名前テーブル→NameTable
 道具テーブル→ItemTable
 魔法テーブル→MagicTable
 コメントもなるべく文字数を揃える(構造体,共用体,クラスなど)
・C言語の時
 ローカル変数はすべて小文字(単語区切りは(_)下線文字)
 グローバル変数は先頭を大文字、2文字目から小文字(単語区切りは(_)下線文字)
 ※グローバル変数は構造体を使って1つだけを定義するのが基本。→extern の場合は。
・C++言語(クラス)の時
 グローバル変数は先頭に g_ を追加
 クラスのメンバ変数は先頭に m_ を追加
 class hero {
  int m_x;
  int m_y;
  int m_Lv;
  int m_HP;
  int m_MP;
  long m_exp;
  long m_gold;
 public:
  hero();
  ~hero();
 public: ←区切りの意味で記述
  int getX();
  int getY();
  int getLevel();
  void setLevel( int n );
  long getGold();
 public: ←区切りの意味で記述
  その他のメンバ関数
 };
 クラスのメンバ関数は小文字から始めて単語の境で大文字を混ぜる。
・こんな感じです。

参考資料:
http://sec.ipa.go.jp/download/files//report/2005 …→『コーディング作法ガイド』
http://sec.ipa.go.jp/download/dl.php?filename=ev …→『高品質実装のためのコーディング作法』

書籍:
http://www.amazon.co.jp/dp/4798111899/→『組込みソフトウェア開発向けコーディング作法ガイド』

過去質問より:
http://oshiete1.goo.ne.jp/qa2271876.html→『あなたのC言語コーディング規約』
http://oshiete1.goo.ne.jp/qa2963476.html→『C/C++ ソースのコーディングについて』

私も以前こちらで質問した過去があります。

参考URL:http://www.amazon.co.jp/dp/4798111899/
    • good
    • 0
この回答へのお礼

ご返答ありがとうございます。
Oh-Orangeさんも質問されてたんですね。

>・表示関連の関数が多数ある場合は統一させる意味で DispError() としています。
なるほど、使い分けということですね。
自分はさらにDispかDisplyかっていうところまで気になっちゃうんですよね(もう病的かもしれません・・・)
Displyにしたら、そのプログラム内では他の関数名もなるべく省略しないように
書くべきというかそうした方がいいんですか?例えば、InitならInitialize

http://sec.ipa.go.jp/download/files//report/2005 …
これ凄いですね・・・
言語ごとにこういうのがあれば見たいのです。
例えばPHPとか基本的(大まか)な書き方は大体同じような感じがしますが、
なんとなく違くないですか?
どちらも別に詳しくは知らないので、イメージだけで言ってますが・・・

>クラスのメンバ変数は先頭に m_ を追加
自分の中で常に小規模(規模ってほどでもないか)なプログラムしか
想像してないからかもしれませんが、
>int m_x;
>int m_y;
これだけ抜きとって見ると、なんか違和感があって
だったらxやyだけでいいや、という気持ちになります。
ただこういうのは絶対にm_や他のプリフィックスが必要だと感じていて
自分の中で踏ん切りをつけたいですね。

お礼日時:2008/02/21 19:45

この様な話ははっきりいって宗教論なので、


絶対にこのようにするというようなことはありません。
なので、これらを使うように強く流布している物は殆どありません。
あとはセンスの問題でもあるかもしれません。

殆どの場合が、そのプロジェクトや会社、グループの単位で
コーティング規則を設けるなど対策を講じています。
どの様に書くかは状況によって変えられるような視野を
持つことが大切だと思います。

プロジェクト単位でコーティング規則が無い場合は、
他人が書いたコードを編集する場合など出来るだけ、
周りの前任者のコードに合せてコードを編集することです。
でなければ、いくら可読性を考慮した書き方であっても、
イキナリ全く違う規則が入り混じって書かれたコードは
ナンセンスだからです。

つまり、どれだけ自分の信じた方法が良いと思っていても、
ソースコードがどれだけ一貫して書けるかに尽きると思います。
例えば:
・フラグを表す変数として
hogeflagと書かれていて、長すぎるから今回から追加する、
テーブル名の変数名としてfhugaにしようというのはまずいです。
#hogeflagであるならhugaflagにすべきという意味です。

#ただこれも人によって違うと思うので参考程度に。
    • good
    • 0
この回答へのお礼

ご返答ありがとうございます。
自分なりに理解できました。ありがとうございます。

>他人が書いたコードを編集する場合など出来るだけ、周りの前任者のコードに合せてコードを編集することです。
こう考えると、やっぱり全世界でって言ったら大げさですけど
ある程度書き方は統一した方がいいなぁと改めて実感しますね。

お礼日時:2008/02/21 20:35

反対意見が多いことを覚悟で、私のやり方を紹介します。



最近はいろいろ考えるのが面倒なので、自分で命名規約を決められる場合(その方が多いのですが...)には、日本語で命名しています。
例えば、最大アイテム数を表す定数名であれば、

const std::size_t 最大アイテム数 = 10;

のようにです。
Visual C++で日本語の識別子を使えるようになったのがきっかけですが、可読性が著しく向上しました。
こんなことで悩むのは時間の無駄ですから。

日本語識別子が使えない状況であれば、標準C++ライブラリまたはBoost C++ Librariesの命名方法に準拠しています。
    • good
    • 0
この回答へのお礼

ご返答ありがとうございます。
良い意味で衝撃を受けました。
なるほど、そういう考え方もあるんですね。
自分はこの書き方はしないと思いますが、
こういう分かりやすくしたいという考え方は
好きです(分かりやすいかどうかは別の議論になりそうですが)

そういえば空白を多く入れてるソースをたまに見かけますが、
例えば(毎回例えが変ですいません・・・)
s[i] = (int)(3+5); を
s[ i ] = (int)( 3 + 5 ); ←書き込んだときにスペースが入ってるか心配・・・
と書いてるケースです。
圧倒的に上の書き方が多いと思いますが、
下の書き方も自分では見やすくて好きなんですよね。
ただ自分は上の書き方ですが

お礼日時:2008/02/21 18:31

とあるプログラマです。



> 周りからみれば些細(どうでもいい)なことだと思うので
いえいえ、プロジェクトで仕事をするときなどでは
特に重要なことですよ。


命名規則を含めたコーディングのルールは
「コーディング規約」などといいます。

下記のサイトはとてもよくまとまっていますね。
(私の書き方もこれに近いです。)
http://www.shos.info/develop/xp/cplusstd.html
※クラス名、変数名を ClassName や variableName のように
 書く方法を「キャメル記法」といいます。


あとC言語で有名なコーディング規約に
「GNU コーディング規約」があります。
その中の「Writing C」を使う方もいると思います。
http://www.sra.co.jp/wingnut/standards-j_toc.html
    • good
    • 0
この回答へのお礼

ご返答ありがとうございます。
http://www.shos.info/develop/xp/cplusstd.html
このサイトも素晴らしいですね。
特に>(15) 名前の対称性 で
例えば登録処理、編集処理、削除処理があった時に
登録はaddなのかregistなのか、じゃあaddで決めた時に
削除はdeleteなのかremoveなのか、こういうのでも自分はまだ悩んでる段階です・・・
ただこのケースは上で書かれてるような決まりとは
別の決定の仕方かもしれませんが、参考にしたいと思います。

お礼日時:2008/02/21 17:40

takagoo100さんの質問って些細なことですが、重要な問題ですよね。


自分も迷いますが、基本的にはプロジェクトにプログラミング規約があればそれに従いますが、無い場合は、自分は以下のサイトの規約に則るようにしています。

http://segroup.fujitsu.com/sdas/technology/devel …
(Javaのプログラミング規約ですが)

または、Javadocをみて参考にします。
http://java.sun.com/javase/ja/6/docs/ja/api/inde …

自分の場合は、最初に身に付けた言語がJavaなのでそれが基本になってますね。

>・エラーを表示する関数名として
>disp_errorなのかdisply_errorなのかshow_errorなのか
>それともアンダーバー無くしてshowerrorなのか

この場合は、自分はshowError()ですね。
displayError()でも良い気がしますが、何かshowの方が良く聞くので。。。(^_^;)

>・最大アイテム数を表す定数名として
>ITEM_MAXなのかMAX_ITEMなのかITEM_NUMなのか

この場合、最大アイテム数なので、MAXは入れたいですね。
なので自分は、最初の2つのどちらか、ITEM_MAX_NUMにします。

>・データを格納するテーブル名を表す変数名として
>tablenameなのかtableだけでいいのか

自分は、nameTableかもしくは、nameTblにしてしまいます。


>・~の~の~のアイテムという変数名の場合

上記は、ちょっと自分ではイメージが出来ませんでした。。。。


ここであげた例は、あくまで自分だったらの場合なので、ご参考程度までに。
    • good
    • 0
この回答へのお礼

ご返答ありがとうございます。
>・~の~の~のアイテムという変数名の場合
説明が足りず申し訳ないです。
自分でも何か良い例がないかと探していたのですが、
例えば、「使っても減らなくて、初期化されてない、アイテム」
無理やりすいません、今のところこれしか浮かびませんでした・・・
uninitialized_item_of_nodecrease
これは・・意味わかんないですね・・・

http://segroup.fujitsu.com/sdas/technology/devel …
これはいいですね。自分でも知りたいことが多々ありました。
参考になります。


>なので自分は、最初の2つのどちらか、ITEM_MAX_NUMにします。
ANo.5でのOh-Orangeさんもそうなのですが、どうやら対象となる物を
先頭に記述して統一感をもたせて、次にMAXや状態を書くやり方が多そうですね。


>displayError()でも良い気がしますが、何かshowの方が良く聞くので
自分もそういう決め方です(この例ではshowErrorが良さそうだと思います)
ただこの決め方だと、例えば
エラー表示関連ではshowError派が多いのでshowErrorを使うことにして
状態表示関連ではdisplayState派が多いのでdisplayStateを・・・
ということだと、統一感がなくなってしまうので(まぁ悩む以前にこの場合は
showで統一するのが当たり前だと思いますが・・・)
1つ1つを多数派で決定できればできれば楽なのになぁと思ったりします。

お礼日時:2008/02/21 17:24

本、サイトは良く知らないので紹介できませんが、


自分は「主語(目的語)+動詞」を使ってます。エラーなら
 Err_Set() // エラー値の設定
 Err_Reset() // エラー値の解除
 Err_Display() // エラー値の表示
つまり「日本語の語順」のまんまです。欧米のPGは一般に
「動詞+目的語」を使いますが、日常会話の語順を採用しただけで
特に意味はありません。この人たちが命名した関数群をブラウザで
一覧すると互いに関連の無いオブジェクトに関するGet~()やSet~()
がずらずらと並んでいて使えない辞書の見本の様になってます。
たぶん彼らはそんなことには頓着しないのでしょう。つまり、
命名に関して彼らの意見を聞いても無駄なのかも知れません。
    • good
    • 0
この回答へのお礼

ご返答ありがとうございます。
たしかに気にしすぎてもしょうがないということですよね・・・
ただ自分の場合は、気にする以前のレベルだと思うので
まず何かに頼りたいというのがあって、
本題とは少しずれますが、みなさんの意見を聞けるだけでも助かります。

>欧米のPGは一般に「動詞+目的語」を使いますが、
自分の場合、まずここで悩むんですよね・・・
たしかに「主語(目的語)+動詞」の方がすっきりする感じもしますし。

お礼日時:2008/02/21 16:32

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QUpdateData( FALSE); による文字列データの表示更新(VC++6.0)

VC++の超初心者です.

UpdateData( FALSE );
を用いてエディットボックスの文字列の表示の更新を
試みているのですが,たとえば,以下のコードのようにボタンをクリックした際に文字列表示の更新を複数回行おうとするとうまくいきません.
具体的には一回目のUpdateData( FALSE );が反映されず二回目のUpdateData( FALSE );のみ反映されるという症状です.

なおm_mojiretsuはCstring型でエディットボックスのDDX用の変数です.

void CMyDlg::OnButton1()
{
DWORD p;

m_mojiretsu=_T("mojirstu1");
UpdateData( FALSE );

/*5秒の待ち*/
p=timeGetTime();
while(1){if((timeGetTime()-p)>5000) break;}

m_mojiretsu=_T("mojirstu1\r\nmojirstu2");
UpdateData( FALSE );

}


何か別の処理を行わなければいけないのでしょうか.
どこかに根本的なミスがあるのでしょうか.

VC歴3日程度で,右も左も分からず大変困っております.よろしくお願いします.

VC++の超初心者です.

UpdateData( FALSE );
を用いてエディットボックスの文字列の表示の更新を
試みているのですが,たとえば,以下のコードのようにボタンをクリックした際に文字列表示の更新を複数回行おうとするとうまくいきません.
具体的には一回目のUpdateData( FALSE );が反映されず二回目のUpdateData( FALSE );のみ反映されるという症状です.

なおm_mojiretsuはCstring型でエディットボックスのDDX用の変数です.

void CMyDlg::OnButton1()
{
DWORD p;

m_mojiretsu=_T("mojirst...続きを読む

Aベストアンサー

m_mojiretsu=_T("mojiretsu1");
UpdateData(FALSE);
UpdateWindow(); // <- これを追加

/*5秒の待ち*/
...

とすれば、ひとまず期待どおりの動作になると思います。

# こうするよりは、OnButton1() では変数を書き換えるべしと言う
# 自前のコマンドメッセージを投げるだけで、すぐに戻った方が
# お行儀は良いのですが...
# そこいらへんは追々調べたり試したりしてみて下さい。

Qファイルやディレクトリの存在確認を行う方法

ファイルをオープンするのはfopenでOKですが、ファイルやディレクトリの存在確認を行う方法が知りたいです。

何か組み合わせて作るものなのでしょうか?
perlとか便利な演算子があるのですが、C/C++って器用ではないですね。
これは処理系?依存の内容ですか?

私の環境は VC6, VC2005 Windows2000です。

Aベストアンサー

int access(const char* path, int mode);
int stat(const char* path, struct stat* sb);

かな?
MSDN を引くと _access_s() を使えとか書いてあるけど。

Qコンテキスト(Context)の意味がさっぱり分かりません。

コンテキスト(Context)の意味について、下記のURLを参照しても意味が分からないしピンと来ないです。

http://kaden.yahoo.co.jp/dict/?type=detail&id=3730

私なりの解釈としては「つまり、コンテキストは、あらゆる型の引数を演算子や関数が、その引数の型に合わせて、返り値の型を選択する場合、その演算子や関数を呼び出す際の型がコンテキストである」ということです。

また、コンテキストは、どの状況において、どのような処理を応ずればいいのかという意味で考えています。このことを皆様はどう思いますでしょうか。ご意見をお聞かせください。

コンテキスト(Context)自体の言葉は意味が分かりづらいし、PHPのプログラミングでコンテキストの言葉はどのように使われますでしょうか。

Aベストアンサー

コンテキストはもっと一般的な言葉です。
日本語の文脈の意味を素直に考えれば、問題ないと思います。
たとえば、
「蕎麦をいただいた」という発話で「いただいた」は「貰った」と「食べた」の2つの意味が考えられます。この発話の表れた周りの会話でどちらの意味かが変わります。この会話の流れが文脈です。
プログラミング言語の世界でも、特定の表現が、どこにどう書かれたかで意味が変わってきます。これが文脈依存です。そして、意味に影響を与える周りの記述が文脈(コンテキスト)です。

Qeveryoneがフルコンなら誰でもアクセス可?

Windows 7 Ultimateの「フォルダを右クリックする→プロパティ→セキュリティ」にあるeveryoneをフルコントロールにしておくと、そのworkgroup内のユーザーであればどんなユーザーでもそのフォルダにアクセスできるのでしょうか。

Aベストアンサー

>同じworkgroup内のユーザーでなければ、そもそもLAN上に出てこないですよね。
「ネットワーク」に表示されないだけで、アドレスを直接入力すればアクセスすることはできます。

LAN上の他のコンピュータからのアクセスはローカルのファイルのアクセス権(右クリックのセキュリティから表示される)と、共有のアクセス権の双方に関わります。これらは別々に指定することが可能です。
で、共有ファイルにアクセスするためにはそのコンピュータ上のユーザIDとパスワードが必要です。これを知らなければアクセスできません。

http://mbsupport.dip.jp/watson/network_02.htm
http://win7.jp/h7k1120.htm

QC++ 構造体の一括初期化 {0}

構造体変数に {0} を代入すると、CString は空文字、 intは0に一括で初期化されるようです。
なんでこんなことが出来るのでしょう?
{0}は何?
仕組みを教えて下さい!!

Aベストアンサー

> 一括初期化関数でも作るしかなさそうですね
static変数を初期化用に用意しておくのはいかが?
http://oshiete.goo.ne.jp/qa/2658268.htmlより
>静的記憶域期間をもつオブジェクトを明示的に初期化しない場合、
>次の規定に従う。
>a) そのオブジェクトの型がポインタ型の場合、空ポインタに初期化する。
>b) そのオブジェクトの型が算術型の場合、(正または符号なしの)0に初期化する。
>c) そのオブジェクトが集成体の場合、各メンバにa)~d)の規定を(再帰的に)
>適用し初期化する。
>d) そのオブジェクトが共用体の場合、最初の名前つきメンバにa)~d)の規定を
>(再帰的に)適用し初期化する。

なので、zero初期化されていることが、規格で保証されます。

typedef struct hoge_struct
{
 int a;
 int b;
} hoge_struct;

static hoge_struct initializer; //初期化用変数。値は変えない。

int main(void)
{
 hoge_struct hoge;
 hoge = initializer;
 return 0;
}
真っ白に何度も初期化したいなら、こんな感じでどうでしょう?
関数を用意して初期化すると、構造体のメンバが増えると関数も修正しないといけない
ですが、これだと関数を変更しなくてすむし。

> 一括初期化関数でも作るしかなさそうですね
static変数を初期化用に用意しておくのはいかが?
http://oshiete.goo.ne.jp/qa/2658268.htmlより
>静的記憶域期間をもつオブジェクトを明示的に初期化しない場合、
>次の規定に従う。
>a) そのオブジェクトの型がポインタ型の場合、空ポインタに初期化する。
>b) そのオブジェクトの型が算術型の場合、(正または符号なしの)0に初期化する。
>c) そのオブジェクトが集成体の場合、各メンバにa)~d)の規定を(再帰的に)
>適用し初期化する。
>d) そのオブジェクトが共用...続きを読む


人気Q&Aランキング