Menu
Coddy logo textTech

Lavorare con i file

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

I programmi reali sono suddivisi in diversi file. In R, source("Greeting.R") esegue un altro file dall'inizio alla fine e, in seguito, sono disponibili tutte le funzioni definite in quel file:

# Greeting.R
greeting <- function(name) {
  paste0("Hello, ", name, "!")
}

# main.R
source("Greeting.R")
cat(greeting("Ada"), "\n")

Eseguendo main.R viene stampato Hello, Ada!: la riga source() carica greeting() prima che main.R la chiami.

Il programma inizia nel file che esegui, qui main.R, e R lo legge riga per riga. L’ordine è importante: una funzione esiste solo dopo che è stato caricato il file che la definisce, quindi le righe source() vanno all’inizio:

# main.R
cat(greeting("Ada"), "\n")   # Errore: impossibile trovare la funzione "greeting"
source("Greeting.R")
cat(greeting("Ada"), "\n")   # funziona: greeting() ora esiste

Di solito c'è una classe per file, con il nome della classe: Account.R contiene il costruttore account e i suoi metodi, Shape.R contiene i generici shape. Nelle sfide di questa sezione, il tuo codice va inserito in quei file, mentre main.R contiene il codice di input/output fornito, con le righe source() già presenti in cima nell'ordine corretto. L'editor mostra ogni file come una scheda.

Shape.R      # funzioni generiche condivise da tutte le forme: esegui prima il sourcing di questo file
Circle.R     # la classe del cerchio e i suoi metodi
main.R       # source("Shape.R"); source("Circle.R"); legge l'input, stampa i risultati

source() esegue un file nell'ambiente globale, quindi le sue funzioni e variabili diventano nomi globali. R non ha nomi privati dei file: se due file definiscono helper(), prevale quello dell'ultimo file caricato con source. Anche un valore su una propria riga in un file caricato con source non viene stampato, quindi i file che devono mostrare qualcosa chiamano cat():

# Tools.R
total <- 0                 # una variabile globale dopo essere stato caricato con source()
42                         # non viene stampato da source()
helper <- function(x) x * 2

# Other.R
helper <- function(x) x + 1   # caricato in seguito: sostituisce helper definito sopra
challenge icon

Sfida

Facile

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

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

Provalo tu

source("Greeting.R")

# Supplied input/output code: keep it as it is
input <- suppressWarnings(readLines(file("stdin")))
for (name in input) cat(greeting(name), "\n", sep = "")
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 R online