Product Design, Manufacturing & Innovation Resources
Maison » Portée lexicale dans R

Portée lexicale dans R

1980
  • Gerald Jay Sussman
  • Guy L. Steele Jr.
Programmeur informatique démontrant le cadrage lexical dans le langage de programmation R.

(Image générée à titre d'illustration uniquement)

R utilise la portée lexicale, un concept hérité du langage Scheme. Cela signifie que les valeurs des variables libres d'une fonction sont résolues en les trouvant dans l'environnement où la fonction a été définie, et non dans celui où elle est appelée. Cela rend le comportement de la fonction plus prévisible et indépendant du contexte d'appel, une fonctionnalité clé de la programmation fonctionnelle.

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”).

Prenons l'exemple d'une fonction `f()` qui utilise une variable `x` sans la définir. Si `f()` est définie dans l'environnement global où `x` vaut 10, alors, quel que soit l'endroit d'où elle est appelée, elle utilisera toujours `x = 10`. Même si elle est appelée depuis une autre fonction ayant sa propre variable locale `x = 20`, `f()` ignorera la valeur de `x` de l'environnement appelant et utilisera celle de son environnement de définition. Ce comportement facilite le débogage et la compréhension du code, car le comportement d'une fonction est déterminé uniquement par son propre code et l'environnement dans lequel elle a été définie.

Cette fonctionnalité est essentielle pour les paradigmes de programmation fonctionnelle, car elle permet des constructions puissantes comme les fermetures, où une fonction peut « se souvenir » de l'environnement dans lequel elle a été créée. Elle est largement utilisée dans la programmation R avancée et le développement de packages, notamment dans la famille de fonctions `lapply` et dans des frameworks comme Shiny pour les applications web.

UNESCO Nomenclature: 1203
- Informatique

Taper

Système abstrait

Perturbation

Incrémentale

Usage

Utilisation généralisée

Précurseurs

  • Le concept de portée dans les langages de programmation
  • Le langage de programmation Lisp et ses dialectes
  • Le langage de programmation Scheme, qui a popularisé la portée lexicale
  • Le calcul lambda comme fondement théorique des fonctions et de la portée

Applications

  • création de fermetures en R pour la programmation fonctionnelle
  • développement d'espaces de noms de packages pour éviter les conflits de variables
  • activer les techniques d'évaluation non standard utilisées dans des packages comme dplyr
  • construire un code robuste et modulaire sans effets secondaires

Brevets:

    Idées d'innovations potentielles

    En raison du trafic généré par les robots de scraping, actuellement supérieur à 40 000 par jour, ce contenu est réservé aux membres de la communauté.
    > Connexion < ou > Registre < (100% gratuit) pour y accéder, ainsi qu'à tous les autres contenus et outils à accès restreint.

    Lié à : portée lexicale, portée statique, programmation fonctionnelle, R, Scheme, environnement, fermeture, variable libre, espace de noms, évaluation non standard.

    Contexte historique

    Portée lexicale dans R

    1973
    1980
    1980
    1980
    1982-07-01
    1988-06-01
    1990
    1970-01-01
    1975-06-01
    1980
    1980
    1980
    1986-01-01
    1990
    1990

    (si la date est inconnue ou non pertinente, par exemple « mécanique des fluides », une estimation arrondie de son émergence notable est fournie)

    Inventions, innovations et principes techniques connexes

    Les images en pleine résolution et les téléchargements sont uniquement disponibles, et 100% gratuits, pour les membres inscrits.