If
Iniziamo dando uno sguardo a if. Sorvoliamo sul significato di questo costrutto, noto a chiunque conosca l'abc della programmazione, e passiamo direttamente alla sintassi con un esempio:
if n == 1 then
puts "N vale uno"
elsif n == 2 then
puts "N vale due"
else
puts "N non vale ne uno ne due"
end
È possibile omettere, qualora non necessario, sia il ramo elseif sia il ramo else e arrivare alla forma base
if espressione then
istruzione
end
è anche possibile sostituire alla parola chiave then i due punti (:), o anche ometterla del tutto se il nostro if è scritto su più linee. L'esempio di prima diventa dunque:
if n == 1
puts "N vale uno"
elsif n == 2
puts "N vale due"
else
puts "N non vale ne uno ne due"
end
Possiamo inserire un'espressione if anche in coda ad una normale istruzione
puts "N è maggiore di dieci" if n > 10
Unless
Opposto all'if abbiamo lo statement unless che esegue le istruzioni associate all'espressione che risulta falsa:
unless n > 10
puts "N non è maggiore dieci"
else
puts "N è maggiore di dieci"
end
Anche dell'unless ne esiste una versione modificatrice di istruzione:
puts "N è maggiore di dieci" unless n < 10
Una forma ancora più ermetica prevede l'uso dell'operatore ? nel seguente modo:
segno = n >= 0 ? "positivo" : "negativo"
se la condizione è vera viene eseguita la prima espressione, se è falsa la seconda. È buona norma usare questa sintassi solo nei casi in cui non va a scapito della leggibilità, uno dei punti di forza del Ruby.
Infine come esercizio riscriviamo il metodo rifornimento dell'esempio che abbiamo scritto in precedenza tenendo contro della capacità massima del serbatoio. Innanzitutto bisogna creare una variabile per la capacità massima, e poi non ci resta che controllare se la quantità di carburante che vogliamo immettere più quella già presente nel serbatoio non sia superiore alla capacità stessa. In caso affermativo eroghiamo solo la quantità di carburante necessaria per un pieno.
Scrivendo il tutto in modo didattico otteniamo il codice seguente:
CAPACITA_MAX_SERBATOIO = 100
def rifornimento (quantita)
if (@carburante + quantita) > CAPACITA_MAX_SERBATOIO then
quantita_necessaria = CAPACITA_MAX_SERBATOIO - @carburante
@carburante += quantita_necessaria
puts "Carburante erogato: #{quantita_necessaria}"
else
@carburante += quantita
puts "Carburante erogato: #{quantita}"
end
puts "Carburante totale: #{@carburante}"
end
Eliminando le variabili ridondanti e le ripetizioni arriviamo ad un risultato sicuramente migliore:
def rifornimento (quantita)
if (@carburante + quantita) > CAPACITA_MAX_SERBATOIO then
quantita = CAPACITA_MAX_SERBATOIO - @carburante
end
@carburante += quantita
puts "Carburante erogato: #{quantita}"
puts "Carburante totale: #{carburante}"
end
Fatto questo possiamo scrivere:
c = Camion.new(50, 30) c.rifornimento(90)
ed otteniamo in output il giusto risultato:
Carburante erogato: 70 Carburante totale: 100
In alternativa avremmo potuto scrivere in modo più conciso, su una unica riga, anche in questo modo:
def rifornimento (quantita)
quantita = (@carburante + quantita) > CAPACITA_MAX_SERBATOIO ? CAPACITA_MAX_SERBATOIO - @carburante : quantita
@carburante += quantita
puts "Carburante erogato: #{quantita}"
puts "Carburante totale: #{carburante}"
end
Se vuoi aggiornamenti su Development inserisci la tua email nel box qui sotto: