# Языки программирования

В этой книге описываются общие определения, методология и подходы в языках программирования.

# Основные определения

## Аргументы и параметры

### Параметр

<p class="callout info">**Параметр** — это **переменная в объявлении функции**.</p>

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

- **Что это?** Переменная в объявлении функции.
- **Когда определяется?** Во время написания кода функции.
- **Аналог из жизни:** "Реквизит" в заявке на документ. В форме заявления написано: `ФИО: ________`, `Дата рождения: ________`. Это параметры — они определяют, какая информация *нужна*, но сами по себе не содержат значений.

**Пример (Python):**

```python
# Здесь 'name' и 'age' — это ПАРАМЕТРЫ
def greet(name, age):
    print(f"Привет, {name}! Тебе {age} лет.")
```

### Аргумент

<p class="callout info">**Аргумент** — это **конкретное значение, которое передается в функцию** при ее вызове.</p>

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

- **Что это?** Конкретное значение, переданное в функцию.
- **Когда определяется?** В момент вызова функции.
- **Аналог из жизни:** Конкретные данные, которые вы вписываете в ту самую заявку: `ФИО: Иванов Иван`, `Дата рождения: 15.03.1990`. Это аргументы — фактические значения.

**Пример (Python):**

```python
# Здесь 'Анна' и 25 — это АРГУМЕНТЫ
greet('Анна', 25)
```

### Сводная таблица различий

<div class="ds-scroll-area _1210dd7 c03cafe9" id="bkmrk-%D0%9A%D1%80%D0%B8%D1%82%D0%B5%D1%80%D0%B8%D0%B9-%D0%9F%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80-%28p"><div class="ds-scroll-area__gutters" style="position: sticky; top: 0px; left: 0px; right: 0px; height: 0px; --container-height: 330px;"><div class="ds-scroll-area__horizontal-gutter" style="left: 0px; right: 0px; top: calc(var(--container-height) - 14px); height: 10px;">  
</div><div class="ds-scroll-area__vertical-gutter" style="right: 0px; top: 8px; bottom: calc(0px - var(--container-height) + 8px); width: 10px;">  
</div></div><table><thead><tr><th>Критерий</th><th>Параметр (Parameter)</th><th>Аргумент (Argument)</th></tr></thead><tbody><tr><td>**Что представляет**</td><td>Переменная в объявлении функции</td><td>Фактическое значение, переданное в функцию</td></tr><tr><td>**Контекст**</td><td>Объявление функции</td><td>Вызов функции</td></tr><tr><td>**Также известен как**</td><td>Формальный параметр (formal parameter)</td><td>Фактический параметр (actual parameter) или фактический аргумент</td></tr><tr><td>**Существование**</td><td>Существует только внутри функции</td><td>Может быть переменной или литералом из внешней области видимости</td></tr></tbody></table>

</div>### Дополнительные нюансы

#### Типы аргументов

Когда вы передаете аргументы, они могут быть разных типов:

- **Позиционные аргументы (Positional arguments):** Передаются в том порядке, в котором объявлены параметры.
    
    ```python
    greet('Анна', 25)  # 'Анна' идет для параметра `name`, 25 — для `age`
    ```
- **Именованные аргументы (Keyword arguments):** Передаются с указанием имени параметра. Порядок не важен.
    
    ```python
    greet(age=25, name='Анна')  # Порядок изменен, но результат тот же
    ```
- **Аргумент по умолчанию (Default argument):** Параметр, которому в объявлении функции присвоено значение по умолчанию. Если соответствующий аргумент не передан, используется значение по умолчанию.
    
    ```python
    # Параметр 'age' имеет значение по умолчанию 18
    def greet(name, age=18):
        print(f"Привет, {name}! Тебе {age} лет.")
    
    greet('Максим')  # Вызовет: "Привет, Максим! Тебе 18 лет."
    greet('Мария', 30) # Вызовет: "Привет, Мария! Тебе 30 лет."
    ```

#### Контекст имеет значение

Одно и то же слово в разных контекстах может быть и параметром, и аргументом.

```python
# 1. ОБЪЯВЛЕНИЕ ФУНКЦИИ
# x и y — это ПАРАМЕТРЫ
def multiply(x, y):
    return x * y

a = 5
b = 10

# 2. ВЫЗОВ ФУНКЦИИ
# a и b — это АРГУМЕНТЫ
result = multiply(a, b)

# 3. ВНУТРИ ФУНКЦИИ 'multiply' во время ее выполнения:
# Параметр x получает значение аргумента a (5)
# Параметр y получает значение аргумента b (10)
# Функция работает с числами 5 и 10.
```

### Заключение

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

**Простая мнемоника:**

> **П**араметр — **П**олучатель (в объявлении).  
> **А**ргумент — **А**ктуальное значение (при вызове).

## Опция

**Опция** — это модификатор команды или функции, который *меняет ее поведение*. Часто она просто включает или выключает какой-то режим.

- **Аналогия:** Представьте, что вы заказываете кофе. Вы говорите: "С сахаром" или "Без кофеина". Слова "с" и "без" — это опции, которые меняют стандартное приготовление кофе.
- **В программировании/CLI:** Опции обычно начинаются с дефиса (`-`) или двойного дефиса (`--`).
    
    
    - Короткие опции: `-l`, `-h`, `-v`
    - Длинные опции: `--help`, `--version`, `--all`
- **Ключевая особенность:** Опция может не требовать дополнительного значения. Она просто "включена".

**Примеры:**

```bash
# Опция '-l' меняет вывод команды ls на подробный список
ls -l

# Опция '--help' выводит справку, а не выполняет основное действие
program --help
```