CAPÍTULO 5. ESCRITURA DE FUNCIONES
90
da en el cuerpo de la función. En el caso de la primer versión, el resultado es
el valor que tenga la variable
w
al momento de ejecutarse, mientras que en la
tercera versión, es directamente el resultado de la suma de los tres argumen-
tos formales. La segunda versión difiere de las otras dos en que se invoca la
función
return()
, que tiene dos consecuencias: la ejecución de la función se
interrumpe en ese punto y el resultado de la función será el argumento que se
pase a
return()
. En el caso del ejemplo, para esta tercera versión, el resultado
será el valor de
w
, mientras que la expresión
3.1416
, nunca se ejecutará, y por
consiguiente el resultado de la función nunca será ese.
Al momento de ejecutarse la función, los argumentos formales se asocian
con o toman sus valores de los argumentos verdaderos. Una forma de hacer
esto es mediante el orden o la posición en que aparecen en la definición, y a
la que denominaremos
asociación posicional
. Las primeras tres ejecuciones del
código anterior, hacen uso de esta característica. En la primera, de acuerdo con
el orden, los argumentos
x
,
yyy
,
z
, quedan asociados con los valores 1, 2, 3,
respectivamente, que son los argumentos verdaderos, y se ha omitido especi-
ficar algún valor para el cuarto argumento,
t
. R no tiene ningún problema con
esa omisión, ya que
t
no se usa en ninguna parte del cuerpo de la función,
en ninguna de sus versiones
1
. En la segunda ejecución, se ha omitido además
especificar el argumento verdadero correspondiente a
z
. Nuevamente, el len-
guaje no tiene ningún problema con eso, ya que en la definición se ha provisto
el valor 5 en caso de omisión, por lo que en esa ejecución,
z
toma ese valor y
por consiguiente el resultado de la suma es 8. En la tercera ejecución, se ha omi-
tido además especificar el argumento verdadero correspondiente a
y
. Como se
puede ver, en este caso el intérprete sí se queja, ya que no se ha especificado
ningún valor por omisión para dicho argumento.
La otra manera de asociar los argumentos formales con sus correspondien-
tes valores determinados por los argumentos verdaderos al momento de la
ejecución, es mediante sus nombres. A esta manera la denominaremos
asocia-
ción nominal
. Las ejecuciones 4, 5 y 6, del código anterior y que son paralelas
a las primeras tres, hacen uso de esta característica. En este caso, no es nece-
sario respetar el orden en que fueron especificados los argumentos formales,
aunque, como se puede ver en la ejecuciones 5 y 6, se pueden combinar ambas
maneras; esto es, para algunos argumentos emplear la asociación posicional,
y para otros, la asociación nominal. Una nota adicional es que, en este tipo
de asociación, como se puede ver en la ejecución 5, el lenguaje puede resolver
la asociación con un nombre de manera
parcial
; por ello es que satisfactoria-
mente resuelve que, en la invocación, la especificación
“y=2”
es lo mismo que
“yyy=2”
, y que, de hecho, se podría también haber especificado como
“yy=2”
.
Esto se puede hacer, siempre y cuando la expresión especificada pueda ser re-
suelta por este método sin ambigüedad.
1
Esto tiene que ver con lo que se conoce como la
evaluación perezosa
de los argumentos en R y que
consiste en que en el momento de ejecución de una función, el lenguaje no evalúa los argumentos
a no ser que la ejecución del código lo requiera. En los casos del ejemplo, como el argumento
t
no
se menciona en el cuerpo de la función, nunca se requiere su evaluación y por tanto, no constituye
un error el que no se haya especificado en la invocación de la función.