Microsoftが「Build 2020」で発表した「.NET」関連のニュースのなかには、.NETチームによる同社のプログラミング言語「C#」の計画や、「Blazor WebAssembly」の正式版リリースが含まれている。
同社のC#リードデザイナーであるMads Torgersen氏によると、「C# 9.0」は「一般的なコーディングシナリオでのより高い明確さとシンプルさ」を追求しているという。しかし今回のリリースでは「データ形状に関する簡潔な、かつ不変性を備えた表現のサポート」に特に注力しているという。
C#は、MicrosoftのテクニカルフェローであるAnders Hejlsberg氏によって生み出された言語であり、2000年代初頭にリリースされた。なおHejlsberg氏は、大規模アプリケーション向けにJavaScriptの拡張言語として普及している「TypeScript」の生みの親として知られている。
C# 9.0のプレビュー版は、「C# 8.0」のリリースから1年を待たずにリリースされたことになる。C# 8.0は、「F# 4.7」とともに「.NET Core 3.0」に同梱されるかたちで、2019年に「Visual Studio 2019」とともにリリースされた。
データ形状に関する簡潔な、かつ不変性を備えた表現に向けた取り組みは、オブジェクト生成時に各プロパティーの値を代入するためのオブジェクト初期化子(initializer)に焦点を当てたものとなっている。まずTorgersen氏は、現時点での制約として、オブジェクト初期化子はその機能を果たす上で、プロパティーが変更可能(mutable)となっていなければならないと次のコードを引用しながら説明している。
new Person
{
FirstName = "Scott",
LastName = "Hunter"
}
public class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
}
同氏は「初期化子はまずオブジェクトのコンストラクター(デフォルトコンストラクター、すなわちパラメーターのないコンストラクター)を呼び出した後、プロパティーのセッターに対する代入処理を実行することで機能する」と説明している。
同氏は以下のコードを示し、「init-onlyプロパティーがこの問題を解決することになる!今回、initアクセサーを導入した。これはオブジェクトの初期化中にのみ呼び出せる、一種のsetアクセサーだ」と付け加えている。
public class Person
{
public string FirstName { get; init; }
public string LastName { get; init; }
}
またTorgersen氏は、個々のプロパティーに不変性を与える際にもinit-onlyプロパティーが有効であると示唆している。同氏はこの他にも、C# 9.0で導入されたwith式で不変データのサポートが向上する点などを解説している。
.NETとC#に関連して、Blazor WebAssemblyを公式にリリースしたというニュースもある。Blazor WebAssemblyは、Progressive Web Apps(PWA)とも呼ばれる、従来のデスクトップアプリのように動作するブラウザーアプリを開発するためのC#や.NET開発者向けのフレームワークであり、これまではプレビュー段階にあった。
ASP.NETのプリンシパルプログラムマネージャーDaniel Roth氏は「Blazor WebAssembly 3.2.0」のリリースを発表し、「十分な機能を備え、サポートされたリリースで、本番での利用に対応できる」と述べている。
この記事は海外CBS Interactive発の記事を朝日インタラクティブが日本向けに編集したものです。