mogmo .NET

C#/XAML/VB6たまにC++についてメモ程度に書いていく。あくまで自分用。責任は取れません。

コードを書くときに気を付けていること・気をつけてほしいこと

最初のうちはこんなことに気を付けながら書いてほしいなぁ,気を付けたらいいと思うなって事項のまとめ。

今日のテーマの目次です。

では始めて行きましょう(`・ω・´)

記述ルール

命名記法

言語によって大まかなルールが決まっているので,それに合わせると良い。

記法 説明
PascalCase すべての単語の先頭が大文字 DeleteText(), CreateText()
camelCase 最初が小文字、2語目以降の先頭が大文字 csvFile, decimalLabel
snace_case アンダーバー区切り is_numeric, str_decimal
CONSTANT_CASE すべて大文字のアンダーバー区切り IDC_EDIT_DECIMAL, CONST_VALUE

※2020/4/16 @garamloverのご指摘があり,PascalCaseとcamelCaseの説明が逆だったので修正しました。

区切りの書き方

カンマ区切りなのかカンマスペース区切りなのか。
カンマスペースを用いる方が多いように思っています。

void Test1(int a, int b); // カンマスペース
void Test2(int a,int b); // カンマ

タブ

タブキーを押したとき,空白で埋めるかタブで埋めるかの違い。
VisualStudioの場合,設定はメニューの"ツール">"オプション"をクリックして
画面を開き,"テキストエディター"のタブをクリックすると,各言語の設定を変更することができる。
私は4つスペース埋めが好きです。
f:id:mogmo811:20200415171210p:plain

コメント

記法

自分は" // hogehoge" という書き方をします。
時と場合によってはtabで調整することもあります。
ですがtabは等幅フォントを使っていないエディタで見たとき悲惨なことになりますので,あまり使わないようにしています。

int a; // スペース//スペースコメント
int b;// //スペースコメント
int c;//コメント
コメントの内容

不要なコメント,間違ったコメントは悪なので後回しにせずすぐ削除・修正する癖をつけましょう。

行間

行間にも意味があると思って書くこと。
行間は文章でいう段落,もしくはグルーピングの方法だと思ってほしい。

例えば下のように2個の条件分岐も行間がないとぱっと見1つの条件分岐に見えてしまう。

int a = 10;
if(a < 10)
{
    a = 0;
}
else if(a > 50)
{
    a = 999;
}
if(a ==0)
{
   return a;
}
else if(a > 100)
{
    // hogehoge
}
// 続く...

ほかにもヘッダファイルで関数のグルーピングが適当だと,恐ろしく読みづらい。
かなり適当な例ですが。。。悪い例。

// C++です
int ConvertToValue(std::string text);
std:string ConvertToText(int value);
void Convert();

void LoadText();

void LoadValue();

int Mul(int a, int b);

void ClearBuffer();
int Add(int a, in b);
int Sub(int a, int b);

私が書き直すとこんな感じかな。
メイン処理(っぽそうな関数名)と,変換処理関数,演算用関数でグルーピングしました。

void Convert();
void LoadText();
void LoadValue();
void ClearBuffer();

int ConvertToValue(std::string text);
std:string ConvertToText(int value);

int Add(int a, in b);
int Sub(int a, int b);
int Mul(int a, int b);

VisualStudioならオプション設定を有効活用しよう

メニューの"ツール">"オプション"をクリックして画面を開き,
テキストエディターのタブをクリックすると,各言語のコーディングルールが設定できる。
※ローカルのVSのみに反映するので他の人のVSには影響しない。設定を共有するにはプロジェクトごとにEditorConfigを設定する必要があるがここでは言及しない

言語によって設定できる内容は微妙に違うが,

  • タブの空白埋めかタブ埋め
  • switch文のcaseの位置
  • {}の位置(私はTest2派)
void Test1() {
    //...
}
void Test2()
{
    // ...
}

などなど細かに決められる。

これを決めておけば,「ドキュメントのフォーマット」機能を実行したとき,設定に沿ってフォーマットしてくれる。
ショートカットキーのデフォルトは Ctrl+K, Ctrl+D

コードについて

基本C#XAMLを書いている私ですが,C++を使う機会があったのでC++の話も交えて書きます。

アクセス権限

public, private, protected, etc...のことです。

自身のクラスから参照する必要があるのかを検討してアクセス修飾子を選定しましょう。
publicはどこからでもアクセスできて危険です。
まずはprivateで考え,外部からのアクセスが必要なものならその参照範囲を想定してprotected や internal,publicなどを使用する...といった風に考えると使いやすいかなぁと思います。
この辺はクラスをいくつも設計したり,継承を使ったりすると特に気にして設計しなければなりません。
C++参考:アクセス修飾子
C#参考:アクセス修飾子 - C# プログラミング ガイド | Microsoft Docs

cppファイルとヘッダファイル [C++]

ヘッダファイルとcppファイルの記述順は一致していてほしいものです。

ヘッダファイルの記述がぐちゃぐちゃだったり,不要なコメント,不適切なコメント,実際には使っていない関数や変数が乱立していると一目見て読む気が失せてしまいます。

  • 常に整理しながら書くこと
  • 命名時に十分に検討すること
  • こまめに確認・修正を繰り返す

という癖をつけておきましょう。

また, ヘッダファイルにusing std;は記述しないようにしている。
理由はhファイルを使う人がusing stdに気づかない恐れがあるから。
また,略さないで書いたほうが読み手に伝わりやすいと思うので,usingせず素直にstd::filesystemとかstd::wstringと書いています。

インクルードファイル [C++]

以下のサイトを参考にしてください。
インクルードファイルとは:
https://wa3.i-3-i.info/word12024.html
インクルードファイルの指定方法:
Oracle Solaris Studio 12.3 Information Library (日本語)

文字列 [C++]

文字列の型いっぱいあるんですよね...
この辺はまた次回書こうかな。

終わりに

最初のうちに気を付けてほしいことを書きました。
きれいに書くことはあとで保守する自分のためにもなりますし,
担当が変わっても保守しやすいプログラムになりますので記述には注意しましょう。

ではまた。(`・ω・´)ノ"

もぐも