0Pricing
C# Academy · レッスン

名前付きタプル要素

タプルのフィールドに意味のある名前を付けます。

「名前付きタプル要素」は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フィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. 値タプルの基本
  2. 名前付きタプル要素
  3. 分解
  4. メソッドの戻り値としてのタプル
← C# Academyに戻る