-
Notifications
You must be signed in to change notification settings - Fork 14
/
044_cuidado_com_a_prioridade_de_alguns_operadores.rb
executable file
·75 lines (56 loc) · 1.72 KB
/
044_cuidado_com_a_prioridade_de_alguns_operadores.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
# 07/06/2016 - Everaldo Gomes - [email protected]
#
# 044 - Cuidado com a prioridade de alguns operadores
#
#
# Ruby possui os operadores: && e and
# || e or
# ! e not
#
# Mas esses operadores não são sinônimos, com mesma prioridade.
#
#
# Primeiramente, os operadores ! e not, por razões históricas (que desconheço)
# não podem ser utilizados com uma string, expressão regular ou intervalo (range)
# que estejam sozinhos numa condição. Isso gera um warning (na versão 2.3.1).
# Provavelmente, em versões anteriores, gerasse um erro de compilação
#
# Nunca usar (! ou not): ! "string"
# ! /regexp/
# ! 1..10 # intervalo
#
#
# Os operadores and e or tem a mesma precedência
# O operador && tem precedência maior sobre o operador || e
# sobre o operador and
#
#
#
# Lembrando que o comportamento desses operadores é "curto-circuito".
#
# O operador && retorna o segundo operando se o primeiro for verdadeiro
# O operador || retorna o primeiro operando, se ele for verdadeiro,
# senão retorna o segundo
#
#
#
# Evite ao máximo usar and em atribuições, porque ele tem precedência
# menor que o operador de atribuição (=)
#
#
#
a = 1
b = 2
puts a && b # retorna 2
puts a || b # retorna 1
puts false || b # retorna 2
x = true and false
puts x # imprime true, o senso comum esperaria false
y = true && false
puts y # => imprime false, valor esperado
## Essa linha abaixo gera um erro de sintaxe, porque not
## não é um operador lógico real.
## É um operador de controle, para ser utilizado
## em expressões de comandos: if, unless, while etc.
#
##a = not false && true