Как использовать оператор Case / Switch в Ruby

В большинстве компьютерные языки, случай или условный (также известный как переключатель) оператор сравнивает значение переменной со значением нескольких констант или литералов и выполняет первый путь с соответствующим регистром. В РубинЭто немного более гибкий (и мощный).

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

Есть некоторые отличия от других языков. В Соператор switch является своего рода заменой для ряда если и идти заявления. Случаи технически обозначены, а сменить заявление перейдем к соответствующей метке. Это демонстрирует поведение, называемое «падением», поскольку выполнение не останавливается, когда оно достигает другой метки.

Этого обычно избегают с помощью оператора break, но иногда это происходит намеренно. Заявление case в Ruby, с другой стороны, можно рассматривать как сокращение для серии если заявления. Происшествия нет, будет выполнен только первый соответствующий случай.

Основная форма описания дела

instagram viewer

Основная форма описания случая заключается в следующем.

Как видите, это структурировано что-то вроде условного оператора if / else if / else. Имя (которое мы будем называть значение), в этом случае вводится с клавиатуры, сравнивается с каждым из случаев из когда пункты (т.е. случаи), и будет выполнен первый блок блока с соответствующим регистром. Если ни один из них не совпадает, еще блок будет выполнен.

Что здесь интересного как значение сравнивается с каждым из случаев. Как уже упоминалось выше, в C ++и другие C-подобные языки, используется простое сравнение значений. В Ruby используется оператор равенства случая.

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

Если бы мы были на входе бобРуби сначала оценит "Алиса" "Боб"что было бы ложным, так как Строка # определяется как сравнение строк. Следующий, /[qrz].+/i "Боб" будет выполнен, что является ложным, так как боб не начинается с Q, R или Z.

Поскольку ни один из случаев не соответствует, Ruby выполнит предложение else.

Как тип входит в игру

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

Это работает с помощью Учебный класс# (технически, Модуль #) оператор, который проверяет правую часть это? левая сторона.

Синтаксис простой и элегантный:

Другая возможная форма

Если значение Опущен, оператор case работает немного иначе: он работает почти так же, как оператор if / else if / else. Преимущества использования оператора case передесли Заявления, в данном случае, носят чисто косметический характер.

Более компактный синтаксис

Есть моменты, когда есть большое количество маленьких когда статьи. Такое описание случая легко становится слишком большим, чтобы поместиться на экране. Когда это так (без каламбура), вы можете использовать тогда Ключевое слово, чтобы положить тело когда пункт на той же строке.

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

Когда вы должны использовать однострочный и многострочный, когда предложения до вас, это вопрос стиля. Однако смешивать их не рекомендуется - оператор case должен следовать шаблону, чтобы он был как можно более читабельным.

Назначение дела

Как и в случае с утверждениями if, утверждения case относятся к последнему утверждению в когда пункт. Другими словами, они могут использоваться в назначениях для предоставления своего рода таблицы. Тем не менее, не забывайте, что операторы case намного более эффективны, чем простые массивы или поиск хешей. Такая таблица не обязательно должна использовать литералы в когда статьи.

Если нет совпадения с предложением when и с предложением else, тогда оператор case оценивается как ноль.

instagram story viewer