Crystal має тип, відомий як Bool.
Він представляє значення true і false.
У Crystal є три логічні оператори: ! (логічне заперечення), || (логічне або) і && (логічне і). Вони поєднують булеві значення (англ. Boolean) і створюють вирази, що дають різні значення.
&&)Оператор і у Crystal позначається && (і) і повертає true, якщо обидва значення true; інакше він повертає false.
Коли ми використовуємо оператор і, одне булеве значення ставиться праворуч від && (і), а інше - ліворуч.
true && true
# => true
true && false
# => false
||)Оператор або у Crystal позначається || (або) і повертає true, якщо принаймні одне з наданих значень true.
Якщо обидва значення false, то він повертає false.
Коли ми використовуємо оператор або, одне булеве значення слід поставити праворуч від || (або), а інше - ліворуч.
true || true
# => true
true || false
# => true
false || false
# => false
!)Логічне заперечення у Crystal позначається ! і повертає true, якщо надане булеве значення false, і повертає false, якщо надано true.
Коли ми використовуємо логічне заперечення, одне булеве значення слід поставити після оператора (!).
!true
# => false
!false
# => true
())Коли ми працюємо з булевими значеннями, дужки дають змогу вирішити, які булеві значення обчислювати першими. Результат може відрізнятися залежно від того, як використано дужки. У Crystal те, що стоїть у дужках, обчислюється першим.
true && false && false || true
# => true
true && false && (false || true)
# => false
Оскільки те, що стоїть у дужках, обчислюється першим, у наведеному далі прикладі логічне заперечення застосується до виразу всередині дужок.
!true && false
# => false
!(true && false)
# => true
Використовуйте дужки лише тоді, коли вони впливають на результат; інакше їх слід опускати.
Ми розробляємо нову надзвичайно популярну гру Crystal Hunter. У грі ми граємо за персонажа, який рухається та збирає кристали. Гравець перемагає, якщо збере всі кристали. Якщо гравець торкнеться бандита, він втратить усі свої кристали і програє. У цього правила є виняток: у гравця може бути активне підсилення, яке робить його невидимим для бандитів.
Наша мета - написати правила, які будуть використовуватися у грі.
У грі персонаж отримує бонусні очки, якщо торкнеться бандита, маючи активне підсилення.
Визначте метод Rules#bonus_points?, який приймає два аргументи (чи має персонаж активне підсилення та чи торкається персонаж бандита) і повертає булеве значення (англ. Boolean), яке вказує, чи отримає персонаж бонусні очки.
Метод має повертати true, лише якщо персонаж має активне підсилення і торкається бандита, та false в іншому разі.
Rules.new.bonus_points?(false, true)
# => false
Гравець отримує очки, коли підбирає кристал або підсилення.
Визначте метод Rules#score?, який приймає два аргументи (чи торкається персонаж підсилення та чи торкається персонаж кристала) і повертає булеве значення, яке вказує, чи отримав персонаж очки.
Метод має повертати true, якщо персонаж торкається підсилення або кристала, та false в іншому разі.
Rules.new.score?(true, true)
# => true
Визначте метод Rules#lose?, який приймає два аргументи (чи має персонаж активне підсилення та чи торкається персонаж бандита) і повертає булеве значення, яке вказує, чи програє персонаж.
Метод має повертати true, якщо персонаж торкається бандита і не має активного підсилення, та false в іншому разі.
Rules.new.lose?(false, true)
# => true
Визначте метод Rules#win?, який приймає три аргументи (чи зібрав персонаж усі кристали, чи має персонаж активне підсилення та чи торкається персонаж бандита) і повертає булеве значення, яке вказує, чи перемагає персонаж.
Метод має повертати true, якщо персонаж зібрав усі кристали і не програв згідно з аргументами, визначеними в частині 3, та false в іншому разі.
Rules.new.win?(false, true, false)
# => false
Зареєструйтеся на Exercism, щоб вивчати й опановувати Crystal, а також 26 концепцій142 вправи та справжнє наставництво від людей, і все це безкоштовно.