Урок девятый: Условные выражения

Введение в Ruby [HEXLET]

Что рассказали в видео уроке

Условные выражения (предикат) — это выражения в ответ на которые мы получаем false или true.

Булевы данные — тип данных в языке программирования, которые возвращают значение истинно или ложно (false или true).

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

Логические операторы

|| — оператор ИЛИ

&& — оператор И

По средствам логических операторов обычно выстраивают программные проверки результатов или входящих данных. Мы можем проверять на соответствие, сравнивать или ставить условия при которых наша программа продолжит работу или остановится.

Более того, благодаря условным операторам мы можем программировать различные варианты работы программы, в зависимости от того какое значение нам вернулось false или true.

Интересный нюанс

В языке программирования Ruby значение false возвращается только от двух значений: false и nill. В отличии от языка программирование PHP, все значения возвращают нам true, даже ноль! даже пустая строка. (уточнение — в PHP ноль всегда возвращает false)

Практическое задание

На практическом задании было сложно сообразить. Я около двух часов ковырял свой мозг и гадал 🙂

Вот задача

Реализуйте функцию result, которая принимает на вход результат хоккейного матча и предполагаемый исход. Если счёт был угадан верно, то функция должна вернуть 2, если исход был угадан верно (победа, ничья, поражение), то функция должна вернуть 1, во всех остальных случаях функция возвращает 0.

Функция result принимает на вход четыре параметра: abcda:b — реальный счёт, а c:d — предполагаемый.

Примеры

2 == result(1, 2, 1, 2) // 1:2 - реальный счёт, 1:2 - предполагаемый
1 == result(1, 3, 1, 2) // 1:3 - реальный счёт, 1:2 - предполагаемый
0 == result(4, 3, 0, 0) // 4:3 - реальный счёт, 0:0 - предполагаемый

Что я делал не так

Во первых я был не внимателен и напутал с операторами И и ИЛИ (&& и ||)

Во вторых я не внимательно прочитал задание, по условию которого еденицу должно возвращать если угадали ПОБЕДУ, а не счёт! Это важный нюанс

Ну и в третьих я не смог правильно выразить в условии суть победы — победа, это когда одна команда набрала больше очков, чем другая команда.

Следовательно я должен был написать такое решение


Если прогноз первой = факт первой,
И
прогноз второй = факт второй 
--> возвращаем двойку

Если прогноз первой больше второй и факт первой больше второй; 
ИЛИ 
прогноз первой меньше второй и факт первой меньше второй;
ИЛИ 
прогноз первой равен второй и факт первой равен второй
--> возвращаем единичку

во всех остальных случаях возвращаем ноль

Юрий Ронин