Herramientas en GNU/Linux para estudiantes universitarios: | ||
---|---|---|
Anterior | Capítulo 2. Sintaxis de Octave | Siguiente |
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
Para más información sobre el path de búsqueda de ficheros de Octave consultar help -i LOADPATH. |
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:
Empiezan con la palabra clave function que indica el inicio de la declaración de una función de octave.
Opcionalmente sigue la declaración de las variables retornadas. Puede ser una única variable (de cualquier tipo permitida en octave) o una lista de variables entre corchetes ([]). Las variables pueden ser de distintos tipos.
Si no existe la lista de variables, tampoco deberá aparecer el signo igual y la función no devolverá ningún valor.
El nombre de la función
Opcionalmente sigue la lista de argumentos entre paren tesis () y separados por comas. Si no aparece la lista de argumentos la función no tendrá parámetros de entrada.
A continuación sigue el código o cuerpo de la función.
La función termina con la palabra end o endfunction.
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.