---

name: Оператор Элвис
theory: |

  Вообразим задачу: на сайте у пользователей могут быть имена и псевдонимы. Имя не обязательно, но если оно есть, то нужно обращаться к человеку по имени, а если нет, то по псевдониму.

  Попробуем собрать строку с приветствием человека по этим требованиям:

  ```php
  <?php

  function generateGreeting($name, $nickname)
  {
      if ($name) {
          return "Hello, {$name}!";
      } else {
          return "Hello, {$nickname}!";
      }
  }

  generateGreeting('Bob', 'CoolBob86'); // 'Hello, Bob!'
  generateGreeting('', 'CoolBob86');    // 'Hello, CoolBob86!'
  ```

  Мы воспользовались тем фактом, что PHP преобразовывает типы. В коде `if ($name)` PHP превратит `$name` в тип `bool` — если была пустая строка, то получится `false`, в ином случае получится `true`.

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

  ```php
  <?php

  function generateGreeting($name, $nickname)
  {
      return $name ? "Hello, {$name}!" : "Hello, {$nickname}!";
  }
  ```

  Это частый случай: мы оперируем значениями `bool` и получаем первое значение если, оно `true`, и второе в ином случае.

  В PHP для таких случаев есть специальный оператор:

  ```php
  <?php

  function generateGreeting($name, $nickname)
  {
      $user = $name ?: $nickname;
      return "Hello, {$user}!";
  }
  ```

  **`?:` — бинарный оператор, который возвращает первый операнд если он истинен, и второй в ином случае.**

  Его называют Elvis, потому что:

  ![Элвис оператор](https://i.imgur.com/eoLgBHN.png)

  А ещё слово Elvis напоминает "else if".

instructions: |

  Напишите функцию `generateAmount()`, которая принимает два числа: количество товаров и стоимость аудита. Если товаров 0, то функция возвращает стоимость аудита, умноженную на 3. Если товаров не 0, то функция возвращает количество товаров.

  Примеры вызова:

  ```php
  <?php

  generateAmount(0, 2);   // 6
  generateAmount(0, 5);   // 15
  generateAmount(1, 2);   // 1
  generateAmount(12, 49); // 12
  ```

definitions:
  - name: "Оператор Элвис"
    description: "выражение, возвращающее первый операнд если он true, и второй в ином случае. Например, `$name ?: $nickname;`."

tips:
  - |
    [elvis](https://php.net/manual/ru/language.operators.comparison.php#language.operators.comparison.ternary)
