Menu
Coddy logo textTech

Lavorare con i file

Fa parte della sezione Programmazione orientata agli oggetti del percorso Ruby di Coddy. Lezione 1 di 57.

I programmi reali sono suddivisi in diversi file. Un file Ruby ne carica un altro con require_relative, seguito dal percorso del file relativo al file corrente, di solito senza l'estensione .rb. Dopo questa riga, è possibile usare i metodi e le classi del file caricato:

# greeting.rb
def greeting(name)
  "Hello, #{name}!"
end

# main.rb
require_relative 'greeting'
puts greeting("Ada")

Eseguendo ruby main.rb viene stampato Hello, Ada!: main.rb carica greeting.rb e poi chiama il suo metodo.

Il programma inizia nel file che esegui, qui main.rb, e Ruby lo esegue dall'alto verso il basso. require_relative esegue l'altro file in quel punto, e solo la prima volta: una seconda require_relative 'greeting' restituisce false e non fa nulla. Un nome può essere usato solo dopo che è stato caricato il file che lo definisce:

# main.rb
# puts greeting("Bo")          # NoMethodError: greeting.rb non è ancora stato caricato
require_relative 'greeting'     # esegue greeting.rb, restituisce true
require_relative 'greeting'     # già caricato, restituisce false
puts greeting("Bo")

Il layout abituale prevede una classe per file, con il file denominato in snake_case come la classe: class Dog si trova in dog.rb, class BankAccount in bank_account.rb. Nelle sfide di questa sezione, main.rb contiene il codice di input/output fornito e inizia con una riga require_relative per ogni file, nell’ordine di caricamento: una classe su cui si basa un’altra classe viene caricata per prima.

dog.rb            # class Dog ... end
bank_account.rb   # class BankAccount ... end
functions.rb      # metodi di supporto
main.rb           # righe con require_relative, poi il codice di input/output

Ciò che un file condivide dipende dal tipo di nome. I metodi definiti con def all'inizio di un file, le classi e le costanti possono essere usati da ogni file caricato in seguito. Una variabile locale appartiene solo al proprio file:

# settings.rb
limit = 3                  # variabile locale: solo settings.rb può vederla
MAX_ITEMS = 3              # costante: visibile dopo il caricamento
def limit_text
  "at most #{MAX_ITEMS}"
end

# main.rb
require_relative 'settings'
puts limit_text            # al massimo 3
puts MAX_ITEMS             # 3
# puts limit               # NameError: variabile locale non definita
challenge icon

Sfida

Facile

Il programma ha due file. main.rb carica greeting.rb, legge i nomi e stampa il risultato di greeting(name). Completa greeting in greeting.rb in modo che restituisca Hello, Ada! per il nome Ada, oppure Hello, friend! quando il nome è vuoto.

Il tuo codice va in greeting.rb. main.rb contiene il codice di input/output fornito e non può essere modificato.

Provalo tu

require_relative 'greeting'

# Codice di input/output fornito: lascialo così com'è
input = []
while (line = gets)
  input << line.chomp
end
input.each { |name| puts greeting(name) }
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Programmazione orientata agli oggetti

Esercitati da solo: Compilatore Ruby online