Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

Документы

Медиа

Назад
Вопрос про JavaScript: default arguments, dependency injection, optional parameters, configuration, function parameters

Какие есть альтернативы передаче дефолтных значений аргументов (например, через DI/Depends)?

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

Короткий ответ

Помимо передачи через DI (Dependency Injection) или Depends, значения по умолчанию можно задавать непосредственно в сигнатуре функции, используя параметры по умолчанию. Также можно использовать конфигурационные объекты или словари, которые объединяются с дефолтными значениями. Ещё один подход — фабричные функции или билдеры, которые создают объекты с предустановленными параметрами. В некоторых фреймворках применяется паттерн Service Locator для разрешения зависимостей.

Длинный ответ

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

Основные альтернативы

  • Параметры по умолчанию в сигнатуре функции: Прямое указание значения при объявлении параметра.
  • Конфигурационные объекты/словари: Передача одного объекта, содержащего все настройки, с последующим слиянием с дефолтными значениями.
  • Фабричные функции или билдеры: Отдельные функции, которые создают экземпляры с предустановленными параметрами.
  • Паттерн Service Locator: Глобальный или контекстный реестр, из которого извлекаются зависимости по имени или типу.
  • Использование каррирования или частичного применения функции: Создание новой функции с "зафиксированными" частью аргументов.

Примеры кода

Рассмотрим несколько подходов на примере Python.

# 1. Параметры по умолчанию
def connect_to_db(host='localhost', port=5432):
    print(f'Connecting to {host}:{port}')

# 2. Конфигурационный словарь с дефолтами
def process_data(config):
    defaults = {'timeout': 30, 'retries': 3}
    final_config = {**defaults, **config}  # Слияние
    print(final_config)

# 3. Фабричная функция
def create_logger(level='INFO'):
    # ... настройка логгера
    def logger(message):
        print(f'[{level}] {message}')
    return logger

info_log = create_logger()  # Использует уровень 'INFO' по умолчанию

# 4. Частичное применение (functools.partial)
from functools import partial

def send_email(to, subject, body):
    print(f'Sending to {to}: {subject}')

send_to_admin = partial(send_email, to='admin@site.com')
send_to_admin(subject='Alert', body='Something happened.')

Эти подходы применяются в разных контекстах. Параметры по умолчанию хороши для простых случаев. Конфигурационные объекты — для сложных настроек с множеством опций. Фабрики и частичное применение помогают создавать специализированные версии функций. Service Locator часто встречается в крупных фреймворках для управления зависимостями.

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

Уровень

  • Рейтинг:

    3

  • Сложность:

    4

Навыки

  • JavaScript

    JavaScript

  • Python

    Python

Ключевые слова

#default arguments

#dependency injection

#optional parameters

#configuration

#function parameters

Подпишись на Python Developer в телеграм