Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial
  • Lezione 11 di 45
  • livello principiante
Indice lezioni

Tipi di dati: numeri

I tipi fondamentali di un linguaggio di programmazione: la gestione dei numeri
I tipi fondamentali di un linguaggio di programmazione: la gestione dei numeri
Link copiato negli appunti

Iniziamo a vedere i tipi fondamentali di ogni linguaggio: i numeri e le stringhe. Queste ultime le analizzeremo nella prossima lezione.

Il linguaggio Ruby prevede l'esistenza di numeri interi e di numeri a virgola mobile (floating-point). I primi sono oggetti delle classi Fixnum o Bignum mentre i secondi sono di tipo Float. I numeri che possono essere rappresentati in una word (meno un bit) sono oggetti della classe Fixnum, quelli che vanno oltre questo limite sono invece istanze della classe Bignum:

f = 123
f.class
=> Fixnum
b = 1234567890
b.class
=> Bignum

Per rappresentare numeri non decimali va fatto precedere al numero vero e proprio un indicatore di base (0b per i binari, 0 per gli ottali, 0d per i decimali e 0x per gli esadecimali), ad esempio:

> 10    # i numeri decimali sono preceduti da 0d che però può essere omesso
=> 10
> 010   # i numeri ottali sono preceduti da uno 0
=> 8
> 0x10  # i numeri esadecimali sono preceduti da 0x
=> 16
> 0b10  # i numeri binari sono preceduti da 0b
=> 2

Essendo i numeri oggetti di una determinata classe possiamo applicare ad essi i metodi previsti dalle rispettive classi. I principali metodi previsti da Fixnum e Bignum sono:

  • operazioni aritmetiche di base (+, -, *, /, div, %, modulo, **, - unario)
  • operazioni sui bit (~, |, &, ^, <<, >>)
  • altre operazioni aritmetiche:
    • valore assoluto (abs): -123.abs -> 123
    • dimensione in byte (size): 100.size -> 4
    • operazioni di conversione (to_f, to_s, to_sym): 1.to_s -> "1", 1.to_f -> 1.0

Altri metodi sono ereditati dalle classi Integer e Numeric poiché entrambe le classi derivano da Integer che a sua volta deriva da Numeric. Abbiamo ad esempio chr, floor, next, to_i, step e molti altri.

La classe Float oltre ai metodi base visti per Fixnum e a quelli ereditati da Numeric prevede tra l'altro:

  • infinite? che restituisce -1, +1 o nil a seconda che il valore sia pari a meno infinito, più infinito o un numero finito: (1.0).infinite? -> nil(+1.0/0.0).infinite? -> 1
  • nan? restituisce true se il valore è un numero non valido secondo gli standard IEEE.

Per ulteriori dettagli su questi e altri metodi consiglio vivamente l'uso di ri sulle classi Fixnum, Bignum, Integer e Numeric.

Ti consigliamo anche