Что такое функция в программировании?

Ответ

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

Основные цели использования функций:

  • Устранение дублирования кода (DRY).
  • Структурирование и модульность программы.
  • Упрощение чтения, тестирования и поддержки кода.

Синтаксис функции в C#:

// 1. Объявление функции (метода)
// [модификаторы] возвращаемый_тип ИмяФункции([параметры])
public static int CalculateSum(int a, int b) // Сигнатура функции
{
    // Тело функции
    int sum = a + b;
    return sum; // Оператор return передаёт результат вызывающему коду
}

// 2. Вызов функции
int result = CalculateSum(5, 3); // result = 8
Console.WriteLine(CalculateSum(10, 20)); // Выведет 30

Разновидности функций в C#:

  1. Методы экземпляра: Привязаны к конкретному объекту класса.

    public class Calculator
    {
        public int Add(int a, int b) => a + b;
    }
    var calc = new Calculator();
    calc.Add(2, 2); // Вызов метода экземпляра
  2. Статические методы: Принадлежат типу (классу), а не объекту.

    public static class MathHelper
    {
        public static int Multiply(int x, int y) => x * y;
    }
    MathHelper.Multiply(3, 4); // Вызов статического метода
  3. Локальные функции (C# 7.0+): Функции, объявленные внутри другого метода.

    public void ProcessData()
    {
        int localVariable = 10;
        // Локальная функция имеет доступ к переменным внешнего метода
        int Square(int number) => number * number;
        Console.WriteLine(Square(localVariable)); // 100
    }
  4. Лямбда-выражения: Анонимные функции, записанные в краткой форме.

    Func<int, int, int> adder = (x, y) => x + y;
    int sum = adder(7, 8); // sum = 15

Ключевые принципы: Функция должна быть маленькой и делать одно дело (Single Responsibility Principle).

Ответ 18+ 🔞

А, функции в C#! Ну это ж как мой сосед дядя Вася — вроде один, а разновидностей дохуя. Сейчас разложу по полочкам, чтобы понятно было даже тому, кто в программировании только чайник заваривать умеет.

Смотри, функция — это такой именованный кусок кода, который можно вызывать сто раз, а писать один. Как жена, которая одно и то же по десять раз на день повторяет, только полезнее. Основная фишка — чтобы не копипастить одно и то же по всей программе, а собрал в одном месте и юзаешь.

Вот смотри, как это выглядит в коде:

// Объявляем функцию — типа даём ей имя и прописываем, что она делает
public static int СложитьДваЧисла(int первое, int второе)
{
    int результат = первое + второе;
    return результат; // Возвращаем результат, как будто говорим "на, держи"
}

// А вот как её вызываем
int что_получилось = СложитьДваЧисла(5, 3); // что_получилось = 8
Console.WriteLine(СложитьДваЧисла(10, 20)); // Выведет 30

Теперь про разновидности, их тут как тараканов на старой кухне:

  1. Методы экземпляра — привязаны к конкретному объекту. Как личная зубная щётка — у каждого своя.

    public class Калькулятор
    {
    public int Прибавить(int a, int b) => a + b;
    }
    var мойКалькулятор = new Калькулятор();
    мойКалькулятор.Прибавить(2, 2); // Вызываем у конкретного объекта
  2. Статические методы — они как общий туалет в подъезде, принадлежат всем, а не кому-то одному. Вызываются через имя класса.

    public static class Математичка
    {
    public static int Умножить(int x, int y) => x * y;
    }
    Математичка.Умножить(3, 4); // Вызываем прямо через класс
  3. Локальные функции (C# 7.0+) — это когда функция внутри функции, как матрёшка. Видит всё, что происходит во внешней функции, что иногда очень удобно.

    public void ОбработатьДанные()
    {
    int локальнаяПеременная = 10;
    // Локальная функция — как тайный агент внутри метода
    int ВозвестиВКвадрат(int число) => число * число;
    Console.WriteLine(ВозвестиВКвадрат(локальнаяПеременная)); // 100
    }
  4. Лямбда-выражения — анонимные функции, короткие и без пафоса. Как сказать "передай соль" вместо "будь так любезен, передай, пожалуйста, солонку".

    Func<int, int, int> сложить = (x, y) => x + y;
    int сумма = сложить(7, 8); // сумма = 15

И главное правило, блядь — функция должна делать что-то одно и делать это хорошо. Не пытайся впихнуть в одну функцию всё, от сложения чисел до отправки email и заказа пиццы. Получится пиздец, а не код. Маленькая, конкретная, понятная — вот идеал. Как хорошая водка: один компонент, одна задача, один результат.