• ベストアンサー

ファイル名、関数名、変数名・・・様々な決定について

自分でも具体的に言いたいことが表せないかもしれませんが よろしくお願いします。 なかなかこれで決まりというスタイルが確立しないのですが、 何かに頼りたい自分としては、そういうことを幅広く扱っている 本などがあれば参考にしたいです。 結局最後は自分で決定するしかないということは、頭では分かっているつもりですが・・・ 悩んでいることの例としてはたくさんあって、 ・エラーを表示する関数名として disp_errorなのかdisply_errorなのかshow_errorなのか それともアンダーバー無くしてshowerrorなのか ・最大アイテム数を表す定数名として ITEM_MAXなのかMAX_ITEMなのかITEM_NUMなのか ・データを格納するテーブル名を表す変数名として tablenameなのかtableだけでいいのか ・~の~の~のアイテムという変数名の場合 など、これだけならそれらを聞けば解決するのですが、まだまだあります・・・ 周りからみれば些細(どうでもいい)なことだと思うので 本とかをあまり見かけないのですが、 こういうことに言及しているサイトなり本などはご存知でしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • Oh-Orange
  • ベストアンサー率63% (854/1345)
回答No.5

★私の場合 ・表示関連の関数が多数ある場合は統一させる意味で 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/200504/coding_guide.pdf→『コーディング作法ガイド』 http://sec.ipa.go.jp/download/dl.php?filename=event/20050222/ohno.pdf→『高品質実装のためのコーディング作法』 書籍: 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/
takagoo100
質問者

お礼

ご返答ありがとうございます。 Oh-Orangeさんも質問されてたんですね。 >・表示関連の関数が多数ある場合は統一させる意味で DispError() としています。 なるほど、使い分けということですね。 自分はさらにDispかDisplyかっていうところまで気になっちゃうんですよね(もう病的かもしれません・・・) Displyにしたら、そのプログラム内では他の関数名もなるべく省略しないように 書くべきというかそうした方がいいんですか?例えば、InitならInitialize >http://sec.ipa.go.jp/download/files//report/200504/coding_guide.pdf これ凄いですね・・・ 言語ごとにこういうのがあれば見たいのです。 例えばPHPとか基本的(大まか)な書き方は大体同じような感じがしますが、 なんとなく違くないですか? どちらも別に詳しくは知らないので、イメージだけで言ってますが・・・ >クラスのメンバ変数は先頭に m_ を追加 自分の中で常に小規模(規模ってほどでもないか)なプログラムしか 想像してないからかもしれませんが、 >int m_x; >int m_y; これだけ抜きとって見ると、なんか違和感があって だったらxやyだけでいいや、という気持ちになります。 ただこういうのは絶対にm_や他のプリフィックスが必要だと感じていて 自分の中で踏ん切りをつけたいですね。

その他の回答 (5)

  • aris-wiz
  • ベストアンサー率38% (96/252)
回答No.6

この様な話ははっきりいって宗教論なので、 絶対にこのようにするというようなことはありません。 なので、これらを使うように強く流布している物は殆どありません。 あとはセンスの問題でもあるかもしれません。 殆どの場合が、そのプロジェクトや会社、グループの単位で コーティング規則を設けるなど対策を講じています。 どの様に書くかは状況によって変えられるような視野を 持つことが大切だと思います。 プロジェクト単位でコーティング規則が無い場合は、 他人が書いたコードを編集する場合など出来るだけ、 周りの前任者のコードに合せてコードを編集することです。 でなければ、いくら可読性を考慮した書き方であっても、 イキナリ全く違う規則が入り混じって書かれたコードは ナンセンスだからです。 つまり、どれだけ自分の信じた方法が良いと思っていても、 ソースコードがどれだけ一貫して書けるかに尽きると思います。 例えば: ・フラグを表す変数として hogeflagと書かれていて、長すぎるから今回から追加する、 テーブル名の変数名としてfhugaにしようというのはまずいです。 #hogeflagであるならhugaflagにすべきという意味です。 #ただこれも人によって違うと思うので参考程度に。

takagoo100
質問者

お礼

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

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.4

反対意見が多いことを覚悟で、私のやり方を紹介します。 最近はいろいろ考えるのが面倒なので、自分で命名規約を決められる場合(その方が多いのですが...)には、日本語で命名しています。 例えば、最大アイテム数を表す定数名であれば、 const std::size_t 最大アイテム数 = 10; のようにです。 Visual C++で日本語の識別子を使えるようになったのがきっかけですが、可読性が著しく向上しました。 こんなことで悩むのは時間の無駄ですから。 日本語識別子が使えない状況であれば、標準C++ライブラリまたはBoost C++ Librariesの命名方法に準拠しています。

