← Назад к вопросам

Приведи пример функции

1.6 Junior🔥 111 комментариев
#Основы C# и .NET

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI6 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Пример функции на C#: CalculateDiscountedPrice

Классическим примером, демонстрирующим ключевые аспекты функций в C#, является метод расчета цены со скидкой. Рассмотрим его реализацию:

public static decimal CalculateDiscountedPrice(
    decimal originalPrice, 
    decimal discountPercentage, 
    bool isTaxIncluded = false,
    decimal taxRate = 20m)
{
    // Валидация входных параметров
    if (originalPrice < 0)
        throw new ArgumentException("Цена не может быть отрицательной", nameof(originalPrice));
    
    if (discountPercentage < 0 || discountPercentage > 100)
        throw new ArgumentException("Скидка должна быть в диапазоне 0-100%", nameof(discountPercentage));
    
    if (taxRate < 0)
        throw new ArgumentException("Налоговая ставка не может быть отрицательной", nameof(taxRate));
    
    // Расчет скидки
    decimal discountAmount = originalPrice * (discountPercentage / 100);
    decimal priceAfterDiscount = originalPrice - discountAmount;
    
    // Учет налога в зависимости от флага
    decimal finalPrice;
    if (isTaxIncluded)
    {
        // Если налог уже включен, пересчитываем без его учета
        decimal priceWithoutTax = priceAfterDiscount / (1 + taxRate / 100);
        finalPrice = priceWithoutTax;
    }
    else
    {
        // Если налог не включен, добавляем его
        decimal taxAmount = priceAfterDiscount * (taxRate / 100);
        finalPrice = priceAfterDiscount + taxAmount;
    }
    
    // Округление до 2 знаков после запятой
    return Math.Round(finalPrice, 2, MidpointRounding.AwayFromZero);
}

Ключевые элементы функции

1. Сигнатура метода

  • public — модификатор доступа, делает функцию доступной из других классов
  • static — означает, что метод принадлежит классу, а не экземпляру
  • decimal — тип возвращаемого значения (точный тип для финансовых расчетов)
  • Имя метода — CalculateDiscountedPrice (выражает назначение функции)

2. Параметры функции

// Обязательные параметры
decimal originalPrice, 
decimal discountPercentage, 

// Необязательные параметры со значениями по умолчанию
bool isTaxIncluded = false,
decimal taxRate = 20m

3. Пример использования

class Program
{
    static void Main(string[] args)
    {
        try
        {
            // Пример 1: Расчет с базовыми параметрами
            decimal price1 = CalculateDiscountedPrice(1000m, 15m);
            Console.WriteLine($"Цена со скидкой 15%: {price1:C}");
            
            // Пример 2: С указанием всех параметров
            decimal price2 = CalculateDiscountedPrice(
                originalPrice: 1500m, 
                discountPercentage: 20m, 
                isTaxIncluded: true, 
                taxRate: 18m);
            Console.WriteLine($"Цена с налогом включенным: {price2:C}");
            
            // Пример 3: Использование именованных аргументов
            decimal price3 = CalculateDiscountedPrice(
                discountPercentage: 10m,
                originalPrice: 2000m);
            Console.WriteLine($"Цена со скидкой 10%: {price3:C}");
        }
        catch (ArgumentException ex)
        {
            Console.WriteLine($"Ошибка: {ex.Message}");
        }
    }
}

4. Важные аспекты реализации

Валидация параметров

Функция включает проверку входных данных — это обязательная практика для production-кода:

  • Проверка отрицательных значений
  • Валидация диапазонов (скидка 0-100%)
  • Использование исключений для индикации ошибок

Финансовые вычисления

  • Использование типа decimal вместо float или double для точности
  • Правильное округление с указанием стратегии (MidpointRounding.AwayFromZero)
  • Четкая логика учета налога (включен/не включен)

Гибкость через параметры по умолчанию

Необязательные параметры делают функцию более универсальной:

  • Можно использовать стандартную налоговую ставку
  • Можно явно указать все параметры для специфических случаев

Альтернативная реализация с кортежами

Для более сложных сценариев можно возвращать несколько значений:

public static (decimal discountedPrice, decimal discountAmount, decimal taxAmount) 
    CalculateDetailedPrice(decimal originalPrice, decimal discountPercentage, decimal taxRate)
{
    decimal discountAmount = originalPrice * (discountPercentage / 100);
    decimal priceAfterDiscount = originalPrice - discountAmount;
    decimal taxAmount = priceAfterDiscount * (taxRate / 100);
    decimal finalPrice = priceAfterDiscount + taxAmount;
    
    return (
        Math.Round(finalPrice, 2),
        Math.Round(discountAmount, 2),
        Math.Round(taxAmount, 2)
    );
}

Принципы качественной функции

  1. Единая ответственность — функция делает одну четко определенную задачу
  2. Читаемость — понятное имя и логичная структура
  3. Надежность — обработка граничных случаев и ошибок
  4. Тестируемость — детерминированность и отсутствие скрытых зависимостей
  5. Документированность (в примере — через XML-комментарии в реальном коде)

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

Приведи пример функции | PrepBro