Оператор if в руби
Оператор if (англ. если) используется в руби для ветвления.
Ветвление — конструкция, которая управляет ходом выполнения программы. В зависимости от того, выполнено условие или нет, программа выполняет разные последовательности действий (разные «ветви»).
Ветвление в большинстве языков программирования делают с помощью условного оператора. В руби они, конечно, тоже есть. Один из них — if . Работает он как-то так:
if условие действие1 действие2 . end
Если условие после if выполнено, то выполняются действие1, действие2 и т.д. Если не выполнено — то не выполняются.
if и сравнение чисел
В качестве условия в руби используются выражения, которые руби проверяет на истинность.
Если условие возвращает true (истина), значит, оно выполнено, если false (ложь) — нет. Эти значения называются логическим или булевым (англ. Boolean) типом данных.
Для записи условия можно использовать, например, числа и операторы сравнения == (равно-равно), > (больше) , < (меньше), >= (больше или равно),
Давайте, например, напишем код, который проверяет человека на совершеннолетие:
puts "Сколько вам лет?" age = gets.to_i if age >= 18 puts "Вам уже всё можно" end if age < 18 puts "Вам ещё пока рановато!" end
Если в переменной age окажется число, которое больше или равно 18 (например, 40) то такая программа напишет:
Вам уже всё можно
А если там будет число, которое меньше 18 (например, 16), то программа напишет:
Вам ещё пока рановато!
if и сравнение строк
Сравнивать можно не только цифры друг с другом, но и, например, строки.
Оператор «равно-равно» сравнивает строки (или числа) справа и слева от себя и если они равны, возвращает true , а если нет — false .
puts "Кто является создателем языка программирования Ruby?" author = gets.chomp if author == "Юкихиро Мацумото" puts "Вы совершенно правы!" end if author == "Билл Гейтс" puts "Вы не правы!" end
Но все варианты (типа “Билл Гейтс” и т.д.) не переберешь, поэтому придумали оператор «не равно».
Если в операторе сравнения вместо первого равно поставить оператор ! то получится оператор неравенства, который будет возвращать true если операнды не равны друг другу.
puts "Кто является создателем языка программирования Ruby?" author = gets.chomp if author != "Юкихиро Мацумото" puts "Вы ошиблись!" end
Логический оператор И
Условие после if можно объединять, чтобы сразу проверить несколько условий.
Например, если объединить два условия с помощью оператора && (логическое И ), результат выражения будет true если оба условия выполнены (вернули true ). Если хотя бы одно из условие не выполнено, результат выражения будет false .
puts "Сколько вам лет?" your_age = gets.to_i puts "Сколько лет другу/подруге?" friend_age = gets.to_i if your_age >= 18 && friend_age >= 18 puts "Вы оба совершеннолетние" end
Если хотя бы одно из значений будет меньше 18, то код внутри if не будет выполнен.
Логический оператор ИЛИ
Если нам надо, чтобы было выполнено хотя бы одно из условий, подойдет оператор || (логическое ИЛИ ).
Результат выражения будет true если хоть одно из условий выполняется. А false будет только если оба условия (справа и слева от || ) не выполнены.
puts "Сколько вам лет?" your_age = gets.to_i puts "Сколько лет другу/подруге?" friend_age = gets.to_i if your_age >= 18 || friend_age >= 18 puts "Кто то из вас точно совершеннолетний" end
Если хотя бы одно из значений будет больше или равно 18, то код внутри if выполнится.
Логическое отрицание
Представим теперь, что нам нужно проверить, что какое-то условие не выполнено. Тут нам поможет оператор отрицания, который в руби записывается как восклицательный знак ! (логическое НЕ ).
Его ставят перед условие, как бы добавляя к нему частицу «не». При подставлении перед чем-то, что раньше было true , результат нового выражения будет false . И наоборот, если выражение раньше возвращало false , то после отрицания оно будет принимать возвращать true .
puts "Сколько вам лет?" age = gets.to_i if !(age >= 18) puts "Вы не совершеннолетний" end
Условия в переменных
При большом количестве логических операций в выражении, которые делают условие слишком длинным, принято выносить условие в отдельную переменную:
puts "Сколько вам лет?" your_age = gets.to_i puts "Сколько лет другу/подруге?" first_friend_age = gets.to_i puts "Сколько лет другому другу/другой подруге?" second_friend_age = gets.to_i ages_comparison = your_age >= 18 && first_friend_age >= 18 && second_friend_age >= 18 if ages_comparison puts "Вы все совершеннолетние" end
Конструкция if-else
Если требуется выполнить какой-то другой код в случае, если условие не выполнено, используется конструкция if-else . Если условие будет принимать значение false , то будет выполнятся код, написанный внутри else :
puts "Сколько вам лет?" age = gets.to_i if age >= 18 puts "Вам уже всё можно" else puts "Вам ещё пока рановато!" end
Конструкция if-elsif-else
Можно пойти дальше и добавить ещё веток.
Допустим, нам надо сделать так: если выполнено одно условие, сделать одно действие, а если не выполнено, то проверить другое условие и если оно выполнено, сделать другое действие. Ну, а если не выполнены оба условия, сделать третье.
Тогда можно воспользоваться конструкцией if-elsif-else . После проверки первого условия, если оно false конструкция переходит к проверке условия после elsif .
puts "Выберите направление?" choice = gets.chomp if choice == "направо" puts "Жену найдёшь" elsif choice == "налево" puts "Богатство найдёшь" else puts "Сам пропадёшь" end
Оператор unless
Для выражений в которых требуется проверить ложность условия в руби принято вместо if !smth использовать выражение unless . Код будет выполняться, если условие будет false .
puts "Сколько вам лет?" age = gets.to_i unless age > 18 puts "Вам ещё пока рано" end
Однострочники с if / unless
При использовании операторов if / unless с одним действием (действием, которое умещается в одну строку) без использования else принято записывать сразу действие и if / else писать после действия.
В таком случае код похож на обычное предложение: «сделай что-то если условие выполнено.
puts "Сколько вам лет?" age = gets.to_i puts "Вам уже всё можно" if age >= 18 puts "Вам ещё пока рано" if age < 18
Удобно и наглядно.
Guard clause с однострочными if / unless *
Однострочные if и unless очень удобно использовать для охранных выражений (guard clause).
Если в методе сразу ясно, что нужно возвращаеть при выполнении какого-то условия, то можно написать как-то так:
def adult?(age, country) return false if age < 16 if country == 'ru' # Россия return age >= 18 elsif country == 'cu' # Куба return age >= 16 elsif country == 'kr' # Южная Корея return age >= 19 end end
Ни в одной стране (из перечисленных) человек не является совершеннолетним до 16 лет, поэтому сразу можно вернуть false если возраст меньше 16.
Это во-первых, наглядно, т.к. если того, кто читает код метода, интересует именно этот случай, он сразу поймет, что вернёт метод, а во-вторых, это позволяет сократить количество ненужных вычислений.
В ruby — всё true, кроме false (и nil) *
В отличие от других языков программирования, в руби все объекты (числа, строки, массивы и т.д.) вычисляются при подстановке в условные операторы как true (являются истиноподобными).
Это значит, что в условиях для if можно использовать любую переменную (число, строку и т.п.) и все они будут восприняты как true (условие будет выполнено).
a = 0 if a puts "Да, да! Не удивляйтесь!" end b = "Hello, World!" if b puts b end
В обоих случаях строка будет выведена на экран.
Только false и nil вычисляются как false и если их поставить после if , действие не будет выполнено. Код:
if nil puts "На нет и суда нет!" end
не выведет на экран ничего.
Пользуйтесь if с умом!
Изучаешь руби?
Заходи в дружелюбный чат, задавай вопросы, делись опытом.
Использование ключевых слов SOME (ANY) и ALL с предикатами сравнения
SOME и ANY являются синонимами, то есть может использоваться любое из них. Результатом подзапроса является один столбец величин. Если хотя бы для одного значения V, получаемого из подзапроса, результат операции " < оператор сравнения > V " равняется TRUE , то предикат ANY также равняется TRUE .
Исполняется так же, как и ANY , однако значение предиката ALL будет истинным, если для всех значений V, получаемых из подзапроса, предикат " V " дает TRUE .
Найти поставщиков компьютеров, моделей которых нет в продаже (то есть модели этих поставщиков отсутствуют в таблице PC)
Консоль
Выполнить
Оказалось, что только у поставщика Е есть модели, отсутствующие в продаже:
Рассмотрим подробно этот пример. Предикат
вернет значение TRUE , если модель, определяемая полем model основного запроса, найдется в списке моделей таблицы РС (возвращаемом подзапросом). Поскольку предикат используется в запросе с отрицанием NOT , то значение TRUE будет получено, если модели не окажется в списке. Этот предикат проверяется для каждой записи основного запроса, которыми являются все модели ПК (предикат type = 'pc') из таблицы Product. Результирующий набор состоит из одного столбца — имени производителя. Чтобы один производитель не выводился несколько раз (что может случиться, если он производит несколько моделей, отсутствующих в таблице РС), используется служебное слово DISTINCT , исключающее дубликаты.
Найти модели и цены портативных компьютеров, стоимость которых превышает стоимость любого ПК

