Zugriffsfunktionen
Teil des Abschnitts Objektorientierte Programmierung der R-Journey von Coddy. Lektion 19 von 57.
Kapselung bedeutet, dass anderer Code mit einem Objekt über Funktionen arbeitet, anstatt direkt auf seine Felder zuzugreifen. Ein Getter liest einen Wert, und ein Setter ändert ihn. Für eine S3-Liste gibt der Setter die geänderte Kopie zurück:
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))Ausgabe:
[1] "Ada Lovelace"Accessoren ermöglichen es dem Objekt, seine Daten anders zu speichern, ohne den Code zu beschädigen, der es verwendet. Dieses Thermometer speichert Celsius, und ein Getter berechnet auf Anfrage Fahrenheit, sodass Aufrufer das Feld selbst nie sehen:
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))Ausgabe:
25 77R-eigene Setter wie names(x) <- ... sind Ersetzungsfunktionen. Eine Funktion namens "name<-" mit den Parametern x und value ermöglicht es Aufrufern, name(p) <- "Bo" zu schreiben; R ruft sie auf und weist das Ergebnis wieder p zu:
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))Ausgabe:
[1] "Bo"Ein Getter eines Closure-Objekts gibt eine Kopie der privaten Daten zurück. Das Ändern dieser Kopie ändert das Objekt nicht, daher führt der einzige Weg hinein über die eigenen Funktionen des Objekts:
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())Ausgabe:
[1] "milk"Aufgabe
EinfachEin Kontakt ist eine S3-Liste der Klasse contact mit den Feldern name und email. Vervollständige Contact.R:
new_contact(name, email)speichert die E-Mail-Adresse getrimmt und in Kleinbuchstaben.- Die Getter
contact_name(x)undcontact_email(x). - Die Ersetzungsfunktion
"contact_email<-", die die neue E-Mail-Adresse getrimmt und in Kleinbuchstaben speichert, sodass Aufrufercontact_email(c1) <- valueschreiben können.
Der bereitgestellte Code liest name,email und anschließend neue E-Mail-Adressen ein und gibt nach jeder Änderung Ada <ada@x.com> sowie am Ende die Namen der gespeicherten Felder aus.
Dein Code gehört in Contact.R. main.R enthält den bereitgestellten Eingabe-/Ausgabecode und darf nicht bearbeitet werden.
Probier es selbst
source("Contact.R")
# Gelieferter Ein-/Ausgabecode: belasse ihn wie er ist
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 = "")
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Objektorientierte Programmierung
1S3-Grundlagen
Arbeiten mit DateienListen mit einer KlasseKonstruktorfunktionenPrint- und Format-MethodenValidatoren und HilfsfunktionenRückblick – Temperaturen4Kapselung in R
Closures als ObjekteUmgebungen als ObjekteZugriffsfunktionenZustand schützenRückblick – Parkuhr2S3-Generics und Methoden
Generics und UseMethodStandardmethodenMethoden für Basis-GenericsGrundlagen von NextMethodWiederholung – Flächeninhalte von Formen5S4-Klassen
S4-Klassen definierenSlots und ZugriffGültigkeitsprüfungenShow-MethodenRückblick – Produktkatalog8Referenzklassen
Referenzklassen definierenMethoden und FeldänderungenKopiersemantikVererbung und callSuperZusammenfassung – Aufgabenwarteschlange11Projekt: Bibliotheksverwaltung
Bücher und MitgliederBücher ausleihenÜbe selbstständig: Online-R-Compiler