0Pricing
C# Academy · Урок

Объявление локальных функций

Определяйте вспомогательные функции внутри методов.

«Объявление локальных функций» — бесплатный урок C# Academy на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения C# Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс C# Academy содержит 4 уроков всего.

Что такое локальная функция

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

Объявление локальной функции

Запишите локальную функцию как обычный метод, вложив её в тело метода. В пределах одной области видимости её можно вызвать до или после объявления.

using System;

public class Program
{
    public static void Main()
    {
        int Square(int n) => n * n;

        Console.WriteLine(Square(4));
        Console.WriteLine(Square(7));
    }
}

Локальные функции с блочным телом

Локальные функции могут иметь полноценное блочное тело с несколькими инструкциями, циклами и собственными локальными переменными, как и любой метод.

using System;

public class Program
{
    public static void Main()
    {
        int Factorial(int n)
        {
            int result = 1;
            for (int i = 2; i <= n; i++) result *= i;
            return result;
        }

        Console.WriteLine(Factorial(5));
    }
}

Повышение понятности кода

Локальные функции позволяют дать имя фрагменту логики, не загромождая класс закрытым методом, который используется только одним методом. Это сохраняет связанный код вместе.

using System;

public class Program
{
    public static void Main()
    {
        string Format(string label, int value) => label + ": " + value;

        Console.WriteLine(Format("Score", 90));
        Console.WriteLine(Format("Level", 3));
    }
}

Рекурсия с локальными функциями

Локальная функция может вызывать саму себя, поэтому рекурсию легко выразить прямо в нужном месте.

using System;

public class Program
{
    public static void Main()
    {
        int Fib(int n) => n < 2 ? n : Fib(n - 1) + Fib(n - 2);

        for (int i = 0; i < 7; i++)
            Console.Write(Fib(i) + " ");
        Console.WriteLine();
    }
}

Локальные функции можно объявлять после использования

В отличие от локальных переменных, на локальную функцию можно сослаться раньше в методе, чем она объявлена. Компилятор разрешает ссылки во всей содержащей её области видимости.

using System;

public class Program
{
    public static void Main()
    {
        Console.WriteLine(Greet("Ada")); // used before declared

        string Greet(string name) => "Hello, " + name;
    }
}

Параметры и возвращаемые типы

Локальные функции поддерживают всё, что и обычные методы: несколько параметров, возвращаемые значения, параметры ref и out, а также обобщения.

using System;

public class Program
{
    public static void Main()
    {
        bool TryHalve(int n, out int half)
        {
            half = n / 2;
            return n % 2 == 0;
        }

        if (TryHalve(10, out int result))
            Console.WriteLine("half is " + result);
    }
}

Обобщённые локальные функции

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

using System;

public class Program
{
    public static void Main()
    {
        T Echo<T>(T value)
        {
            Console.WriteLine("echoing " + value);
            return value;
        }

        int n = Echo(42);
        string s = Echo("hi");
        Console.WriteLine(n + " " + s);
    }
}

Вложенные локальные функции

Локальные функции сами могут содержать локальные функции. Вложенные функции видны только внутри родительской функции, что позволяет создавать вспомогательные уровни с узкой областью видимости.

using System;

public class Program
{
    public static void Main()
    {
        int Compute(int x)
        {
            int Double(int n) => n * 2;
            int AddOne(int n) => n + 1;
            return Double(AddOne(x));
        }

        Console.WriteLine(Compute(5));
    }
}

Локальные функции для проверки аргументов

Распространённый шаблон: сразу проверить аргументы, а затем передать основную работу локальной функции. Это особенно полезно для итераторов, чтобы проверка выполнялась немедленно.

using System;
using System.Collections.Generic;

public class Program
{
    static IEnumerable<int> Range(int start, int count)
    {
        if (count < 0) throw new ArgumentOutOfRangeException(nameof(count));
        return Iterate();

        IEnumerable<int> Iterate()
        {
            for (int i = 0; i < count; i++) yield return start + i;
        }
    }

    public static void Main()
    {
        foreach (var n in Range(10, 3)) Console.WriteLine(n);
    }
}

Когда использовать локальные функции

Используйте локальную функцию, когда вспомогательная функция нужна ровно одному методу, выигрывает от описательного имени или должна обращаться к локальному состоянию метода. Это сохраняет класс чистым, а логику — легко обнаруживаемой.

using System;

public class Program
{
    public static void Main()
    {
        int total = 0;
        void Add(int n) => total += n; // helper tied to this method
        Add(3); Add(4); Add(5);
        Console.WriteLine(total);
    }
}

Быстрая проверка

Вспомните, что такое локальная функция.

Повторение

Локальные функции — это именованные вспомогательные функции, вложенные в метод.

  • Они видны только в содержащем их члене.
  • Поддерживают параметры, возвращаемые значения, out/ref, обобщения и рекурсию.
  • На них можно ссылаться до объявления.
  • Они отлично подходят для одноразовых вспомогательных функций и немедленной проверки аргументов в итераторах.

Часто задаваемые вопросы

Урок «Объявление локальных функций» бесплатный?

Да — полный текст урока «Объявление локальных функций» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс C# Academy, подпишись на CoddyKit PRO. Курс C# Academy содержит 4 уроков всего.

Чему я научусь в уроке «Объявление локальных функций»?

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

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

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

Сколько времени занимает урок «Объявление локальных функций»?

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

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

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

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

  1. Объявление локальных функций
  2. Замыкания и захваченные переменные
  3. Статические локальные функции
  4. Локальные функции и лямбда-выражения
← Назад к C# Academy