Alcance léxico frente a alcance dinámico en la programación R

R es un lenguaje de programación de código abierto que se usa ampliamente como software estadístico y herramienta de análisis de datos. R generalmente viene con la interfaz de línea de comandos. R está disponible en plataformas ampliamente utilizadas como Windows, Linux y macOS. Además, el lenguaje de programación R es la última herramienta de vanguardia. Las reglas de alcance de un lenguaje son las encargadas de determinar cómo se asociará el valor con la variable libre en una función en el lenguaje R. 

Alcance léxico

En Lexical Scoping, el alcance de la variable está determinado por la estructura textual de un programa. La mayoría de los lenguajes de programación que usamos hoy en día tienen un alcance léxico. Incluso, un humano puede determinar el alcance de una variable simplemente leyendo correctamente el código. A continuación se muestra un código de Alcance léxico en R. 

Python3

# R program to depict scoping
 
# Assign a value to a
a <- 1
 
# Defining function b and c
b <- function() a
c <- function(){
  a <- 2
  b()
}
 
# Call to function c
c()

Producción: 

 1 

En este ejemplo, primero, se crea una asignación para a. En la siguiente línea se define una función b que devuelve el valor de alguna a. En la línea 3, definimos una función c, que crea un nuevo mapeo para a y luego llama a b. Tenga en cuenta que la asignación en la línea 4 no actualiza la definición en la línea 1 y en el valor de salida, se devuelve 1. 

Alcance dinámico

En el alcance dinámico, la variable toma el valor del último valor asignado a esa variable 
aquí, considerando el mismo ejemplo anterior.  

Python3

# R program to depict scoping
 
# Assign a value to a
a <- 1
 
# Defining function b and c
b <- function() a
c <- function(){
  a <- 2
  b()
}
 
# Call to function c
c()

Producción: 

 1 

La salida de este código debe ser 2 según las reglas de Dynamic ya que el último valor asignado a la variable a es 2. 

Alcance en lenguaje R

A veces, en R Language, el código puede dar la apariencia de un alcance dinámico que ocurre cuando una función se define en el entorno global y también se llama desde el entorno global, lo que da como resultado el mismo entorno para definir y llamar al entorno que se puede representar en el ejemplo. dada a continuación. 

Python3

# R program to depict scoping
 
# Assign a value to a
a <- 10
 
# Defining function f
f <- function(x) {
  a <- 2
  a ^ 2 + g(x)
}
 
# Defining function g
g <- function(x) {
  x * a
}
 
# Call to function f
f(3)

Producción: 

 34 

En este ejemplo, se busca g en el entorno en el que se define y, por lo tanto, el valor de a es 10. Con alcance dinámico, el valor de una variable se busca en el entorno en el que se llama. En R, ese entorno se conoce como el entorno principal, por lo que en función de f el valor de a será 2, mientras que en g el valor será 10. Esto puede crear la ilusión de que el lenguaje R es un lenguaje dinámico, pero en realidad resulta ser Ser lengua de ámbito léxico. A continuación se muestran algunas diferencias entre el alcance léxico y dinámico en la programación R.

Diferencia entre alcance léxico y dinámico

Léxico Dinámica
En esta variable se refiere al entorno de nivel superior En esta variable se asocia al entorno más reciente
Es fácil encontrar el alcance leyendo el código. En esto el programador tiene que anticipar todos los contextos posibles
Depende de cómo se escriba el código. Depende de cómo se ejecute el código.
La estructura del programa define a qué variable se hace referencia. El estado de tiempo de ejecución de la pila del programa determina la variable.
Es propiedad del texto del programa y no está relacionado con la pila en tiempo real. Depende de la pila en tiempo real en lugar del texto del programa
Proporciona menos flexibilidad. Proporciona más flexibilidad
El acceso a variables no locales en el alcance léxico es rápido. El acceso a variables no locales en el ámbito dinámico lleva más tiempo.
Las variables locales se pueden proteger para que las variables locales accedan a ellas. No hay forma de proteger las variables locales a las que pueden acceder los subprogramas.

Publicación traducida automáticamente

Artículo escrito por rajatrathi y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *