El objetivo de utilizar las funciones es ahorrar gran cantidad de código ya que muchos procesos que son repetitivos se pueden aislar en uno solo que será ejecutado allí donde sea necesario.
Las partes que definen una función son:
. El nombre de la función
. La lista de argumentos/parámetros de la función, encerrados entre paréntesis y separados por comas ( ) ( , , )
.Las sentencias/instrucciones que definen la función, encerradas entre llaves {}
Las funciones se pueden clasificar según:
- Si se llama a la función pasándole parámetros/argumentos. En este supuesto tenemos las siguientes posiblidades:
. Por valor
. Por referencia
. Devuelven un resultado
. No devuelven un resultado
Tenemos entonces: Por valor que devuelve un resultado, por valor que no devuelve un resultado, por referencia que devuelve un resultado y por referencia que no devuelve un resultado.
- Si se llama a la función sin pasarle parámetros/argumentos.
. No devuelve resultado
Ejemplos:
Función que se llaman sin pasarle parámetros/argumentos. No devuelve resultado.
PHP 4
function saludo(){
print("Hola Mundo, hola Javier");
}
saludo();
JavaScript 1.5
html
head
title Ejemplo de definición de función title
head
script language="JavaScript"
function saludo()
{
document.write("Hola Mundo, hola Javier");
script
head
body
script language="JavaScript"
saludo();
script
body
html
C y C#
void Espera()
{
int Ahora;
/* Tomamos el número de milisegundos transcurridos desde el inicio de Windows */
Ahora=GetTickCount();
/*Mientras no hayan transcurridos cinco segundos estamos dando vueltas*/
do; while (GetTickCount()-Ahora<5000);
}
Espera();
Función que se llama pasandole parámetros/argumentos por valor. No devuelve resultado.
PHP 4
function hacerTabla($filas){
print("<table border='1'>");
for ($i=1; $i<=$filas; $i++){
print("<tr><td>Fila " . $i. "</td></tr>");
print ("</table>");
}
hacerTabla(4);
JavaScript 1.5
html
head
titleEjemplo de argumentostitle
scriptlanguage="JavaScript"
function Mensaje(Respuesta)
{
if(Respuesta==0)
alert("Vaya disparate. Repasa el Capítulo 2");
if(Respuesta==1)
alert("La respuesta es correcta");
}
script
head
body
font face="Verdana" size="1" color="Olive">¿JavaScript es una versión simplificada de Java?<br><br>
font color="Teal">
input type="radio" name="R1" onclick="Mensaje(0);"
No, es al revés
input type="radio" name="R1" onclick="Mensaje(1);"
No, es un lenguaje de programación creado por NetScape
body
html
C y C#
void Espera()
{
int Ahora;
/* Tomamos el número de milisegundos transcurridos desde el inicio de Windows */
Ahora=GetTickCount();
/*Mientras no hayan transcurridos cinco segundos estamos dando vueltas*/
do; while (GetTickCount()-Ahora<5000);
}
Espera(7);
C y C#
void Espera()
{
int Ahora;
/* Tomamos el número de milisegundos transcurridos desde el inicio de Windows */
Ahora=GetTickCount();
/*Mientras no hayan transcurridos cinco segundos estamos dando vueltas*/
do; while (GetTickCount()-Ahora<5000);
}
SegundosAEsperar=5;
Espera(SegundosaEsperar);
Función que se llama pasandole parámetros/argumentos por valor. Devuelve resultado.
PHP 4
Por defecto, el comportamiento de los párametros son pasados a la función "por valor". Veremos como modificar este comportamiento más adelante en "Función que se llama ... por referencia...". Esto quiere decir que la variable que recibe el párametro en la función crea una copia.
function cuadrado($num){
return $num * $num;
}
function doble($num){
$num = $num * 2;
return ($num);
}
$numero=7;
print ($numero."<br>"); //imprime 7
print (cuadrado($numero)."<br>"); //imprime 49
print ($numero."<br>");//imprime 7
Como se puede ver en el ejemplo, a pesar de haber sido alterado el valor de la variable $num en la función, la segunda vez que se imprime el valor de $numero sigue teniendo su valor primitivo.
Para que una función tenga acceso a la variable que se ha pasado como parámetro, con el fin de que pueda modificar su valor, al definir la secuencia de parámetros que va a recibir dicho procedimiento habrá que disponer el operador & delante de aquellos parámetros que se desean pasar por referencia, en forma de variables, y no por valor.
JavaScript 1.5
html
head
titleEjemplo de return
head
script language="JavaScript">
function Mitad(valor)
{
return valor/2;
}
script
head
body
script language="JavaScript"
document.write("La mitad de 100 es "+Mitad(100));
script
body
html
Función que se llama pasandole parámetros/argumentos por referencia. No devuelve resultado.
C y C#
void Cuadrado (int Factor, int &Resultado)
{
Resultado = Factor * Factor;
}
int N;
Cuadrado(8,N);
Función que se llama pasandole parámetros/argumentos por valor. Devuelve resultado.
PHP 4
El caso contrario es cuando se pasa un argumento a una función "por referencia". En este caso, el valor del parámetro origianl sí se verá modificado. Para que esto ocurra es necesario colocar delante de la variable que va a recibir el parámetro el símbolo ampersand (&), para indicar que el argumento es pasado por referencia.
function cuadrado(&$num){
return $num * $num;
}
function doble($num){
$num = $num * 2;
return ($num);
}
$numero=7;
print ($numero."<br>"); //imprime 7
print (cuadrado($numero)."<br>"); //imprime 49
print ($numero."<br>");//imprime 49
C y C#
int Cuadrado(int Base)
{
return Base*Base;
}
int N;
N=Cuadrado(8);
Tras esta llamada la variable contendría el valor 64, que ha sido calculado y asignado en la función Cuadrado().
Nota: La diferencia entre un procedimiento y una función es mínima. Hay lenguajes donde un procedimiento es simplemente una función que no devuelve resultado alguno, mientras que en otros el concepto de procedimiento no existe, tan sólo hay funciones que devuelven o no un resultado.