Консоль
Выполнить
Приведем формальные правила оценки истинности предикатов, использующих параметры ANY|SOME и ALL.
- Если определен параметр ALL или SOME и все результаты сравнения значения выражения и каждого значения, полученного из подзапроса, являются TRUE, истинностное значение равно TRUE.
- Если результат выполнения подзапроса не содержит строк и определен параметр ALL, результат равен TRUE. Если же определен параметр SOME, результат равен FALSE.
- Если определен параметр ALL и результат сравнения значения выражения хотя бы с одним значением, полученным из подзапроса, является FALSE, истинностное значение равно FALSE.
- Если определен параметр SOME и хотя бы один результат сравнения значения выражения и значения, полученного из подзапроса, является TRUE, истинностное значение равно TRUE.
- Если определен параметр SOME и каждое сравнение значения выражения и значений, полученных из подзапроса, равно FALSE, истинностное значение тоже равно FALSE.
- В любом другом случае результат будет равен UNKNOWN .
Логические операторы
Сегодня тема тоже очень важная и одна из фундаментальных. А поговорим мы о.
Логические операторы
Че же это за чижи такие и в какое гнездо они уперлись, спросишь ты, а я тебе отвечу – без этих чижов в любом ЯП делать не фига.
Приготовься, т.к. их существует огромное множество, а если быть точным, то. 3 =) Всего три! Успокойся, чего напрягся)
Оператор || (ИЛИ)
Представляет из себя две палки колбасы и, если, его называть по-русски, читая код, то он читается как "ИЛИ". Он используется всегда с 2-мя операндами(аргументами), т.е. является бинарным.
Результат работы этого оператора – логическое значение true или false .
Если хотя бы один из операндов(аргументов) дает логическое true , то и все выражение в целом будет возвращать истину. Пример:
let a = false; let b = true; if (a || b) < alert('Я буду появляться всегда, т.к. один из аргументов возвращает логическое значение: true '); >else
Из примера понятно, что, если один из аргументов возвращает true , то все выражение в условии возвращает истину. Еще один пример:
let a = 1; let b = 0; if (a || b) < alert('Я буду появляться всегда, т.к. один из аргументов возвращает логическое значение: true '); >else
Здесь все отработает ровно так же. После приведения типов, переменная a выдаст значение true , а переменная b вернет значение false , но т.к., выполнилось правило и один из аргументов возвращает true , то это означает, что условие будет выполнено.
Чтобы условие с оператором || не выполнилось нужно, чтобы оба операнда(аргумента) возвращали false .
Более-менее жизненный пример. Представь, что у тебя есть форум, на котором у каждого пользователя есть возможность прикреплять файлы к сообщению. Но эта возможность доступна не каждому пользователю, а только при выполнении определенных условий: пользователю не меньше 21 года или он написал более 500 сообщений. Код:
let ageUser = 18; let countMsgs = 800; if ((ageUser >= 21) || (countMsgs > 500)) < alert('Вам разрешено прикреплять файлы к сообщению'); >else
Несмотря на то, что пользователю меньше 21 года условие выполнится, потому что он написал более 500 сообщений.
let ageUser = 18; let countMsgs = 120; if ((ageUser >= 21) || (countMsgs > 500)) < alert('Вам разрешено прикреплять файлы к сообщению'); >else
В этом случае условие не выполнится, потому что ни одно из условий внутри if не вернуло логическое значение true .
Оператор && (И)
Этот оператор более придирчивый чем || . Если оператору ИЛИ нужно хотя бы одно истинное значение, то оператор И не потерпит никаких false – все должны быть true и только так. Только когда все операнды возвращают значение true оператор && вернет true .
alert(true && false); //вернет: false alert(false && false); //вернет: false alert(false && true); //вернет: false alert(true && true); //вернет: true
Возьмем тот же пример с форумом и переделаем под оператор И. Получается, что условия задачи меняются на эти: чтобы пользователь мог прикреплять файлы к сообщению ему должно быть больше 21 года и он должен написать более 500 сообщений.
let ageUser = 18; let countMsgs = 600; if ((ageUser >= 21) && (countMsgs > 500)) < alert('Вам разрешено прикреплять файлы к сообщению'); >else
Здесь ты потерпишь фиаско, т.к., пользователю менее 21 года. Дальше JS даже второе условие проверять не будет, потому как первое уже зафейлилось и вернуло false .
Оператор ! (НЕ)
Этот оператор не похож на первые два, но также очень важен.
Оператор является унарным, т.е., применяется он только к одному операнду(аргументу). Ставится оператор всегда перед аргументом!
Все что делает оператор можно описать в 2-ух шагах:
- Приводит операнд(аргумент) к логическому значению (true/false);
- Возвращает логическое значение противоположное тому, что получил в шаге 1.
Сразу же простой пример:
alert(!true); //вернет: false alert(!false); //вернет: true alert(!'string'); //вернет: false alert(!0); //вернет: true alert(!8); //вернет: false
Надеюсь все понятно. Поэтому сразу же перейду ко второй способности этого оператора. Можно взять и поставить два знака !! перед аргументом. Что тогда произойдет? Не читай дальше, а подумай, основываясь на том, что ты уже прочитал про оператор. Итак. Барабанная дробь! А произойдет следующее:
- Первый знак ! приведет аргумент к логическому значению;
- Затем вернет противоположное логическое значение полученному в шаге 1 и на этом полномочия первого оператора НЕ - всё;
- Второй оператор НЕ проделает те же 2 шага и вторым шагом снова перевернет значению.
Какого лешего? Да. Тут все просто на самом деле. Это используют очень часто при преобразовании в логический тип, вместо функции Boolean(..) . Сам подумай, насколько проще написать так:
let str = 'string'; let a = !!str;
let str = 'string'; let a = Boolean(str);
В первом случае запись короче, а смысл абсолютно не меняется.
Домашняя работа
Задача:
Пользователю с помощью функции prompt предлагается ввести возраст.
Если возраст оказывается больше 18 лет, то с помощью еще одного prompt, нужно спросить как зовут пользователя.
Все эти данные нужно хранить в переменных.
Как только ты получишь от пользователя все эти данные, ты должен сделать следующие проверки: если пользователю больше 25 лет и его зовут Виталий, ты должен с помощью функции alert() вывести фразу "Привет Виталик, мы тебе рады!". В противном случае ты должен вывести ему фразу "Вы кто такие? Я вас не звал! Идите на ху. тор бабочек ловить!"
Какой из операторов вернет false если не выполнилось ни одно из условий

