Funzioni di accesso
Fa parte della sezione Programmazione orientata agli oggetti del percorso R di Coddy. Lezione 19 di 57.
L'incapsulamento significa che altro codice interagisce con un oggetto tramite funzioni, invece di accedere direttamente ai suoi campi. Un getter legge un valore e un setter lo modifica. Per una lista S3, il setter restituisce la copia modificata:
new_member <- function(name) structure(list(name = name), class = "member")
get_name <- function(p) p$name
set_name <- function(p, value) {
p$name <- value
p
}
p <- new_member("ada")
p <- set_name(p, "Ada Lovelace")
print(get_name(p))Output:
[1] "Ada Lovelace"Gli accessor consentono all'oggetto di cambiare il modo in cui archivia i dati senza compromettere il codice che lo usa. Questo termometro memorizza i gradi Celsius e un getter calcola i gradi Fahrenheit quando richiesto, così chi lo usa non vede mai il campo stesso:
new_thermo <- function(c) structure(list(c = c), class = "thermo")
celsius <- function(t) t$c
fahrenheit <- function(t) t$c * 9 / 5 + 32
t <- new_thermo(25)
cat(celsius(t), fahrenheit(t))Output:
25 77I setter di R, come names(x) <- ..., sono funzioni di sostituzione. Una funzione chiamata "name<-" con i parametri x e value permette a chi la chiama di scrivere name(p) <- "Bo"; R la chiama e assegna il risultato di nuovo a p:
new_member <- function(name) structure(list(name = name), class = "member")
name <- function(p) p$name
"name<-" <- function(x, value) {
x$name <- trimws(value)
x
}
p <- new_member("ada")
name(p) <- " Bo "
print(name(p))Output:
[1] "Bo"Un getter di un oggetto closure restituisce una copia dei dati privati. Modificare quella copia non modifica l'oggetto, quindi l'unico modo per accedervi è tramite le funzioni dell'oggetto stesso:
make_list <- function() {
items <- character(0)
list(add = function(x) items <<- c(items, x),
get_items = function() items)
}
todo <- make_list()
todo$add("milk")
mine <- todo$get_items()
mine[1] <- "HACKED"
print(todo$get_items())Output:
[1] "milk"Sfida
FacileUn contatto è una lista S3 della classe contact con i campi name e email. Completa Contact.R:
new_contact(name, email)memorizza l'email senza spazi alle estremità e in minuscolo.- I getter
contact_name(x)econtact_email(x). - La funzione di sostituzione
"contact_email<-", che memorizza la nuova email senza spazi alle estremità e in minuscolo, così chi la chiama può scriverecontact_email(c1) <- value.
Il codice fornito legge name,email, poi le nuove email e stampa Ada <ada@x.com> dopo ogni modifica e i nomi dei campi memorizzati alla fine.
Il tuo codice va in Contact.R. main.R contiene il codice di input/output fornito e non può essere modificato.
Provalo tu
source("Contact.R")
# Código de entrada/salida proporcionado: mantenlo tal como está
input <- suppressWarnings(readLines(file("stdin")))
p <- strsplit(input[1], ",")[[1]]
c1 <- new_contact(p[1], p[2])
cat(contact_name(c1), " <", contact_email(c1), ">\n", sep = "")
for (value in input[-1]) {
contact_email(c1) <- value
cat(contact_name(c1), " <", contact_email(c1), ">\n", sep = "")
}
cat("stored fields: ", paste(names(unclass(c1)), collapse = ", "), "\n", sep = "")
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
1Nozioni di base su S3
Lavorare con i fileListe con una classeFunzioni costruttriciMetodi di stampa e formattazioneValidatori e funzioni di supportoRipasso - Temperature4Incapsulamento in R
Chiusure come oggettiAmbienti come oggettiFunzioni di accessoProteggere lo statoRiepilogo - Parcometro2Generics e metodi S3
Generics e UseMethodMetodi predefinitiMetodi per i generics di baseNozioni di base su NextMethodRiepilogo - Aree delle forme5Classi S4
Definire le classi S4Slot e accessoControlli di validitàMetodi showRiepilogo - Catalogo prodotti8Classi di riferimento
Definizione delle classi di riferimentoMetodi e aggiornamenti dei campiSemantica della copiaEreditarietà e callSuperRiepilogo - coda di attività11Progetto: Gestione della biblioteca
Libri e iscrittiPrestito dei libriEsercitati da solo: Compilatore R online