takagoo100
質問者

お礼

ご返答ありがとうございます。 良い意味で衝撃を受けました。 なるほど、そういう考え方もあるんですね。 自分はこの書き方はしないと思いますが、 こういう分かりやすくしたいという考え方は 好きです(分かりやすいかどうかは別の議論になりそうですが) そういえば空白を多く入れてるソースをたまに見かけますが、 例えば(毎回例えが変ですいません・・・) s[i] = (int)(3+5); を s[ i ] = (int)( 3 + 5 ); ←書き込んだときにスペースが入ってるか心配・・・ と書いてるケースです。 圧倒的に上の書き方が多いと思いますが、 下の書き方も自分では見やすくて好きなんですよね。 ただ自分は上の書き方ですが

  • jk39
  • ベストアンサー率54% (366/670)
回答No.3

とあるプログラマです。 > 周りからみれば些細(どうでもいい)なことだと思うので いえいえ、プロジェクトで仕事をするときなどでは 特に重要なことですよ。 命名規則を含めたコーディングのルールは 「コーディング規約」などといいます。 下記のサイトはとてもよくまとまっていますね。 (私の書き方もこれに近いです。) http://www.shos.info/develop/xp/cplusstd.html ※クラス名、変数名を ClassName や variableName のように  書く方法を「キャメル記法」といいます。 あとC言語で有名なコーディング規約に 「GNU コーディング規約」があります。 その中の「Writing C」を使う方もいると思います。 http://www.sra.co.jp/wingnut/standards-j_toc.html

takagoo100
質問者

お礼

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

回答No.2

takagoo100さんの質問って些細なことですが、重要な問題ですよね。 自分も迷いますが、基本的にはプロジェクトにプログラミング規約があればそれに従いますが、無い場合は、自分は以下のサイトの規約に則るようにしています。 http://segroup.fujitsu.com/sdas/technology/develop-guide/2-regulation.html (Javaのプログラミング規約ですが) または、Javadocをみて参考にします。 http://java.sun.com/javase/ja/6/docs/ja/api/index.html 自分の場合は、最初に身に付けた言語が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にしてしまいます。 >・~の~の~のアイテムという変数名の場合 上記は、ちょっと自分ではイメージが出来ませんでした。。。。 ここであげた例は、あくまで自分だったらの場合なので、ご参考程度までに。

takagoo100
質問者

お礼

ご返答ありがとうございます。 >・~の~の~のアイテムという変数名の場合 説明が足りず申し訳ないです。 自分でも何か良い例がないかと探していたのですが、 例えば、「使っても減らなくて、初期化されてない、アイテム」 無理やりすいません、今のところこれしか浮かびませんでした・・・ uninitialized_item_of_nodecrease これは・・意味わかんないですね・・・ >http://segroup.fujitsu.com/sdas/technology/develop-guide/2-regulation.html これはいいですね。自分でも知りたいことが多々ありました。 参考になります。 >なので自分は、最初の2つのどちらか、ITEM_MAX_NUMにします。 ANo.5でのOh-Orangeさんもそうなのですが、どうやら対象となる物を 先頭に記述して統一感をもたせて、次にMAXや状態を書くやり方が多そうですね。 >displayError()でも良い気がしますが、何かshowの方が良く聞くので 自分もそういう決め方です(この例ではshowErrorが良さそうだと思います) ただこの決め方だと、例えば エラー表示関連ではshowError派が多いのでshowErrorを使うことにして 状態表示関連ではdisplayState派が多いのでdisplayStateを・・・ ということだと、統一感がなくなってしまうので(まぁ悩む以前にこの場合は showで統一するのが当たり前だと思いますが・・・) 1つ1つを多数派で決定できればできれば楽なのになぁと思ったりします。

回答No.1

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

takagoo100
質問者

お礼

ご返答ありがとうございます。 たしかに気にしすぎてもしょうがないということですよね・・・ ただ自分の場合は、気にする以前のレベルだと思うので まず何かに頼りたいというのがあって、 本題とは少しずれますが、みなさんの意見を聞けるだけでも助かります。 >欧米のPGは一般に「動詞+目的語」を使いますが、 自分の場合、まずここで悩むんですよね・・・ たしかに「主語(目的語)+動詞」の方がすっきりする感じもしますし。

関連するQ&A