# Non capisco l'uso del simbolo "| |"

**URL:** <https://www.ruby-forum.com/t/non-capisco-luso-del-simbolo/212076>\
**Category:** IT\
**Created:** [September 21, 2011, 4:50pm UTC](https://www.ruby-forum.com/t/non-capisco-luso-del-simbolo/212076 "2011-09-21T16:50:44Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![dubstep](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/cdc98d/32.png) [@dubstep](https://www.ruby-forum.com/u/dubstep)\
**Post date:** [September 21, 2011, 4:50pm UTC](https://www.ruby-forum.com/t/non-capisco-luso-del-simbolo/212076/1 "2011-09-21T16:50:44Z")

</div>

Ciao a tutti, sto pian piano imparando molto da questo framework(rails)  
e mi vorrei togliere una bella curiosità:  
Il seguente comando cosa fa?

session[:counter] ||= 0

In particolare non riesco a capire il simbolo “||”

Grazie a tutti per il supporto…

---

<div class="post-metadata">

**Author:** ![fruitjem](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/f/aeb1de/32.png) [@fruitjem](https://www.ruby-forum.com/u/fruitjem)\
**Post date:** [September 21, 2011, 4:56pm UTC](https://www.ruby-forum.com/t/non-capisco-luso-del-simbolo/212076/2 "2011-09-21T16:56:44Z")

</div>

Il “||”, da solo, equivalente ad “or”. “||” + “=” sono un assegnazione  
condizionale e funzionano cos: quel codice ti restituisce  
session[:counter] se session[:counter] definito. Oppure, setta  
session[:counter] a 0 e restituisce 0.

Sperando di non aver detto boiate e sempre pronto a inchinarmi a chi ne  
sa di pi 🙂

Alessandro

---

<div class="post-metadata">

**Author:** ![fruitjem](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/f/aeb1de/32.png) [@fruitjem](https://www.ruby-forum.com/u/fruitjem)\
**Post date:** [September 21, 2011, 5:18pm UTC](https://www.ruby-forum.com/t/non-capisco-luso-del-simbolo/212076/3 "2011-09-21T17:18:59Z")

</div>

variable ||= valore verifica che variabile non sia false. nil viene  
trattato come false in un controllo booleano 🙂

Cerca conditional assignment qua:

> **[Ruby Programming/Syntax/Operators - Wikibooks, open books for an open world](https://en.wikibooks.org/wiki/Ruby_Programming/Syntax/Operators)**

Alessandro

On 21 Sep 2011, at 17:12 , fruit fruitjemm wrote:

> > Alessandro
> 
> Grazie ancora
> 
> Federico
> 
> –  
> Posted via [http://www.ruby-forum.com/](http://www.ruby-forum.com/).
> 
> * * *
> 
> Ml mailing list  
> [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
> [http://lists.ruby-it.org/mailman/listinfo/ml](http://lists.ruby-it.org/mailman/listinfo/ml)

Alessandro M.  
Web development - rios

[removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)

www.aerios.it - @aeriosit on twitter

---

<div class="post-metadata">

**Author:** ![fruitjem](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/f/aeb1de/32.png) [@fruitjem](https://www.ruby-forum.com/u/fruitjem)\
**Post date:** [September 21, 2011, 5:29pm UTC](https://www.ruby-forum.com/t/non-capisco-luso-del-simbolo/212076/4 "2011-09-21T17:29:27Z")

</div>

Il 21 settembre 2011 17:12, fruit fruitjemm [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) ha  
scritto:

> altrimenti se usato cosi:
> 
> variabile ||= valore verifica che la variabile non nil  
> (sostanzialmente fa un variabile.nil?), se lo setta la variabile a  
> valore…

Ciao,

a OPERATORE= b

solo una forma breve di  
a = a OPERATORE b

Ad esempio,

a += 2  
vuol dire:  
a = a + 2

a -= 2  
si legge:  
a = a - 2

e cos via. Quindi,  
a ||= b  
significa:  
a = a || b

Quindi no, .nil? non viene chiamato, viene piuttosto valutato il  
valore di verit di a; se a valeva false, dopo l’operazione vale b,  
altrimenti continua a valere a, come se fosse:

a = b unless a

pietro

---

<div class="post-metadata">

**Author:** ![fruitjem](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/f/aeb1de/32.png) [@fruitjem](https://www.ruby-forum.com/u/fruitjem)\
**Post date:** [September 21, 2011, 5:48pm UTC](https://www.ruby-forum.com/t/non-capisco-luso-del-simbolo/212076/5 "2011-09-21T17:48:21Z")

</div>

Oltre a quello già detto da Alessandro e Pietro aggiungerei, per  
comodità,  
anche il seguente esempio.

var = false  
puts “true” if var # non stampa nulla  
puts “nil” if var.nil? # idem  
puts “false” if var == false # stampa “false”  
puts “not true” if !var # stampa “not true”

var = nil  
puts “true” if var # non stampa nulla  
puts “nil” if var.nil? # stampa “nil”  
puts “false” if var == false # non stampa nulla  
puts “false” if var === false # idem  
puts “false” if var.eql?(false) # idem  
puts “not true” if !var # stampa “not true”

quindi nota che nil viene trattato come false ma NON è uguale a false.

–  
Duilio R.  
[http://sinetris.info](http://sinetris.info)

---

<div class="post-metadata">

**Author:** ![fruitjem](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/f/aeb1de/32.png) [@fruitjem](https://www.ruby-forum.com/u/fruitjem)\
**Post date:** [September 21, 2011, 5:50pm UTC](https://www.ruby-forum.com/t/non-capisco-luso-del-simbolo/212076/6 "2011-09-21T17:50:15Z")

</div>

> Alessandro  
> pietro  
> Duilio

Concetto afferrato…Grazie a tutti ancora

Federico

---

<div class="post-metadata">

**Author:** ![fruitjem](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/f/aeb1de/32.png) [@fruitjem](https://www.ruby-forum.com/u/fruitjem)\
**Post date:** [September 21, 2011, 5:12pm UTC](https://www.ruby-forum.com/t/non-capisco-luso-del-simbolo/212076/7 "2011-09-21T17:12:03Z")

</div>

Alessandro M. wrote in post #1023121:

> Il “||”, da solo, equivalente ad “or”. “||” + “=” sono un assegnazione  
> condizionale e funzionano cos: quel codice ti restituisce  
> session[:counter] se session[:counter] definito. Oppure, setta  
> session[:counter] a 0 e restituisce 0.
> 
> Sperando di non aver detto boiate e sempre pronto a inchinarmi a chi ne  
> sa di pi 🙂
> 
> Alessandro

Grazie alessandro, quindi se usato tipo:

if (condizione1 || condizione2) ha la funzione di “or” logico,

altrimenti se usato cosi:

variabile ||= valore verifica che la variabile non è nil  
(sostanzialmente fa un variabile.nil?), se lo è setta la variabile a  
valore…???

Grazie ancora

Federico