Операторы в программировании играют важную роль при принятии решений. Используя операторы, можно создавать условия, которые выполняются только при соблюдении определенных предпосылок. Есть множество операторов, которые возвращают значение false, если условие не выполнено. Это позволяет программисту определить, что делать в случае, если условие не соблюдается.
Один из наиболее распространенных операторов, возвращающих false при невыполнении условий, — это оператор сравнения. Например, оператор «==» сравнивает два значения и возвращает false, если они не равны. Это позволяет программисту проверить, соответствует ли одно значение другому, и выполнить определенные действия в зависимости от результата.
Еще одним оператором, возвращающим false при несоблюдении условий, является оператор «!=». Он сравнивает два значения и возвращает false, если они не равны между собой. Это позволяет программисту проверить, является ли одно значение отличным от другого, и, в зависимости от результата, выполнить определенные действия.
Кроме того, существует оператор «!==», который не только сравнивает значения, но и их типы. Он возвращает false, если значения не равны по значению и типу. Этот оператор позволяет программисту делать более точные проверки и принимать решения на основе этих результатов.
Операторы сравнения
В программировании операторы сравнения позволяют сравнивать значения различных переменных или выражений и возвращать результат в виде логического значения true или false.
Самыми часто используемыми операторами сравнения являются:
При использовании операторов сравнения следует обратить внимание на тип данных, так как некорректные сравнения могут привести к непредсказуемым результатам.
Условный оператор if
Условный оператор if возвращает значение false при невыполнении указанного условия. Он является основным оператором ветвления в языке программирования.
Синтаксис условного оператора if следующий:
// код, который выполнится, если условие истинно
Условие внутри круглых скобок может быть выражением, которое приводится к логическому типу boolean. Если условие истинно, то выполняется код внутри блока фигурных скобок. В случае, если условие ложно, то код внутри блока не выполняется и происходит переход к следующим операторам.
Пример использования условного оператора if:
int number = 5; if (number > 10)
System.out.println("Число больше 10");
>
System.out.println("Конец программы");
В данном примере число равно 5, поэтому условие number > 10 не выполнится. Выведется строка «Конец программы».
| Оператор | Описание |
|---|---|
| if | Условный оператор основной ветви. |
| else | Условный оператор альтернативной ветви, выполняется, если условие в if ложно. |
| else if | Условный оператор альтернативной ветви, выполняется, если условие внешнего if ложно, а условие else if истинно. |
Условный оператор if позволяет программисту контролировать выполнение кода в зависимости от определенных условий, что делает его важным инструментом в программировании.
Операторы логического И и ИЛИ
В языке программирования существуют операторы логического И и ИЛИ, которые позволяют комбинировать условия и выполнение определенных действий в зависимости от результата проверки.
Оператор логического И обозначается символом &&. Он возвращает true только в том случае, если оба операнда, к которым он применяется, являются true. Если хотя бы один из операндов равен false, то оператор логического И возвращает false.
В данном примере, если значение переменной a больше 0 и значение переменной b меньше 15, то будет выведено сообщение «Оба условия выполняются». В противном случае будет выведено сообщение «Одно из условий не выполняется».
Оператор логического ИЛИ обозначается символом
