<rmcreative>

RSS

switch(true)

5 апреля 2019

Не так часто встречаю использование switch(true) в коде:

switch(true)
{
  case $this->isExpired($product):
    // ...
    break;
  case $this->isFinal($product):
    // ...
    break;
  default:
    // ...
    break;
}

Это эквивалент следующего:

if ($this->isExpired($product)) {
    // ...
} elseif ($this->isFinal($product)) {
    // ...
} else {
    // ...
}

Какой из вариантов вам приятней читать?

Комментарии RSS

  1. №11457
    Мимокрокодил
    Мимокрокодил 05 апр. 2019 г., 1:22:26

    Третий.

    switch ($this->getState())
    {
      case self::STATE_EXPIRED:
        // ...
        break;
      case self::STATE_FINAL:
        // ...
        break;
      default:
        // ...
    }
  2. №11458
    Павел
    Павел 05 апр. 2019 г., 3:03:18

    Свич-тру нормальная штука, но в пхп вербозная, много текста писать. В качестве хорошего примера котлин - там when и все. Без брейков, без (true).

  3. №11459
    scorp13
    scorp13 05 апр. 2019 г., 9:57:02

    Пользуюсь частенько, читается норм.

  4. №11461
    Сергей
    Сергей 05 апр. 2019 г., 11:32:22

    Если только ради fallthrough, но редко.

  5. №11462
    Владимир
    Владимир 05 апр. 2019 г., 11:39:47

    Мне больше второй вариант по душе, switch(true) как-то попахивает...

  6. №11463
    Ганджоба Двенадцатый
    Ганджоба Двенадцатый 05 апр. 2019 г., 12:38:42

    Конструкция switch(true) вообще похожа на антипаттерн. Используется не по целевому аудиторию.

  7. №11464
    ldar
    ldar 05 апр. 2019 г., 19:25:15

    Ганджоба Двенадцатый, почему не по целевому? Всегда использую первый метода, читабельность на много выше и проще расширять.

  8. №11465
    Lebnik
    Lebnik 05 апр. 2019 г., 20:44:07

    Конструкция switch делает неявное приведение типов, а посему ее стоит избегать.

  9. №11467
    Дмитрий
    Дмитрий 06 апр. 2019 г., 12:34:04

    Стараюсь всегда избегать switch. По моему мнению код с if читается гораздо легче.

  10. №11468
    Тимурик
    Тимурик 06 апр. 2019 г., 14:12:57

    Привет! Зависит от ситуации. Switch непривычен и есть чувство что он для этого. If-elseif не люблю, т.к. приходится помнить про другие условия и else. Чаще делаю так:

    if (condition1) {
          ...
          return;
     }
     
     if (condition2) {
          ...
          return;
     }
  11. №11469
    Тимурик
    Тимурик 06 апр. 2019 г., 14:14:24

    *...не для этого

  12. №11471
    MT
    MT 06 апр. 2019 г., 23:51:33

    Тимурик: +1.

  13. №11472
    Паша
    Паша 07 апр. 2019 г., 10:07:09

    Второй

  14. №11474
    Александр
    Александр 09 апр. 2019 г., 0:01:27

    Второй вариант выглядит чище для чтения. Первый вариант похож на код-хак - монструозное использование switch в этом контексте.

  1. Почта опубликована не будет.

  2. Можно использовать синтаксис Markdown или HTML.

  3. Введите ответ в поле. Щёлкните, чтобы получить другую задачу.