---

name: Тернарный оператор
theory: |

  Посмотрите на определение функции, которая возвращает модуль переданного числа:

  ```php
  <?php

  function abs($number)
  {
      if ($number >= 0) {
          return $number;
      }

      return -$number;
  }

  abs(10);  // 10
  abs(-10); // 10
  ```

  Можно ли записать её лаконичнее? Что-то вроде `return ОТВЕТ В ЗАВИСИМОСТИ ОТ УСЛОВИЯ`? Для этого справа от return должно быть выражение, но `if` — это инструкция, а не выражение.

  В PHP существует конструкция, которая по своему действию аналогична конструкции *if-else*, но при этом является выражением. Она называется **тернарный оператор**.

  Тернарный оператор — единственный в своем роде оператор, требующий три операнда:

  ```php
  <?php

  function abs($number)
  {
      return $number >= 0 ? $number : -$number;
  }
  ```

  Общий паттерн выглядит так: `<predicate> ? <expression on true> : <expression on false>`.

  Давайте перепишем начальный вариант `getTypeOfSentence()` аналогично:

  Было:

  ```php
  <?php

  function getTypeOfSentence($sentence)
  {
      $lastChar = substr($sentence, -1);

      if ($lastChar === '?') {
          return 'question';
      }

      return 'normal';
  }
  ```

  Стало:

  ```php
  <?php

  function getTypeOfSentence($sentence)
  {
      $lastChar = substr($sentence, -1);

      return ($lastChar === '?') ? 'question' : 'normal';
  }

  getTypeOfSentence('Hodor');  // normal
  getTypeOfSentence('Hodor?'); // question
  ```

  ---

  Если вы помните, в чём сила выражений, то вероятно уже догадались, что тернарный оператор можно вкладывать в тернарный оператор. **Не делайте этого :)** Такой код тяжело и читать, и отлаживать, это очень плохая практика.

instructions: |

  Реализуйте функцию `flipFlop()`, которая принимает на вход строку и, если эта строка равна `'flip'`, возвращает строку `'flop'`. В противном случае функция должна вернуть `'flip'`.

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

  ```php
  <?php

  flipFlop('flip'); // 'flop'
  flipFlop('flop'); // 'flip'
  ```

  Попробуйте написать два варианта функции: с обычным if-else, и с тернарным оператором.

tips: []

definitions:
  - name: Тернарный оператор
    description: |
      способ превратить простую условную инструкцию в выражение, например, `$number >= 0 ? $number : -$number`.
