Crystal 有一種型別叫做 Bool。
它代表 true 和 false 這兩個值。
Crystal 有三個邏輯運算子(!、||、&&),它們可以組合布林值,並構成會得出不同值的運算式。
&&)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 中的非運算子以 ! 表示,如果給定的布林值是 false,就回傳 true;如果給定的是 true,則回傳 false。
使用非運算子時,布林值應該放在運算子(!)後面。
!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? 方法,它接受兩個引數(角色是否有使用中的強化道具 以及 角色是否碰到強盜),並回傳一個布林值,指出角色是否會獲得額外分數。這個方法只有在角色擁有使用中的強化道具且碰到強盜時才應回傳 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? 方法,它接受三個引數(角色是否已撿起所有水晶、角色是否有使用中的強化道具,以及 角色是否碰到強盜),並回傳一個布林值,指出角色是否獲勝。如果角色已收集所有水晶,且根據第 3 部分定義的引數判斷並未落敗,這個方法應回傳 true,否則回傳 false。
Rules.new.win?(false, true, false)
# => false