# Variabile Protected

**URL:** <https://www.ruby-forum.com/t/variabile-protected/162866>\
**Category:** IT\
**Created:** [March 14, 2009, 7:04pm UTC](https://www.ruby-forum.com/t/variabile-protected/162866 "2009-03-14T19:04:34Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![alexpescara](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/b487fb/32.png) [@alexpescara](https://www.ruby-forum.com/u/alexpescara)\
**Post date:** [March 14, 2009, 7:04pm UTC](https://www.ruby-forum.com/t/variabile-protected/162866/1 "2009-03-14T19:04:34Z")

</div>

E’ possibile definire Protected una variabile di una classe in Ruby?(A  
tal proposito qualcuno potrebbe spiegarmi la differenza tra variabile di  
classe e d’istanza?)

Grazie mille

---

<div class="post-metadata">

**Author:** ![alexpescara](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/b487fb/32.png) [@alexpescara](https://www.ruby-forum.com/u/alexpescara)\
**Post date:** [March 16, 2009, 5:22pm UTC](https://www.ruby-forum.com/t/variabile-protected/162866/2 "2009-03-16T17:22:21Z")

</div>

> From: Alessandro M. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
> To: removed\_email\_address@domain.invalid  
> Sent: Saturday, 14 March, 2009 19:04:34  
> Subject: [ruby-it] Variabile Protected
> 
> E’ possibile definire Protected una variabile di una classe in Ruby?(A  
> tal proposito qualcuno potrebbe spiegarmi la differenza tra variabile di  
> classe e d’istanza?)

no, le variabili sono sempre private, però puoi definire come protected i  
metodi per accedervi.  
In generale comunque non è una pratica comune.

La differenza tra variabile d’istanza e di classe è che le prime sono  
visibili solo, beh, nell’istanza 🙂  
Le variabili di classe invece sono visibili sia nella classe che nelle  
istanze:

> > class C  
> > @@foo=10  
> > def f() @@foo end  
> > end  
> > =\> nil  
> > C.new.f  
> > =\> 10  
> > C.class\_variables  
> > =\> [“@@foo”]

In pratica, una class variable ha senso quando vuoi delle informazioni  
che siano condivise tra le varie istanze della classe, _vagamente_ come  
una static in Java.  
Ma se possibile è sempre meglio usare una costante, che è ugualmente  
visibile sia nella classe che nell’istanza.

> > class D  
> > Foo=10  
> > def f() Foo end  
> > end  
> > =\> nil  
> > D.new.f  
> > =\> 10

Attenzione che siccome le classi sono a loro volta istanze della  
(meta-)classe Class, anche loro possono avere variabili d’istanza che  
però a quel punto sono del tutto private e invisibili alle sucessive  
istanze
