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

Ruby e gli oggetti - II

La programmazione ad oggetti dal punto di vista di Ruby: uso di attr e i suoi complementi
La programmazione ad oggetti dal punto di vista di Ruby: uso di attr e i suoi complementi
Link copiato negli appunti

La gestione degli attributi è molto elementare e allo stesso tempo molto tediosa. Essendo però una pratica di uso comune, il Ruby fornisce delle comode scorciatoie per la gestione degli attributi: attr_reader, attr_writer, attr_accessor e attr. Il nostro codice diventa in definitiva:

class CarroArmato
    attr :colpi, true
    attr :carburante, true 

    def initialize (colpi, carburante)
        @colpi = colpi
        @carburante = carburante
    end
end

class Camion
    attr :posti, true
    attr :carburante, true

    def initialize (posti, carburante)
        @posti = posti
        @carburante = carburante
    end
end

Il valore true dopo il nome dell'attributo sta ad indicare che la variabile è anche scrivibile, in alternativa avremmo potuto usare attr_reader e attr_writer oppure attr_accessor che è sinonimo di "attr nome_simbolo, true", ovvero scrivere

attr_accessor :posti, :carburante 

è lo stesso che scrivere

attr :posti, true
attr :carburante, true

Questo breve esempio mostra tutta l'eleganza del Ruby che fa di tutto per venire in contro alle necessità dello sviluppatore senza perdere omogeneità e leggibilità.

In realtà nel nostro caso è meglio permettere solo la lettura degli attributi e creare ad esempio un metodo per la gestione del carburante. La nostra classe Camion diventa dunque:

class Camion
    attr_reader :posti, :carburante 

    def initialize (posti, carburante)
        @posti = posti
        @carburante = carburante
    end

    def rifornimento (quantita)
        @carburante += quantita 
    end
end

Ora non sono più lecite istruzioni del genere

> c.carburante = 100

ma per manipolare l'attributo carburante occorre usare il metodo rifornimento:

> c.rifornimento(100)

Lo stesso discorso vale per l'altra classe e gli altri attributi.

Degli argomenti dei metodi è possibile indicare anche il valore di default, ad esempio definendo initialize in questo modo

    def initialize (colpi, carburante = 100)
        @colpi = colpi
        @carburante = carburante
    end

possiamo istanziare nuovi oggetti anche passando un solo parametro, per il secondo argomento viene considerato il valore di default

> ca = CarroArmato.new(50)
=> #

Quando si chiama un metodo, l'uso delle parentesi è facoltativo, ovvero è corretto anche scrivere:

> ca = Camion.new 50
=> # 

Per ora, per evitare confusione fermiamoci qui, torneremo di seguito sugli oggetti trattando l'ereditarietà, il polimorfismo e altri aspetti avanzati.

Ti consigliamo anche