0Pricing
C# Academy · Урок

Именованные элементы кортежей

Присваивайте полям кортежа содержательные имена.

«Именованные элементы кортежей» — бесплатный урок C# Academy на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения 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);
    }
}

Именованные кортежи в сигнатурах методов

Метод может объявлять именованный кортеж в качестве типа параметра или возвращаемого значения, делая программный интерфейс самодокументируемым.

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);
    }
}

Равенство и имена

Имена не влияют на равенство. Два кортежа равны, когда совпадают их значения, независимо от имён элементов.

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/7) и разблокировать остальной курс C# Academy, подпишись на CoddyKit PRO. Курс C# Academy содержит 4 уроков всего.

Чему я научусь в уроке «Именованные элементы кортежей»?

Присваивайте полям кортежа содержательные имена. Ты практикуешь C# Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать C# Academy?

Предыдущий опыт не требуется. C# Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.

Сколько времени занимает урок «Именованные элементы кортежей»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке C# Academy?

Да. Каждый урок C# Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Основы кортежей значений
  2. Именованные элементы кортежей
  3. Декомпозиция
  4. Кортежи как возвращаемые значения методов
← Назад к C# Academy