本セッションの登壇者
セッション動画(YouTubeチャンネル登録もお願いします。)
皆様こんにちは、Microsoftの井上章と申します。
TechfeedのC#枠では、まず私のほうからC# 10/11の代表的な新機能を5分でご紹介しようと思います。完全にライブなのでかなりドキドキしていますけれども、テンポよく進めていこうと思います。詳細は後日資料をご参照いただけたらと思います。
さて、C#といえば .NETのプライマリの開発言語として位置づけられています。そして、今年の2月で .NET誕生20周年という節目の年となっています。非常に長い歴史の中で.NET、そしてC#も進化をしているわけですね。
コーディングをシンプルにするC# 10の新しい記法
そして、昨年11月にリリースされた .NET 6と共に最新バージョンのC# 10が登場しています。
C# 10のコンセプトは「Simplify your code with C# 10」、随所にコードをよりシンプルに書けるような記述形式や構文が新しく追加されています。
まず1つ目はこちら。
通常、ファイルの冒頭にusing ディレクティブを使ってコード内で使用するクラスの名前空間を記述するかと思います。これは通常、ファイルスコープになります。つまり、ファイル内で有効になり、他のソースコードでは再度記述する必要があります。
一方、一度記述したらプロジェクトスコープで有効にするのが、この global usingディレクティブです。usingの前にglobalと記述することで、そのusing行がプロジェクトスコープで有効になります。いずれかのソースファイル内でglobal usingディレクティブが書かれていれば OK です。
右側の例のように、たとえばglobalusings.csのような特定のファイルにまとめてglobal using ディレクティブを記述することでソースコードの管理が容易になると思いますので、おすすめしたいところです。
さらに、使用する.NET SDKごとに既定の名前空間がglobal usingディレクティブとして暗黙的に追加され、利用できるようになっています。よく使う名前空間はusingディレクティブを使わずに参照できます。
さて、Visual Studioなどを使って.NET 6 / C# 10のいずれかのプロジェクトを作成したことがある方は、Program.csがガラッと変わってシンプルになっていることに驚かれたと思います。
C# 10では、エントリポイントとなるMainメソッドの記述も省略できるようになりました。また、Program.csがエントリポイントとなり、名前空間、クラス名、Mainメソッドの記述を省略して、右側のように実装コードをすぐに直接記述できるようになりました。
さらにこの流れで(お話しますが)、ASP.NET Core Web APIの記述もMinimal APIと呼ばれる記法で、各WebメソッドをProgram.csにクラス定義などを書かないフラットな形で書くことができるようになっています。
さらに、名前空間の宣言を中括弧で括らずにファイルスコープで宣言できるようになっていますので、非常に有効なところかと思います。
宣言した名前空間がファイルスコープで適用されるので、名前空間を入れ子で宣言することはできませんが、これによって先の Program.cs ファイルの簡素化に加えて、各ソースファイルでも余計なネストを行わず、よりシンプルに記述できます。
次期バージョンC# 11の特徴
さて、残り時間は次期バージョンC# 11のお話をしておきたいと思います。
今年の11月にリリースが予定されている次期バージョン.NET 7に向けて仕様策定や開発が進められている C#11は、すでにプレビュー版を試せるようになっています。
このC# 11プレビューは、現行バージョンの.NET 6環境でも試していただくことが可能です。.csprojプロジェクトファイルにLangVersionをpreviewとする設定を追加すると、C# 11が有効になります。なお、あくまでもプレビューなので、正式リリースでは採用されないものがあるかもしれません。まずは参考程度に見ていただけたらと思います。
C#11では、改行などを含む未加工、プレーンな生文字列リテラルをC#コード内でダブルクォーテーション3つを続けて使うことで記述できるようになります。
また、$の数で文字列補間に使う中括弧の数を指定できるので、パラメータを埋め込んだフォーマットされたJSON文字列リテラルなども容易に生成できるようになります。
また、右側のコードのように、中括弧で指定する文字列補間の式でも改行を使えるようになるため、補間式を可読性高く記述できるようにもなります。
最後に、現在プロポーザルとしてGitHub上で検討が進められている機能のひとつとして UTF-8文字列リテラルがあります。UTF-8を使うケースも増えてきている中で、byte配列としてコンパイル済みUTF-8として使う記述が検討されています。
なお、某関係筋からの最新情報では、このUTF-8文字列リテラルは最新のVisual Studio 2022 バージョン 17.3 Preview 1で使えるようになっているらしいです。よかったらぜひ試してみてください。
ということで、さすがに5分ではすべてを紹介しきれませんが、C# 10/11ではさらに高機能な言語として進化し続けています。今後のC#の動向に興味のある方は、ぜひGitHubのcsharplangリポジトリもウォッチしてみてください。
以上になります。ありがとうございました。