名前付きタプル要素
タプルのフィールドに意味のある名前を付けます。
「名前付きタプル要素」はCoddyKit上の無料C# Academyレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはC# Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 C# Academyコースには全4レッスンが含まれています。
タプルの要素に名前を付ける
Item1/Item2 の代わりに、タプルの要素に名前を付けると、コードが読みやすくなります: (int Id, string Name)。
using System;
class Program
{
static void Main()
{
(int Id, string Name) user = (1, "Ada");
Console.WriteLine(user.Id + ": " + user.Name);
}
}リテラル内で名前を付ける
タプルを作成するときに要素へ直接名前を付けることができ、その名前はコンパイラーによって保持されます。
using System;
class Program
{
static void Main()
{
var point = (X: 3, Y: 4);
Console.WriteLine("X=" + point.X + ", Y=" + point.Y);
}
}名前で分かりやすさが向上する理由
名前付き要素は意図を明確にします。result.Total は result.Item2 よりもはるかに分かりやすい表現です。
using System;
class Program
{
static void Main()
{
var result = (Count: 3, Total: 150);
Console.WriteLine("Avg: " + ((double)result.Total / result.Count).ToString("0.0"));
}
}名前は省略可能なラベル
タプル要素の名前は、コンパイル時に使われる便利なラベルです。内部ではフィールドは依然として Item1、Item2 であり、どちらの名前でもアクセスできます。
using System;
class Program
{
static void Main()
{
var p = (Age: 30, City: "Rome");
Console.WriteLine(p.Age + " / " + p.Item1); // same value
Console.WriteLine(p.City + " / " + p.Item2);
}
}メソッドシグネチャで名前付きタプルを使う
メソッドのパラメーター型や戻り値の型として名前付きタプルを宣言すると、API の内容をコードから把握しやすくなります。
using System;
class Program
{
static (int Sum, int Product) Compute(int a, int b)
{
return (a + b, a * b);
}
static void Main()
{
var r = Compute(3, 4);
Console.WriteLine("Sum=" + r.Sum + ", Product=" + r.Product);
}
}名前付き要素と位置指定要素の混在
一部の要素に名前を付け、残りを位置指定のままにすることもできますが、すべてに名前を付けたほうが分かりやすくなります。
using System;
class Program
{
static void Main()
{
var data = (Id: 7, "guest", Active: true);
Console.WriteLine(data.Id + ", " + data.Item2 + ", " + data.Active);
}
}推論されるメンバーで名前を付ける
名前付き変数からタプルを作成すると、C# は対応する要素名を自動的に推論できます。
using System;
class Program
{
static void Main()
{
int width = 10, height = 5;
var size = (width, height); // names inferred from variables
Console.WriteLine("w=" + size.width + ", h=" + size.height);
}
}名前付き要素を更新する
名前付き要素も書き込み可能なフィールドなので、プログラムの実行中に再代入できます。
using System;
class Program
{
static void Main()
{
var game = (Player: "A", Score: 0);
game.Score += 25;
Console.WriteLine(game.Player + " scored " + game.Score);
}
}リスト内の名前付きタプル
名前付きタプルのリストは、テーブルの行のように読み取れます。
using System;
using System.Collections.Generic;
class Program
{
static void Main()
{
var people = new List<(string Name, int Age)>
{
("Ann", 30),
("Bob", 25)
};
foreach (var p in people)
Console.WriteLine(p.Name + " is " + p.Age);
}
}名前付きタプルの等値比較
名前は等値比較に影響しません。要素名に関係なく、値が一致すれば2つのタプルは等しいと見なされます。
using System;
class Program
{
static void Main()
{
var a = (X: 1, Y: 2);
var b = (A: 1, B: 2);
Console.WriteLine(a == b); // True - values match
}
}まとめ
名前付きタプルは、タプルの軽さと名前付きフィールドの読みやすさを兼ね備えており、分かりやすいメソッドの戻り値に最適です。
using System;
class Program
{
static (bool Ok, string Message) Validate(int age)
{
if (age < 0) return (false, "Age cannot be negative");
return (true, "Valid");
}
static void Main()
{
var v = Validate(-1);
Console.WriteLine(v.Ok + ": " + v.Message);
}
}理解度チェック
名前付きタプルの要素について理解できているか確認しましょう。
まとめ
(int Id, string Name) のような名前付きタプルの要素を使うと、タプル自体が説明的になり、Item1 の代わりに名前でアクセスできます。名前は宣言できるほか、変数から推論したり、メソッドシグネチャで使用したりできます。名前はコンパイル時のラベルであり、値を比較する等値比較には影響しません。
using System;
class Program
{
static void Main()
{
var user = (Id: 42, Name: "Kai");
Console.WriteLine(user.Name + " #" + user.Id);
}
}よくある質問
「名前付きタプル要素」レッスンは無料ですか?
はい。「名前付きタプル要素」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、C# Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 C# Academyコースには全4レッスンが含まれています。
「名前付きタプル要素」で何を学びますか?
タプルのフィールドに意味のある名前を付けます。 ブラウザで直接実行するハンズオンコードでC# Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
C# Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのC# Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。
「名前付きタプル要素」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このC# Academyレッスンでコードを書いて実行できますか?
はい。すべてのC# Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- 値タプルの基本
- 名前付きタプル要素
- 分解
- メソッドの戻り値としてのタプル