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.