Saltar al contenido

LDP | §1.6 - Funciones

§1.5 Introducción a JavaScript

Una función es una forma de definir un bloque de código que realiza (idealmente) una sola tarea, y que podemos utilizar (llamar) desde otra parte del código cada vez que sea necesario, lo que nos permite delegar esas tareas en lugar de tener que reescribir las líneas de código correspondiente cada vez que las necesitamos.

Las funciones pueden recibir cierto número de parámetros (o ninguno) para llevar a cabo su tarea, lo que nos permite utilizar el mismo código sobre distintos datos. A diferencia de otros lenguajes de programación que distinguen entre tareas que devuelven un valor como consecuencia de su ejecución (llamadas también funciones en ese caso) de las que no (típicamente llamadas procedimientos), en JavaScript toda función devuelve un valor, normalmente de manera explícita mediante una palabra reservada para ello, o implícitamente el valor undefined.

Declaración de una función

Supongamos que necesitamos una función que, dado un número, nos calcule su cuadrado. Una posible declaración sería la siguiente:

function cuadrado(numero) {
    var x = numero*numero;
    return x;
}

La declaración tiene las siguientes partes:

  • La palabra reservada function introduce la declaración de la función;
  • Un identificador que dará nombre a la función (cuadrado en este caso). Este identificador debe seguir las mismas reglas que cualquier identificador de variable en JavaScript;
  • Le siguen los parámetros o argumentos de la función, separados por comas si son más de uno, y encerrados entre paréntesis (o un par de paréntesis vacíos si la función no requiere parámetros). En nuestro caso sólo necesitamos un parámetro al que llamamos numero, que se comportará dentro de la función como una variable con ese nombre;
  • El bloque de código o cuerpo de la función, que contiene las instrucciones que deben ejecutarse ante cada llamada a la misma.
  • Si devolvemos un resultado, la palabra reservada return seguida de una expresión tiene como efecto devolver el resultado de esa expresión a quien llama a la función y terminar la ejecución del código (esto significa que, si hubiera más instrucciones después de la sentencia return, no se ejecutarían).

Llamada (invocación) a una función

Para usar o llamar a la función, sólo es necesario escribir su nombre y los parámetros que deseamos usar entre paréntesis. Como la función cuadrado recién definida devuelve un número, podemos usarla en cualquier parte donde sea válido usar un número. Por ejemplo,

var hectarea = cuadrado(100);

declara e inicia la variable hectarea al valor que resulte de elevar 100 al cuadrado (10000 en este caso). También puede formar parte de una expresión numérica cualquiera. Por ejemplo,

var mediaHectarea = cuadrado(100)/2;

Los siguientes ejemplos muestran una función sin parámetros, la posibilidad de llamar una función desde dentro de otra, y funciones de más de un argumento, aprovechando la función cuadrado ya declarada:

// función para devolver pi
function pi() {
    return 3.1416;
}
// devuelve la superfice del círculo de radio dado
function superficieCirculo(radio) {
    return pi()*cuadrado(radio);
}
// devuelve el volumen de un cilindro, dados el radio y la altura
function volumenCilindro(radio, altura) {
    var base = superficieCirculo(radio);
    return base*altura;
}
/*
V recibirá como valor el volumen de un cilindro de radio 10 y altura 20;
*/
var r = 10;
var a = 20;
var V = volumenCilindro(r, a);

También es válido (aunque puede producir un còdigo más difícil de leer, en algunos casos) pasar como argumento a una función directamente el resultado devuelto por otra. Por ejemplo, el volumen del cilindro pudo haberse calculado también así:

function volumenPrisma(superficieBase, altura) {
    return superficieBase*altura;
}
var r = 10;
var a = 20;
var V = volumenPrisma(superficieCirculo(r), a);

Ámbito de una función

En la función volumenCilindro del ejemplo anterior, hemos definido la variable base en su interior. Una variable definida dentro de una función se dice local a ella. Esto significa que esa variable sólo es conocida para las sentencias que forman esa función, pero es desconocida para cualquier sentencia fuera de la misma. Por ejemplo, supongamos que hubiéramos definido a pi no como función sino como una variable más. El siguiente código sería erróneo:

function superficieCirculo(radio) {
     var pi = 3.1416;
     return pi*cuadrado(radio);
}
// Calculo circunferencia de un circulo de radio 15:
var circunferencia = 2*pi*15; // ERROR !!

ya que la variable pi fue definida dentro de la función superficieCirculo/span> y no es conocida (accesible) desde fuera de ella. Por lo tanto, la variable circunferencia no contendrá el valor esperado, ya que pi no existe en ese ámbito.

Por otro lado, si lo reescribimos de esta forma,

var pi = 3.1416;
function superficieCirculo(radio) {
    return pi*cuadrado(radio); 
}
// Calculo circunferencia de un circulo de radio 15:
var circunferencia = 2*pi*15; // OK

el código funciona sin inconvenientes. Esto es porque ahora, habiendo definido la variable pi fuera de la función, ésta es accesible no sólo en el código principal, sino también en el interior de cualquier función definida en él:

Ámbito de una variable es el bloque de código donde su identificador es reconocido y accesible. El ámbito de una variable es el bloque de código donde está declarada, incluyendo el interior de cualquier función declarada en aquél. Por el contrario, bloques de código por fuera del de su declaración quedan excluídos de su ámbito.

§1.7 Decisión e iteración >