Programmazione.it v6.4
Ciao, per farti riconoscere devi fare il login. Non ti sei ancora iscritto? Che aspetti, registrati adesso!
Info Pubblicità Collabora Autori Sottoscrizioni Preferiti Bozze Scheda personale Privacy Archivio Libri Corsi per principianti Forum
Corso su Ruby: costanti
Scritto da Satish Talim il 16-07-2007 ore 09:17
Intel Cluster Studio XE
Una costante in Ruby si riferisce ad un oggetto e viene creata con l'operazione di assegnamento. Nell'implementazione corrente di Ruby, il riassegnamento di una costante genera un messaggio di warning (allarme); ecco un esempio (p054constwarn.rb):
  1. <span style="font-size:1.0em">
  2. # p054constwarn.rb
  3. A_CONST = 10
  4. A_CONST = 20</span>

L'output generato è: p054constwarn.rb:3: warning: already initialized constant A_CONST. Sebbene le costanti non possono essere cambiate, è possibile modificare lo stato interno degli oggetti a cui si riferiscono, come si può notare in p055constalter.rb:
  1. <span style="font-size:1.0em"># p055constalter.rb
  2. A_CONST = "Doshi"
  3. B_CONST = A_CONST
  4. A_CONST[0] = "J" # altera la stringa referenziata dalla costante
  5. puts A_CONST # mostra Joshi
  6. puts B_CONST # mostra anche Joshi</span>

Si possono trovare esempi di questo tipo di operazione di modifica nel codice sorgente Rails, dove le costanti sono notevolmente utilizzate e gli oggetti che esse rappresentano sono soggetti a frequenti cambiamenti.

Da notare:
  • costanti definite all'interno di una classe o modulo possono essere utilizzate ovunque all'interno della classe o del modulo;
  • fuori della classe o del modulo, ad esse si può accedere usando l'operatore scope (::), preceduto da un'espressione che ritorna la classe o il modulo appropriato;
  • in alternativa si può utilizzare solo l'operatore scope;
  • le costanti non possono essere definite nei metodi;
  • le costanti possono essere aggiunte a classi e moduli esistenti dall'esterno usando il nome della classe o del modulo e l'operatore scope prima del nome della costante.
Il programma p056const.rb mostra quanto detto:
  1. <span style="font-size:1.0em"># p056const.rb
  2. OUTER_CONST = 99
  3. class Const
  4.   def get_const
  5.     CONST
  6.   end
  7.   CONST = OUTER_CONST + 1
  8. end
  9. puts Const.new.get_const
  10. puts Const::CONST
  11. puts ::OUTER_CONST
  12. puts Const::NEW_CONST = 123</span>

Ecco un altro esempio di utilizzo di costanti all'interno di un proprio metodo in una classe è p057mymethods2.rb:
  1. <span style="font-size:1.0em"># variabili e metodi iniziano con un carattere minuscolo
  2. $glob = 5             # variabili globali iniziano con $ 
  3. class TestVar         # il nome costante di una classe inizia per lettere maiuscole
  4.  @@cla = 6            # le variabili di classe iniziano con @@
  5.  CONST_VAL = 7        # lo stile delle costanti tutto in maiuscolo 
  6.  def initialize(x)   
  7.    @inst = x          # le variabili di istanza iniziano con @
  8.    @@cla += 1         # ogni oggetto condivide @@cla
  9.  end
  10.  def self.cla         # metodo di classe, getter
  11.    @@cla
  12.  end
  13.  def self.cla=(y)     # metodo di classe, setter, anche TestVar.
  14.   @@cla = y
  15.  end
  16.  def inst             # metodo di istanza, getter
  17.   @inst
  18.  end
  19.  def inst=(i)         # metodo di istanza, setter
  20.   @inst = i
  21.  end
  22. end
  23. puts $glob
  24. test = TestVar.new(3)
  25. puts TestVar.cla      # chiama getter
  26. puts test.inspect     # pone l'ID dell'oggetto e le variabile di istanza
  27. TestVar.cla = 4       # chiama setter
  28. test.inst=8           # chiama setter
  29. puts TestVar.cla
  30. puts test.inst        # chiama getter
  31. other = TestVar.new(17)
  32. puts other.inspect
  33. puts TestVar.cla</span>

"Traduzione e adattamento a cura di Francesca Beatrice Cice. La versione originale del tutorial di Satish Talim può essere trovata su rubylearning.com"
Precedente: Breve corso sulla compressione dei file: l'algoritmo LZW(2/5)
Successiva: Script per servizi Windows
Copyright Programmazione.it™ 1999-2013. Alcuni diritti riservati. Testata giornalistica iscritta col n. 569 presso il Tribunale di Milano in data 14/10/2002. Pagina generata in 0.256 secondi.