PROCEDIMIENTOS
Rutinas, subrutinas, funciones...
Para no tener que repetir las cosas.
Son trozos de código independientes que van a dedicarse a hacer una función concreta y que nos pueden devolver o no un valor.
Los vamos a llamar funciones. ¿Como definimos un elemento de estos? Nombrándolas.
El nombre seguirá las reglas para variables y la diferencia será que la primera letra será mayúscula y luego la técnica del camello.
“Cuando invocamos un procedimiento cedemos el control del código momentáneamente a ese trozo de código declarado en otro sitio.” Esto es una llamada de tipo estandar SINCRÓNICO o SÍNCRONO, siendo esta última la más correcta, porque no continuamos con uno hasta que no a terminado el otro” Las ASINCRONAS se ejecutan por su cuenta, el codigo sigue ejecutándose, se utilizan en procesos muy largos (ejemplo de AJAX con google maps).
Así surgen las variables globales, variables a nivel de módulo, y luego locales. Dentro de una función serán locales, como las de los bucles PARA.
Rutinas, subrutinas, funciones...
Para no tener que repetir las cosas.
Son trozos de código independientes que van a dedicarse a hacer una función concreta y que nos pueden devolver o no un valor.
Los vamos a llamar funciones. ¿Como definimos un elemento de estos? Nombrándolas.
El nombre seguirá las reglas para variables y la diferencia será que la primera letra será mayúscula y luego la técnica del camello.
“Cuando invocamos un procedimiento cedemos el control del código momentáneamente a ese trozo de código declarado en otro sitio.” Esto es una llamada de tipo estandar SINCRÓNICO o SÍNCRONO, siendo esta última la más correcta, porque no continuamos con uno hasta que no a terminado el otro” Las ASINCRONAS se ejecutan por su cuenta, el codigo sigue ejecutándose, se utilizan en procesos muy largos (ejemplo de AJAX con google maps).
Así surgen las variables globales, variables a nivel de módulo, y luego locales. Dentro de una función serán locales, como las de los bucles PARA.
- Globales en todo el programa,
- Modulo, solo en su módulo pero no es las funciones externas,
- Locales, sólo en bucles y funciones externas.
Las globales pueden inducir a error, si reutilizamos el código al tener variables globales tiene dependencias y habría que declarar esas variables o modificar mi código.
Declararemos las variables dentro de la función, para pasar los datos dentro de la función le daremos parámetros o argumentos de la función, la salida será la devolución de la función. Con una salvedad, en ocasiones puedo utilizar los argumentos también como salida.
Hay que pensar en las funciones como si se tratase de naves espaciales, donde el entorno que hay dentro es el entorno ideal para la función y todo lo que entra y sale esta controlado. Todo lo que necesite la función debe ir en ella, si algo no va en la función creará dependencia y dará problemas. Cuanto más aislada esté MEJOR.
Hay dos formas de definir las funciones, la metodología de programación genérica va a hacer algo de la forma más eficiente posible, pero va a estar pensada para poder adaptarse a distintas situaciones. Una función concreta es aquella que es capaz de dividir números enteros y devuelve un entero, y la genérica podrá dividir potencias, fracciones... etc. A mayor capacidad de abstracción que tengamos mejor.
El concepto de funciones esta muy asociado al concepto de módulo. Los módulos son trocitos de código para poder repartirlos en distintos programas. Pondremos nuestras funciones en un fichero aparte para luego poder enlazarlo en nuestro programa (linkado o linkar, in spanish Enlazar)
Las funciones podrán estar dentro del código del programa o podrán estar fuera, en nuestro pseudocódigo la definición de las funciones la haremos en hojas aparte que numeraremos, las declararemos en el código y diremos en que pagina estará definida.
Las funciones tienen también dos pasos, se declaran y se inicializan. El prototipo de la función es el nombre de la función, los parámetros que recibe y que devuelve. De manera que para declarar una función debemos poner,
DECLARO FUNCION NombreFuncion(lista de parámetros separados por comas) numero o texto o nada
-------
código de la función
-------
FIN FUNCION
Cuando queremos declarar la función en el mismo sitio a continuación de la declaración pondremos el código y al final indicaremos FIN FUNCION.
¿deben ir juntas? de momento sí.
Ejemplo:
FUNCION Suma (sumando1,sumando2)
DECLARO resultado=0
resultado=sumando1+sumando2
retorna resultado
FIN FUNCION
Los parámetros son variables que se declaran ahí arriba, están expuestos al exterior. Las variables que declare dentro del bloque de la función, son variables locales, de uso interno dentro de la función, nadie puede acceder a ellas desde fuera.
Estamos dentro de un programa:
DECLARO FUNCION Suma (sumando1,sumando2)
DECLARO resultado=0
resultado=sumando1+sumando2retorna resultado
FIN FUNCION
Suma(numero1,numero2) //aqui lanzamos el valor de numero1 a sumando1 y el del numero2 al sumando2
r=Suma(numero1,numero2) //asignamos lo que devuelve la función a la variable r
MOSTRAR Suma(numero1,numero2) //Mostraría lo que devuelve la función
Paso de valor, es pasar parámetros por valor, solo viaja el valor, no viaja la variable.
Pasar parametros por referencia, no pasamos el contenido, sino lo que pasamos es algo que va a identificar la variable con la que queremos trabajar, nos pasa la dirección de memoria donde están las variables.
FUNCION Suma( REF sumando1, REF sumando2)
.
.
.
.
.
Suma (numero1, numero2)
Los
pasaremos por referencia cuando queramos modificar el valor original.
Así podremos utilizar los parámetros de entrada también como salida, ya
que modifican el valor de las varibales (hay que tener mucho cuidado)VER ESQUEMA EN CUADERNO.
Es lo más peligroso que hay, los pasaremos por valor, así protegeremos
los datos y no interferimos en el trabajo del programa principal. Cuando
más cerrada sea una función mejor, siempre por valor.
Crearemos una función cuando una tarea se repite varias veces.
EJEMPLO
FUNCION DameNumeroPositivo() //devuelve un numero
DECLARO dato=0
HAZ
SOLICITA “Introduzca un número positivo:”, dato
MIENTRAS (dato<=0)
RETORNA dato
FIN FUNCION
Si queremos utilizar esta función...
miNumero=DameNumeroPositivo()
OTRO EJEMPLO
función concreta
FUNCION DameNumero0_10()
DECLARO dato=0
HAZ
SOLICITA “Introduzca numero entre 0 y 10 incluidos”, dato
MIENTRAS (dato<=0 OR dato>=0)
RETORNA dato
FIN FUNCION
MAS GENERICA: (cualquier rango de números que quiera calcular me servirá)
función genérica
FUNCION DameNumero(mensaje, desde, hasta)
DECLARO dato=0
HAZ
SOLICITA mensaje, dato
MIENTRAS (dato<desde OR dato>hasta)
RETORNA dato
FIN FUNCION
Que debemos hacer en una función y que NO:
Cosas que están fuera de la funcionalidad de la función. Dentro no se debe hacer nada que esté fuera de la funcionalidad de una función. Para entender esto nos trasladamos tres años antes, las funciones se hacen para el programador, no para los usuarios. No están destinadas a interactuar con el usuario, siempre las usaran programadores. Solo admitimos literales cuando la función debe mostrar un texto concreto al usuario. Ejemplo,
función concreta
FUNCION DameNumero0_10()
DECLARO dato=0
HAZ
SOLICITA “Introduzca numero entre 0 y 10 incluidos”, dato
MIENTRAS (dato<=0 OR dato>=0)
RETORNA dato
FIN FUNCION
Si es para un niño de 2 años no sirve, si tiene 9 diremos “introduce...”
EJEMPLO
INICIO
DECLARO sumando1=0, sumando2=0, dato=0
HAZ
SOLICITO “nº entre 1 y 10”, sumando1
MIENTRAS (sumando1<1 OR sumando1>10)
HAZ
SOLICITO “nº entre 1 y 10”, sumando2
MIENTRAS (sumando2<1 OR sumando2>10)
dato=sumando1+sumando2
MOSTRAMOS dato
FIN
Definimos una función para hacer los bucles.
FUNCION DameNumero(mensaje, desde, hasta) NUMERICO
DECLARO numero=0
HAZ
SOLICITO mensaje, numero
MIENTRAS(numero<desde OR numero>hasta)RETORNA numero
FIN FUNCION
Asi pues nuestro programa quedaría de la siguiente manera:
INICIO
DECLARO sumando1=0, sumando2=0, dato=0
DECLARO FUNCION DameNumero(mensaje, desde, hasta) NUMERICO
DECLARO numero=0
HAZ
SOLICITO mensaje, numero
MIENTRAS(numero<desde OR numero>hasta)RETORNA numero
FIN FUNCION
sumando1=DameNumero(“nº entre 1 y 10”, 1, 10)
sumando2=DameNumero(“nº entre 1 y 10”, 1, 10)
dato=sumando1+sumando2
MOSTRAMOS dato
FIN
ESTRUCTURA PSEUDOCÓDIGO
INICIO
DECLARO CONSTANTES
DECLARO VARIABLES
DECLARO FUNCIONES
CODIGO
FIN