C#プログラマーならMicrosoftのコーディング規約くらいは読んでおくべき

C#たんかわいいよ!

自分がC#を使い始めたのは2011年からなので、そろそろ8年目になります。もはやVisual Studioと.NETとC#さえあれば、何でも作れる気がします。

今日は自分と同じC#プログラマーのあなたに、注意喚起というか、お願いです。できてない人が結構多いので…。

この記事を読んで「そんなの当たり前やん」と思ったあなたは、ぜひうちのプロジェクトへお越しください。笑

Microsoftのコーディング規約読もうぜ

MicrosoftがC#のコーディング規約をまとめているのですが、これが単純明快で非常に良い記事なので、シェアします。

C# のコーディング規則 (C# プログラミング ガイド) | Microsoft Docs

知っている人にとっては当たり前の話ですが、どれも可読性やメンテナンス性の観点では重要な内容ばかりです。

汚いコードはプロジェクト全体の負担になります。しかもプロジェクトを抜けた後は、悪口や陰口を言われまくります。そんなの嫌ですよね?

情報を得る努力と活かす工夫をして、美しいコードを書きましょう。

まだ読んだことがないC#プログラマーのあなた。プロとしての自覚が足りないんじゃないですか?

そんなあなたに、最低限これくらいは知っておいて欲しいと思うことをピックアップしておきますので、まずは以下を読んでみてください。

レイアウト規則-改行を活用せよ

メソッド定義とプロパティ定義の間に少なくとも 1 行の空白行を追加します。

出典:C# のコーディング規則 (C# プログラミング ガイド) | Microsoft Docs

空白行は超必須。可読性に直結します。ブログの改行や余白と同じ意味がありますね。

もしあなたがプログラマーではなかったとしても、以下の2つのコードのどちらが読みやすいかなんて、一目瞭然ですよね?

// ブログ関連の名前空間
namespace Blog
{
    /// <summary>
    /// ブログのエントリークラス
    /// </summary>
    public class Entry
    {
        /// <summary>
        /// 投稿日時
        /// </summary>
        public DateTime PostDateTime { get; set; }

        /// <summary>
        /// 更新日時
        /// </summary>
        public DateTime UpdateDateTime { get; set; }

        /// <summary>
        /// ブログの作成
        /// <returns>true:作成成功 false:作成失敗</returns>
        /// </summary>
        public bool Write()
        {
            // ブログ作成処理を実装
            ...
        }
    }
}
// ブログ関連の名前空間
namespace Blog
{
    /// <summary>
    /// ブログのエントリークラス
    /// </summary>
    public class Entry
    {
        /// <summary>
        /// 投稿日時
        /// </summary>
        public DateTime PostDateTime { get; set; }
        /// <summary>
        /// 更新日時
        /// </summary>
        public DateTime UpdateDateTime { get; set; }
        /// <summary>
        /// ブログの作成
        /// <returns>true:作成成功 false:作成失敗</returns>
        /// </summary>
        public bool Write()
        {
            // ブログ作成処理を実装
            ...
        }
    }
}

コメント規則-デリミターとテキストの間に空白を1つ挿入せよ

次の例に示すように、コメント デリミター (//) とコメント テキストの間に空白を 1 つ挿入します。

// The following declaration creates a query. It does not run
// the query.

出典:C# のコーディング規則 (C# プログラミング ガイド) | Microsoft Docs

「//」ではなく「// 」ということを、声を大にして言いたい。

空白行と同様ですが、この空白1桁がある方がコメントは美しく、視認しやすくなります。

暗黙の型指定を使ってくれ…

new 演算子

次の宣言に示すように、暗黙の型指定を使用してオブジェクトのインスタンス化を簡潔な形式にします。

var instance1 = new ExampleClass();

前の行は次の宣言に相当します。

ExampleClass instance2 = new ExampleClass();

出典:C# のコーディング規則 (C# プログラミング ガイド) | Microsoft Docs

これ、使ってない人が多いですよねぇ。きっちり型指定するのが偉いとでも思っているのでしょうか?無意味な苦労を美徳としてしまう、日本人の悪いところですね。

長い名称のクラスとか、Dictionaryとかをnewでインスタンス化する時は、暗黙の型指定を使ってくださいね。

var customerDictionary = new Dictionary<StringBuilder, CustomerInfo>();

こう書けるのに、

Dictionary<StringBuilder, CustomerInfo> customerDictionary = new Dictionary<StringBuilder, CustomerInfo>();

こう書いてしまうのは、正気の沙汰ではないですよねぇ。スマホで見ている方は、横スクロールに疲れてしまいますよねwくどい。くどすぎまっせ。

念のため補足ですが、自作したメソッドの戻り値を受け取る際には、これは使ってはいけませんよ。

他人にとっては「お前が作ったメソッドから何が返ってくるかなんて知らんがな」ですから。臨機応変に使い分けてくださいね。

運用を考えたコードを書こう

当たり前の話ですが、システムは基本コードをメンテナンスしながら運用していくものです。

あなたがプロジェクトを抜けても、あなたが書いたコードは運用され続けていくんですよ。

他人が参照や編集を行うことも意識して、メンテナンス性の高いコードを記述してくださいね。属人性の高いコードはプログラマーの怠慢です。

汚いソースはメンテナンスが困難で、プロジェクトのリソースを浪費します。あなたの勉強不足はあなただけの問題ではなく、プロジェクト全体の損失なんですよ。

本業プログラマーの方はそれを認識したうえで仕事してください。