I numeri in Ruby

Guida alla programmazione con Ruby

Ogni numero in Ruby rappresenta un oggetto, o più precisamente un’istanza di una delle classi numeriche di Ruby; a tal proposito la classe Numeric rappresenta la classe di base  per i numeri. In essa è possibile individuare poi la classe Fixnum che viene utilizzata per rappresentare i numeri interi di lunghezza fissa, che occupano un numero di bit non superiore a quello nativo relativo alla macchina in uso (ad esempio 32 bit per una macchina a 32 bit).

La classe Bignum viene utilizzata per rappresentare i numeri interi più grandi di quelli che possono essere contenuti nella classe Fixnum. Risulta opportuno precisare che la transizione tra le due classi avviene in modo del tutto automatico e cioè l’interprete Ruby, in base alle dimensioni del numero da rappresentare associa lo stesso alla classe opportuna.

Per comprendere meglio il significato di quanto detto analizziamo nel dettaglio un esempio; in particolare utilizzeremo un ciclo per moltiplicare un numero a se stesso in modo tale da aumentare progressivamente le dimensioni del numero, contestualmente poi stamperemo la classe con cui il numero viene rappresentato. Per fare questo utilizzeremo il codice seguente:

num = 2
for i in 1..8
   print i, “ “, num.class, " ", num, "\n"
   num *= num
end

dove il simbolo *= viene utilizzato appunto per moltiplicare il numero a se stesso ed assegnarli il risultato. Per visualizzare in tempo reale i risultati forniti dall’interprete ci serviremo del software irb che ci fornisce, come precedentemente già introdotto, una consolle interattiva dove digitare codice Ruby e vedere immediatamente i risultati.

irb(main):001:0> num = 2
=> 2
irb(main):002:0> for i in 1..8
irb(main):003:1> print i, " ", num.class, " ", num, "\n"
irb(main):004:1> num *= num
irb(main):005:1> end
1 Fixnum 2
2 Fixnum 4
3 Fixnum 16
4 Fixnum 256
5 Fixnum 65536
6 Bignum 4294967296
7 Bignum 18446744073709551616
8 Bignum 340282366920938463463374607431768211456
=> 1..8

Nell’esempio appena proposto è possibile verificare che fino alla quinta iterazione il numero è di dimensioni tali da farlo contenere nel range appartenente alla classe Fixnum, relativa alla macchina in uso; dalla sesta iterazione in poi il numero supera i bit nativi e l’interprete in modo automatico effettua la transizione alla classe Bignum.

LINK DI APPROFONDIMENTO PER L’ARGOMENTO:

Leave a Reply

Your email address will not be published. Required fields are marked *