ROBOT PAYMENT TECH-BLOG

株式会社ROBOT PAYMENTのテックブログです

バージョンアップで気づいたC#の便利な機能

こんにちは。決済システムでエンジニアをやっております hoshino33 です。
決済システムではC# 7.3からC# 10でコーディングする機会も増えているのですが、その際にC#でこんな書き方もできるのかと思い今回のテーマといたしました。

はじめに

現在、決済システムにおいての開発は以下となっております。
・.NET Framework (C# 7.3)
・.NET (C# 10)

まだまだ、.NET Framework (C# 7.3)での開発機会は多いですが、徐々に.NET (C# 10)になってきています。
もう少し決済システムの歴史を知りたい方は決済システムにおける.NET(C#)事情をご参照ください。

.NETとC#のバージョンの関係性について

利用している.NETのバージョンによりC#のバージョンが決まります。
.NETとC#のバージョン対応表は、ググってみると出てくるのでこちらでは割愛します。

C#のバージョンによる機能強化について

C# 7.3からC# 10までの変更でも結構な変更があるようですね。
どのような機能が強化されているかの詳細は以下より確認できます。 https://learn.microsoft.com/ja-jp/dotnet/csharp/whats-new/csharp-version-history

個人的にはC# 8.0で追加されたパターン マッチングが気に入っております。
FizzBuzzをC# 7.3で記載すると以下のようになりますが、

void Main()  
{  
    foreach (var n in Enumerable.Range(1, 100))
    {
        var output = "";   
        if(n % 3 == 0 && n % 5 == 0)
        {  
            output = "FizzBuzz";
        }
        else if (n % 3 == 0)
        {
            output = "Fizz";
        }
        else if (n % 5 == 0)
        {
            output = "Buzz";
        }
        else
        {
            output = n.ToString();
        }
        Console.WriteLine(output);
    }  
}

パターン マッチングを利用すると以下のようにできます。

void Main()
{
    foreach (var n in Enumerable.Range(1, 100))
    {
        var output = (n % 3, n % 5) switch
        {
            (0, 0) => "FizzBuzz",
            (0, _) => "Fizz",
            (_, 0) => "Buzz",
            _ => n.ToString()
        };
        Console.WriteLine(output);
    }
}

かなりスッキリした書き方ができました。
ただ、見慣れない方は少し気持ち悪く感じるかもしれません。可読性的にはどちらが見やすいですかね。

また、Resharperがこんな書き方もできるよと提案してくれるのでそこで初めてこんな書き方もできるのかと発見できたりもします。ただ、慣れたあとに何気なくC# 7.3側でも書いたところ# 7.3では対応していなくて書けないと思ったこともちらほら。。

まとめ

正直、既存の書き方でも開発はできるので困ると言ったことはなさそうですが、便利な書き方もあるので知っておいて損はないと思います。また、初見で見た際は困惑すると思うので、バージョンが上がった際などは積極的にどのような機能が追加されたか把握して積極的に情報収集は必要だと思いました。さらに自身のコーディングの引き出しも増えると思います。
現在はまだC# 10ですが早くバージョンアップしてC# 12の便利な機能もどんどん使っていきたいですね。



We are hiring!!

ROBOT PAYMENTでは一緒に働く仲間を募集しています!!!

speakerdeck.com
www.robotpayment.co.jp