C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは簡潔で分かりやすいコードを記述するために使える。
Visual Studio 2017とともにリリースされたC# 7には多くの新機能がある。それらの新機能はどのような場面で役立つのだろうか? 3回にわたって紹介していく。
初めに、C# 7の新機能の一覧を示しておこう(本連載で取り上げないものも含む)。この一覧は「What's new in C# 7」によるものだ。
ここでの名称は英語を基本とし、括弧内に日本語訳を記載した(以降は、日本語訳を使う)。公式ドキュメントのサイト(Microsoft Docs)で未翻訳の用語は筆者が翻訳して[仮訳]と付記した。
C# 7の新機能の中で、数値リテラル構文の改善とローカル関数は、明瞭なコーディングに役立つ。数値リテラル構文の改善は数値リテラルの読み間違いを防ぎ、ローカル関数はそのメソッドのスコープを明確にする。
今回は、その2つの機能の使いどころを紹介していこう。
例えばbyte型の変数のそれぞれのbitをフラグとして使うとき、これまではその初期値として与える整数リテラルは10進数か16進数に限定されていたため、どのフラグが立つのか分かりにくいコードになっていた(次のコード)。対策としてコメントで2進数を併記して分かりやすくすることもあっただろうが、それはコードを修正したときにコメントを修正し忘れるリスクを負うものだった。
byte b1 = 0x95; // 1001 0101
C# 7では、「0b」接頭辞によって2進数のリテラル表記が可能になった。さらに、「_」記号を数値リテラル内の任意の位置(接頭辞の直後は除く)に書けるようになったので、桁区切りも明確にできる。
// 接頭辞「0b」で2進数表記
byte b2 = 0b10010101;
// 「_」で桁区切りを入れて読みやすく
byte b3 = 0b1001_0101;
「_」記号による桁区切りは、10進数/16進数の整数や、浮動小数点数でも利用できる(次のコード)。
// 16進数を4桁ごとに区切る例
uint i1 = 0x800000a1;
uint i2 = 0x8000_00a1;
// 10進数を3桁ごとに区切る例
uint i3 = 2147483809;
uint i4 = 2_147_483_809;
// 小数点以下を3桁ごとに区切る例
double d1 = 0.00000001;
double d2 = 0.000_000_01;
Copyright© Digital Advantage Corp. All Rights Reserved.