Diferencia entre revisiones de «Usuario:ManuelRomero/ProgramacionWeb/INAEM2021/Funciones/concepto»
De WikiEducator
(Página creada con «{{:Usuario:ManuelRomero/ProgramacionWeb/INAEM2021/Funciones/nav}}») |
|||
Línea 1: | Línea 1: | ||
{{:Usuario:ManuelRomero/ProgramacionWeb/INAEM2021/Funciones/nav}} | {{:Usuario:ManuelRomero/ProgramacionWeb/INAEM2021/Funciones/nav}} | ||
+ | __TOC__ | ||
+ | <div class=parrafo> | ||
+ | ==Funciones== | ||
+ | <br /> | ||
+ | {{MRM_Objetivo| | ||
+ | ;Las funciones es un elemento fundamental | ||
+ | *Permite crear código modular | ||
+ | *Una forma de estructurar nuestro programa | ||
+ | }} | ||
+ | ;Qué son las funciones | ||
+ | {{MRM_Definicion| | ||
+ | *Una función es una declaración de un conjunto de instrucciones que indentificamos con un nombre, al que le vamos a asignar una serie de acciones o instrucciones y de su ejecución podemos o no obtener un valor como resultado de su ejecución | ||
+ | }} | ||
+ | {{MRM_Puntos clave |Title =Son muy importantes| | ||
+ | ;Las funciones son la base de la programación modular: | ||
+ | Creamos nuestro programa como módulos que van haciendo acciones | ||
+ | ;Una función agrupa una serie de instrucciones relacionadas semáticamente | ||
+ | Por ejemplo mostrar_menu(), validar_usuario($usuario), dame_numero_par() | ||
+ | ;El identificador a de ser significativo semánticamente | ||
+ | Solo con leer el identificado debemos intuir qué hace esa función | ||
+ | ;Va a evitar duplicar código | ||
+ | Si vemos un conjunto de accinoes que repetimos muchas veces, | ||
+ | va a ser un claro indicador de que debemos de crear una función | ||
+ | ;Va a permitir hacer código más legible | ||
+ | Un código mucho más fácil de leer | ||
+ | ;Es una decisión del programador | ||
+ | No debemos obsesionarnos con crear funciones. | ||
+ | Surgirán según las veamos y concivamos, | ||
+ | ;Son una herramienta para facilitarnos crear el código, no para complicarnos buscando dónde poder poner una función | ||
+ | }} | ||
+ | {{MRM_Puntos clave |Title =Valor de retorno:Acciones o Procedimientos| | ||
+ | ;Existen una diferencia en cuanto a que retorne o no un valor | ||
+ | *Es este un concepto matemático: | ||
+ | Si una función no retorna valor, en realidad se llama procedimiento | ||
+ | <source lang=php> | ||
+ | function saludo(){ | ||
+ | echo "Hola cómo estás"; | ||
+ | } | ||
+ | </source> | ||
+ | Si una función devuelve un valor, es propiamente una función | ||
+ | *En otros lenguajes de programación, existe la diferencia entre función y procedimiento. En php no | ||
+ | *Cuando una función retorna un valor, usamos la palabra reservada '''''return''''' | ||
+ | }} | ||
+ | {{MRM_Puntos clave |Title =Los parámetros| | ||
+ | ;A una función le podemos pasar una serie de valores para que haga algo | ||
+ | *Estos valores que le pasamos se llaman Parámetros | ||
+ | * por ejemplo | ||
+ | <source lang=php> | ||
+ | function sumar ( $num1, $num2){ | ||
+ | $suma = $num1+$num2; | ||
+ | return $num1+$num2; | ||
+ | } | ||
+ | </source> | ||
+ | }} | ||
+ | Creamos nuestro programa como módulos que van haciendo acciones | ||
+ | ;Una función agrupa una serie de instrucciones relacionadas semáticamente | ||
+ | Por ejemplo mostrar_menu(), validar_usuario($usuario), dame_numero_par() | ||
+ | ;El identificador a de ser significativo semánticamente | ||
+ | Solo con leer el identificado debemos intuir qué hace esa función | ||
+ | ;Va a evitar duplicar código | ||
+ | Si vemos un conjunto de accinoes que repetimos muchas veces, | ||
+ | va a ser un claro indicador de que debemos de crear una función | ||
+ | ;Va a permitir hacer código más legible | ||
+ | Un código mucho más fácil de leer | ||
+ | ;Es una decisión del programador | ||
+ | No debemos obsesionarnos con crear funciones. | ||
+ | Surgirán según las veamos y concivamos, | ||
+ | ;Son una herramienta para facilitarnos crear el código, no para complicarnos buscando dónde poder poner una función | ||
+ | }} | ||
+ | |||
+ | |||
+ | <div class=slide> | ||
+ | ===Declaración de funciones=== | ||
+ | <source lang=php> | ||
+ | function nombreFuncion ($paramFormal1, $paramFormal2 ,...){ | ||
+ | //Instrucciones de la función | ||
+ | return $valorRetorno //Opcionalmente en caso de que devuelva algún valor la función | ||
+ | } | ||
+ | </source> | ||
+ | |||
+ | </div> | ||
+ | <div class=slide> | ||
+ | *Es importante diferenciar entre declarar una función e invocar a una función | ||
+ | *Algo obvio, pero importante | ||
+ | *En la declaración tenemos tres partes | ||
+ | #nombre o identificación de funciones | ||
+ | #parámetros formales entre paréntesis (Estos han de existir, aunque no haya parámetros) | ||
+ | #Cuerpo de la función, dentro de él puede estar la instrucción return, en cuyo momento termina la ejecución de la función y se vuelve a la siguiente instrucción del programa, siguiente a la invocación de la función. | ||
+ | </div> | ||
+ | |||
+ | |||
+ | <div class=slide> | ||
+ | ;Identificador de función | ||
+ | * El nombre de función es un identificador que empieza por una letra o guión bajo, seguido 0 o muchas letras, números o guiones bajos | ||
+ | {{Tip|Expresión regular para el identificador de funciones | ||
+ | '''''[a-zA-Z_f_][a-zA-Z0-9_]*''''' | ||
+ | }} | ||
+ | </div> | ||
+ | <div class=slide> | ||
+ | ;Parámetros formales | ||
+ | *Son nombres de variables que usaré al escribir el código o cuerpo de la función | ||
+ | *El nombre ha de ser significativo y se convertirán en variables locales a la función | ||
+ | *Una vez que se termina la función estas variables desaparecerán de memoria | ||
+ | {{MRM_Puntos clave|Title=parámetros formales| | ||
+ | Los parámetros formales son variables locales a la función}} | ||
+ | </div> | ||
+ | ===Proceso de creación / invocación de una función=== | ||
+ | ;Lo primero es declarar una función | ||
+ | *Esto implica dejar una zona de memoria identificada con el nombre de la función | ||
+ | *En contenido de esas posiciones de memoria serán las acciones de la función | ||
+ | *Estas acciones estarán establecidas no con valores reales, sino con los parámetros de la declaración | ||
+ | *Estos parámetros se conocen como parámetros formales | ||
+ | [[Archivo:declaracion_funcion.png]] | ||
+ | ;Invocación de función | ||
+ | *Es un tipo de instrucción, invocar a una acción o función. | ||
+ | [[Archivo:invocacion_funcion_1.png]] | ||
+ | *lo primero que ocurrirá es que voy a esa zona de memoria | ||
+ | [[Archivo:invocacion_funcion_2.png]] | ||
+ | *Lo siguiente es dar los valores reales (de la invocación) a los parámetros de la función (de la declaracion. | ||
+ | [[Archivo:invocacion_funcion_3.png]] | ||
+ | *Una vez que la función termina de ejecutarse, se retornará a la instrucción siguiente de la invocación | ||
+ | *Si la función devuelve algún valor, se recogerá y asignará a la variable de la instrucción de asignación desde la cual se invocó | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | <div class=slide> | ||
+ | {{MRM_Actividad|Title=Ejercicio usando funciones| | ||
+ | '''''Haz un programa donde en el programa principal se creen dos variables $a y $b''''' | ||
+ | *Crea una función que reciba como parámetros locales '''''$a''''' y '''''$b''''' | ||
+ | *La función visualizará el valor de las variables, las modificará y las volverá a visualizar | ||
+ | *El programa principal | ||
+ | #asignará valor a las variables | ||
+ | #las visualizará | ||
+ | #invocará a la función | ||
+ | #volverá a visualizar las variables | ||
+ | }} | ||
+ | </div> | ||
+ | <div class=slide> | ||
+ | *Una posible solución | ||
+ | <source lang=php> <?php | ||
+ | function a($a, $b){ | ||
+ | echo "Dentro de la función visualizando valores <hr />"; | ||
+ | echo "Valor de los parámetros \$a = $a \$b = $b <br />"; | ||
+ | $a+=5; | ||
+ | $b+=5; | ||
+ | echo "Valor de los parámetros \$a = $a \$b = $b <br />"; | ||
+ | echo "Salgo de la función"; | ||
+ | } | ||
+ | //Ahora considero programa principal | ||
+ | $a=100; | ||
+ | $b=200; | ||
+ | echo "En el main antes de invocar a la función visualizando variables<hr />"; | ||
+ | echo "Valor de variables \$a = $a \$b = $b <br />"; | ||
+ | a($a,$b); | ||
+ | echo "En el mail después de invocar a la función visualizando variables<hr />"; | ||
+ | echo "Valor de variables \$a = $a \$b = $b <br />"; | ||
+ | ?> | ||
+ | </source> | ||
+ | </div> | ||
+ | |||
+ | <div class=slide> | ||
+ | |||
+ | ===Parámetros formales: Valores y referencias=== | ||
+ | *Cómo hemos visto, los parámetros formales son valores pasados en la invocación a la función | ||
+ | *Si queremos que la función pueda modificar el valor de los valores de los parámetros, en este caso hemos de pasarlos por referencia | ||
+ | *En este caso lo que ocurre en realidad es que pasamos la dirección de memoria dónde se guarda el valor. | ||
+ | *La dirección de memoria, no la podremos visualizar ni operar con ella, pues en php no existe la aritmética de punteros o direcciones de memoria | ||
+ | </div> | ||
+ | |||
+ | <div class=slide> | ||
+ | ;Parámetros formales: Valores y referencias | ||
+ | Para pasar el parámetro por referencia, simplemente hay que poner el símbolo de dirección de memoria '''''&''''' antes del nombre de la variable en la declaración de parámetros | ||
+ | <source lang=php> | ||
+ | function nombre_funcion(&$paramRef1, &$paramRef2, $paramVal1){ | ||
+ | ... | ||
+ | } | ||
+ | </source> | ||
+ | </div> | ||
+ | |||
+ | |||
+ | <div class=slide> | ||
+ | {{MRM_Actividad|Title=Ejercicio usando funciones parámetros| | ||
+ | '''''Haz un programa donde en el programa principal se creen dos variables $a y $b y $c''''' | ||
+ | *Crea una función que reciba como parámetros locales '''''&$num1''''','''''&$num2''''' y '''''$num3''''' | ||
+ | *La función visualizará el valor de las variables, las modificará y las volverá a visualizar | ||
+ | *El programa principal | ||
+ | #asignará valor a las variables | ||
+ | #las visualizará | ||
+ | #invocará a la función | ||
+ | #volverá a visualizar las variables | ||
+ | }} | ||
+ | </div> | ||
+ | <source lang=php> | ||
+ | |||
+ | <?php | ||
+ | function a(&$num1, &$num2, $num3){ | ||
+ | echo "Dentro de la función visibilizando valores <hr />"; | ||
+ | echo "Valor de los parámetros \$num1 = $num1 \$num2 = $num2 \$num3 = $num3<br />"; | ||
+ | $num1+=5; | ||
+ | $num2+=5; | ||
+ | $num3+=5; | ||
+ | |||
+ | echo "Valor de los parámetros \$num1 = $num1 \$num2 = $num2 \$num3 = $num3<br />"; | ||
+ | echo "Salgo de la función"; | ||
+ | } | ||
+ | //Ahora considero programa principal | ||
+ | $a=100; | ||
+ | $b=200; | ||
+ | $c=300; | ||
+ | echo "En el main antes de invocar a la función visualizando variables<hr />"; | ||
+ | echo "Valor de variables \$a = $a \$b = $b \$c = $c <br />"; | ||
+ | a($a,$b,$c); | ||
+ | echo "En el mail después de invocar a la función visualizando variables<hr />"; | ||
+ | echo "Valor de variables \$a = $a \$b = $b \$c = $c <br />"; | ||
+ | ?> | ||
+ | </source> | ||
+ | <div class=slide> | ||
+ | ;Invocando funciones | ||
+ | *Una vez creada una función la podemos invocar como si fuera una instrucción del lenguaje | ||
+ | *No sin razón en determinados ambientes se conoce a las funciones y procedimientos como instrucciones virtuales ... | ||
+ | *En php puedo invocar a una función antes de declararla, siempre que la declare en el mismo fichero | ||
+ | </div> | ||
+ | |||
+ | <div class=slide> | ||
+ | |||
+ | |||
+ | {{MRM_Ejemplo|Title = ejemplo invocación a funciones| | ||
+ | {{Tip|Este código funcionará correctamente}} | ||
+ | <source lang=php> | ||
+ | <?php | ||
+ | a(5,6); | ||
+ | /*Mas instrucciones*/ | ||
+ | function a ($a, $b){ | ||
+ | echo "valor de $a"; | ||
+ | echo "valor de $b"; | ||
+ | } | ||
+ | </source> | ||
+ | }} | ||
+ | </div> | ||
+ | |||
+ | <div class=slide> | ||
+ | |||
+ | {{MRM_Ejemplo|Title = ejemplo invocación a funciones| | ||
+ | {{Tip|Este código no funcionará }} | ||
+ | <source lang=php> | ||
+ | <?php | ||
+ | a(5,6); | ||
+ | /*Mas instrucciones*/ | ||
+ | include ("funciones.php"); | ||
+ | ?> | ||
+ | </source> | ||
+ | *Contenido del ficheor funciones.php | ||
+ | <source lang=php> | ||
+ | <?php | ||
+ | function a ($a, $b){ | ||
+ | echo "valor de $a"; | ||
+ | echo "valor de $b"; | ||
+ | } | ||
+ | ?> | ||
+ | </source> | ||
+ | }} | ||
+ | </div> | ||
+ | |||
+ | |||
+ | |||
+ | <div class="slide"> | ||
+ | ===Variables dentro de una función=== | ||
+ | *Dentro de una función las variables que declaremos son locales a esa función. | ||
+ | *No podré acceder a su valor fuera de la función | ||
+ | *Esto también implica que dentro de una función no puedo acceder al valor de una variable definida fuera de la función | ||
+ | *Observa el siguiente ejemplo | ||
+ | <source lang=php> | ||
+ | <?php | ||
+ | |||
+ | |||
+ | function modifica_valor(){ | ||
+ | echo "Valor de <b>var1</b> dentro de función -$var1- <br /> "; | ||
+ | $var1++; | ||
+ | echo "Valor de <b>var1</b> dentro de función moficada -$var1- <br /> "; | ||
+ | } | ||
+ | |||
+ | $var1 = 20; | ||
+ | |||
+ | echo "Valor de <b>var1</b> en programa principal antes de invocar función: -$var1- <br />"; | ||
+ | modifica_valor(); | ||
+ | echo "Valor de <b>var1</b> en progrma principal después de invocar la función: -$var1- <br />"; | ||
+ | ?> | ||
+ | </source> | ||
+ | *Vemos que genera la siguiente salida | ||
+ | <source lang=bash> | ||
+ | Valor de var1 en programa principal antes de invocar función: -20- | ||
+ | Valor de var1 dentro de función -- | ||
+ | Valor de var1 dentro de función moficada -1- | ||
+ | Valor de var1 en progrma principal después de invocar la función: -20- | ||
+ | </source> | ||
+ | *Sin embargo si quieremos acceder al valor de '''''$var ''''' dentro de la función, sí que podemos | ||
+ | *Ĥemos de usar la palabra reservada '''''$global''''' | ||
+ | <source lang=php> | ||
+ | <?php | ||
+ | |||
+ | function modifica_valor(){ | ||
+ | global $var1; //Indicamos que esta variables se puede globalizar | ||
+ | echo "Valor de <b>var1</b> dentro de función -$var1- <br /> "; | ||
+ | $var1++; | ||
+ | echo "Valor de <b>var1</b> dentro de función moficada -$var1- <br /> "; | ||
+ | } | ||
+ | |||
+ | $var1 = 20; | ||
+ | |||
+ | echo "Valor de <b>var1</b> en programa principal antes de invocar función: -$var1- <br />"; | ||
+ | modifica_valor(); | ||
+ | echo "Valor de <b>var1</b> en progrma principal después de invocar la función: -$var1- <br />"; | ||
+ | ?> | ||
+ | </source> | ||
+ | *Ahora podemos observar cómo sí que se accede al valor dentro de la función | ||
+ | <source lang=bash> | ||
+ | Valor de var1 en programa principal antes de invocar función: -20- | ||
+ | Valor de var1 dentro de función -20- | ||
+ | Valor de var1 dentro de función moficada -21- | ||
+ | Valor de var1 en progrma principal después de invocar la función: -21- | ||
+ | </source> | ||
+ | </div> | ||
+ | </div> |
Última revisión de 18:04 13 dic 2023
Contenido
Funciones
|
- Qué son las funciones
|
Creamos nuestro programa como módulos que van haciendo acciones
Por ejemplo mostrar_menu(), validar_usuario($usuario), dame_numero_par()
Solo con leer el identificado debemos intuir qué hace esa función
Si vemos un conjunto de accinoes que repetimos muchas veces, va a ser un claro indicador de que debemos de crear una función
Un código mucho más fácil de leer
No debemos obsesionarnos con crear funciones. Surgirán según las veamos y concivamos,
|
Si una función no retorna valor, en realidad se llama procedimiento function saludo(){ echo "Hola cómo estás"; } Si una función devuelve un valor, es propiamente una función
|
function sumar ( $num1, $num2){ $suma = $num1+$num2; return $num1+$num2; }
|
Creamos nuestro programa como módulos que van haciendo acciones
- Una función agrupa una serie de instrucciones relacionadas semáticamente
Por ejemplo mostrar_menu(), validar_usuario($usuario), dame_numero_par()
- El identificador a de ser significativo semánticamente
Solo con leer el identificado debemos intuir qué hace esa función
- Va a evitar duplicar código
Si vemos un conjunto de accinoes que repetimos muchas veces, va a ser un claro indicador de que debemos de crear una función
- Va a permitir hacer código más legible
Un código mucho más fácil de leer
- Es una decisión del programador
No debemos obsesionarnos con crear funciones. Surgirán según las veamos y concivamos,
- Son una herramienta para facilitarnos crear el código, no para complicarnos buscando dónde poder poner una función
}}
Proceso de creación / invocación de una función
- Lo primero es declarar una función
- Esto implica dejar una zona de memoria identificada con el nombre de la función
- En contenido de esas posiciones de memoria serán las acciones de la función
- Estas acciones estarán establecidas no con valores reales, sino con los parámetros de la declaración
- Estos parámetros se conocen como parámetros formales
- Invocación de función
- Es un tipo de instrucción, invocar a una acción o función.
- lo primero que ocurrirá es que voy a esa zona de memoria
- Lo siguiente es dar los valores reales (de la invocación) a los parámetros de la función (de la declaracion.
- Una vez que la función termina de ejecutarse, se retornará a la instrucción siguiente de la invocación
- Si la función devuelve algún valor, se recogerá y asignará a la variable de la instrucción de asignación desde la cual se invocó
<?php function a(&$num1, &$num2, $num3){ echo "Dentro de la función visibilizando valores <hr />"; echo "Valor de los parámetros \$num1 = $num1 \$num2 = $num2 \$num3 = $num3<br />"; $num1+=5; $num2+=5; $num3+=5; echo "Valor de los parámetros \$num1 = $num1 \$num2 = $num2 \$num3 = $num3<br />"; echo "Salgo de la función"; } //Ahora considero programa principal $a=100; $b=200; $c=300; echo "En el main antes de invocar a la función visualizando variables<hr />"; echo "Valor de variables \$a = $a \$b = $b \$c = $c <br />"; a($a,$b,$c); echo "En el mail después de invocar a la función visualizando variables<hr />"; echo "Valor de variables \$a = $a \$b = $b \$c = $c <br />"; ?>