[ruby-it] Significato doppio pipe
Antonio Cangiano
acangiano a gmail.com
Mer 11 Feb 2009 17:59:19 CET
On Wed, Feb 11, 2009 at 11:30 AM, Giampiero Zanchi <cidza a tin.it> wrote:
> ciao a tutti
> c'è qualcuno che gentilmente sa spegarmi il significato del doppio
> carattere pipe (||)? Credo non ci sia bisogno di sottolineare come sia
> difficile se non impossibile fare una ricerca in tal senso.
Si tratta della forma più comune per esprimere l'OR logico in Ruby:
true || true # true
true || false # true
false || true # true
false || false # false
In gergo tecnico è uno short-circuit operator, perché valuta la seconda
espressione soltanto se necessario.
Ad esempio: (3 > 1) || ( 3 > 10) ritorna true, senza mai calcolare la
seconda espressione (3>10), perché la prima espressione è true, e questo è
sufficiente (per l'or) per rendere tutta l'espressione vera.
Potresti persino scrivere true || 3/0 e non otterresti un errore, perché la
divisione per zero non verrebbe mai eseguita.
L'operatore può anche essere usato per valori che non sono booleani, in tal
caso la prima espressione viene restituita a meno che sia false o nil:
3 || 10 # 3
false || 100 # 200
nil || 200 # 200
Ad esempio la seguente riga assegna di default 1000 alla variable my_input,
soltanto se ARGV[0] esiste (di preciso, se non è nil o false). Se un
argomento è stato passato allo script, allora ARGV[0] che sarebbe una
stringa, viene convertito a intero:
my_input = (ARGV[0] || 1000).to_i
Un altro operatore simile è && che si occupa di fare l'AND delle due
espressioni. In questo caso, la seconda espressione è calcolata solamente
se la prima non è nil or false, infatti se la prima espressione è false o
nil, allora tutta l'espressione con l'AND non potrà essere true. In tal
caso, la prima espressione viene restituita, altrimenti la seconda.
Ad esempio:
3 && 10 # 10
false && 100 # false
false && 3/0 # false
nil && 200 # nil
Ciao,
Antonio
--
http://antoniocangiano.com - Zen and the Art of Programming
http://math-blog.com - Mathematics is wonderful!
http://stacktrace.it - Aperiodico di resistenza informatica
Follow me on Twitter: http://twitter.com/acangiano
Currently writing "Ruby on Rails for Microsoft Developers" for Wrox.
More information about the Ml
mailing list