Lexikalische Scoping in R
1980
- Gerald Jay Sussman
- Guy L. Steele Jr.
R verwendet lexikalisches Scoping, ein Konzept, das aus der Scheme-Sprache übernommen wurde. Das bedeutet, dass die Werte freier Variablen in einer Funktion aufgelöst werden, indem sie in der Umgebung gefunden werden, in der die Funktion definiert wurde, und nicht in der Umgebung, in der sie aufgerufen wird. Dies macht das Funktionsverhalten vorhersehbarer und unabhängig vom Aufrufkontext – ein Schlüsselmerkmal der funktionalen Programmierung.
Lexical scoping, also known as static scoping, is a fundamental convention for looking up variable names in a programming language. In R, when a function needs to access a variable that is not defined locally (a “free variable”), it searches for that variable in the environment where the function was created. This “creation environment” is permanently attached to the function. This contrasts with dynamic scoping, used in some older languages, where the search would proceed up the chain of function calls (the “calling environment”).
Betrachten wir beispielsweise eine Funktion `f()`, die eine Variable `x` verwendet, diese aber nicht definiert. Wenn `f()` in der globalen Umgebung definiert ist, in der `x` den Wert 10 hat, verwendet `f()` unabhängig vom Aufrufort immer `x = 10`. Selbst wenn sie von einer anderen Funktion aufgerufen wird, die ein eigenes lokales `x = 20` hat, ignoriert `f()` das `x` der aufrufenden Umgebung und verwendet das aus ihrer Definitionsumgebung. Dieses Verhalten erleichtert das Debuggen und Nachvollziehen des Codes, da das Verhalten einer Funktion ausschließlich durch ihren eigenen Code und die Umgebung, in der sie definiert wurde, bestimmt wird.
Diese Funktion ist für funktionale Programmierparadigmen unerlässlich und ermöglicht leistungsstarke Konstrukte wie Closures, mit denen sich eine Funktion die Umgebung, in der sie erstellt wurde, „merken“ kann. Sie wird in der fortgeschrittenen R-Programmierung und Paketentwicklung intensiv genutzt, beispielsweise in der `lapply`-Funktionsfamilie und in Frameworks wie Shiny für Webanwendungen.
UNESCO Nomenclature: 1203
- Computerwissenschaften
Verwendung
Weitverbreitete Verwendung
Vorläufer
- Das Konzept des Geltungsbereichs in Programmiersprachen
- Die Programmiersprache Lisp und ihre Dialekte
- Die Programmiersprache Scheme, die lexikalisches Scoping populär machte
- Lambda-Kalkül als theoretische Grundlage für Funktionen und Umfang
Anwendungen
- Erstellung von Closures in R für die funktionale Programmierung
- Entwicklung von Paket-Namespaces zur Vermeidung von Variablenkonflikten
- Ermöglichung nicht standardmäßiger Auswertungstechniken, die in Paketen wie dplyr verwendet werden
- Erstellen von robustem und modularem Code ohne Nebenwirkungen
Potenzielle Innovationsideen
Aufgrund des hohen Datenverkehrs durch Web-Scraping-Bots, der derzeit mehr als 40.000 Anfragen pro Tag umfasst, ist dieser Inhalt ausschließlich Community-Mitgliedern vorbehalten.
> Anmelden < oder > Registrieren < (100% kostenlos) Zugriff darauf sowie auf alle anderen eingeschränkten Inhalte und Tools.
Verwandt mit: lexikalischer Gültigkeitsbereich, statischer Gültigkeitsbereich, funktionale Programmierung, R, Scheme, Umgebung, Closure, freie Variable, Namensraum, nicht standardkonforme Auswertung.