2.5. Funciones y scripts de usuario

Las funciones y scripts son el mecanismo que ofrece Octave para simplificar la escritura de programas o la carga de datos iniciales. Se pueden escribir directamente en la línea de comandos de Octave, o en ficheros externos. En ese caso los scripts y las funciones se invocan exactamente igual que cualquier otra función predefinida de Octave. La única condición es que esos ficheros se encuentren en un directorio dentro del path de Octave

Sugerencia

Para más información sobre el path de búsqueda de ficheros de Octave consultar help -i LOADPATH.

Sugerencia

Los ficheros de scripts y funciones de Octave tienen extensión ".m" por compatibilidad con Matlab.

Las funciones tienen el siguiente formato:

	function variable_retornada = nombre_funcion (lista_argumentos)
	   cuerpo_de_función
	endfunction
      

El formato tiene los siguientes campos:

	function [x y] = polar2cartesiano(radio, angulo)
	  x= radio*cos(angulo);
	  y= radio*sin(angulo);
	endfuncion
      

Para que sea posible la devolución de algún valor, dentro del cuerpo de la función deben existir variables de igual nombre que las que aparecen en el campo variable_retornada. No es necesario devolver ningún valor explícitamente.

Dentro del cuerpo de la función son accesibles las variables declaradas en la lista de argumentos, que tendrán el valor que se les asignó al hacer la llamada (la forma de asignar los valores a las variables es por la posición, es decir, el primer valor será asignado a la primera variable de la lista de argumentos). Si el último de los argumentos de la función es el símbolo ..., significa que la función admite un número indeterminado de parámetros. Es responsabilidad del programador afrontar el tratamiento de los parámetros no declarados explícitamente.

Se puede terminar en cualquier momento la ejecución de la función usando la palabra return.

Además de lo anterior, dentro del cuerpo de la función está disponible la variable nargin. Su valor es asignado automáticamente al número de parámetros que se han pasado en la llamada. Esto puede permitirnos hacer un pequeño chequeo antes de continuar con la ejecución del resto del código y evitar fallos por falta de parámetros. Por ejemplo:

	function [x y] = polar2cartesiano(radio, angulo)
	  if(nargin!=2)
	    fprintf(2,"Error, el número de parámetros debe ser 2\n");
	    return
	  endif
	  x= radio*cos(angulo);
	  y= radio*sin(angulo);
	endfuncion
      

Excepto para pequeños "programillas de juguete", no es práctico tener que definir todas las funciones cada vez. En lugar de ello es posible guardarlos en ficheros de texto y así conservarlos para futuros usos.

Octave no requiere que se carguen las funciones antes de usarlas. Simplemente es necesario que se guarden en un fichero con extensión ".m", en un directorio de los indicados en la variable LOADPATH, y que el nombre del fichero coincida con el de la función.

Los scritps son simples ficheros de texto en el que se introducen las sentencias de la misma manera que se introducen en la línea de comandos. Su principal utilidad es definir un entorno de trabajo en cualquier momento, definiendo una serie de variables y/o funciones. Cada vez que queramos recuperar ese estado deberemos volver a invocar el script por su nombre (in la extensión). La única restricción es que la primera sentencia no debe ser la definición de una función. En caso contrario Octave pensará que se trata de un fichero de función y los resultados no serán los esperados.