Hola y bienvenido.
En esta conferencia, quiero hablar sobre la devolución de datos de funciones.
Hasta este momento, sabemos lo que una función si sabemos por qué es
útil, sabemos cómo definir funciones que saber cómo pasar datos a funciones.
Ahora queremos hablar de cómo puede devolver datos de funciones, lo que
también es muy útil.
En nuestro ejemplo anterior, cuando multiplicar dos números, una función de multiplicación
mostraba los resultados de el cálculo en la terminal.
Recuerda, tuvimos eso declaración printf allí.
Además, tuvimos un ejemplo en el que eran solo una función simple antes.
Solo imprimimos datos dentro de la función.
Queríamos ser amables en lugar de sacarlo porque en
realidad está haciendo más de una cosa.
En realidad lo imprimió, el se devolvieron los datos y se
imprimieron los datos en la función principal.
Es posible que no siempre desee tener el resultados que se muestran sus cálculos.
La función se vuelve más flexible, más genérico que
a su vez permite su uso más si puede devolver datos.
Entonces las funciones pueden devolver datos usando una sintaxis específica en c.
Deberíamos estar familiarizados con esto un poco porque
recuerde nuestra función principal en el mismo Finalmente, estamos devolviendo bastantes datos en
muchos de los ejemplos.
Así que hemos estado expuestos a esto un poco.
Simplemente no lo hemos hecho realmente entendido lo que significa.
Echemos otro vistazo al forma general de una función.
Recuerde, este encabezado de función.
Teníamos un tipo de devolución que era la palabra que se definió por primera vez.
Y luego teníamos el nombre, y luego teníamos los parámetros separados por
comas entre paréntesis.
Ya conocemos el nombre y los parámetros.
Lo primero es el tipo de devolución.
El tipo de retorno especifica el tipo de datos del valor devuelto
por la función.
Las funciones pueden devolver cualquier tipo de datos.
Solo tienes que avisar al compilador qué tipo de datos está devolviendo si.
Es un int, un flotador, un doble sea lo que sea, debe especificarlo en el
encabezado de su función.
El tipo de devolución.
El tipo de devolución que vimos aquí mismo, y puede especificar ese tipo de valor para
ser devuelto por una función siempre que sea de tipo legal en c.
Mencioné los principales, doble, flotar y así sucesivamente.
Pero también puedes volver enumeraciones y punteros.
No hemos hablado de los consejos, pero lo hace muy, muy flexible
cuando puede devolver punteros.
El tipo de retorno puede también evitar el tipo.
A menudo ve esta palabra clave vacía.
Ahora entendemos lo que significa.
Vacío significa que no hay datos va a ser devuelto.
Si ve un vacío antes del nombre de la función, no
devuelve ningún dato.
Si ves vacío dentro de los parámetros list, no está pasando ningún dato.
Void es solo una palabra clave general que para los tipos de retorno y para los parámetros, también observa que puede
usar void como puntero también, pero llegaremos a eso cuando
lleguemos a eso.
Pero el vacío es una forma de no decir nada.
Y la razón por la que incluyes nulo en lugar de simplemente
no incluir nada porque hace que el programa sea más legible.
En realidad, cuando pasa datos a un función y no tiene
ningún dato que se esté pasando, puede tener solo deben ser paréntesis vacíos.
Es fácil de leer si tienes vacío allí.
Lo mismo con un tipo de retorno excepto el tipo de retorno que debe tener vacío.
No puedes dejarlo simplemente vacío.
Vacío significa que no hay datos va a ser devuelto.
La declaración de devolución.
Hemos hablado de cómo puedes identificar qué datos se devolverán, pero cómo
en realidad devuelve los datos.
Dentro del cuerpo de la función, Tienes que tener una declaración donde puedas decir
lo que vas a devolver.
Porque recuerda el cuerpo de un La función puede tener muchos datos.
Puede tener variables locales, puede tiene algo que sepa que la función
podría estar haciendo un cálculo específico, tal vez haciendo varios cálculos, ¿qué
quieres devolver?
Afortunadamente existe esta declaración con la palabra clave return.
Si proporciona la devolución sin nombre de variable después o expresión, eso
significa que estás simplemente saliendo de la función.
Es similar a una ruptura en un bucle.
Solo estas regresando de la función.
Y puede proporcionar esto en funciones que se definen como nulas.
Deja claro cuando estás saliendo de la función.
Realmente solo deberías tener el retorno en un lugar en la parte
inferior de la función.
Llegaremos a eso más tarde, pero tú no se puede tener en ninguna parte de una función.
Si lo ve en cualquier lugar una función, significa que está
saltando de esa función.
La razón por la que es bueno tener en la parte inferior es muy
claro cuando sale de la función.
Si tiene varias devoluciones incluso si devuelve datos a lo largo de su
función, es difícil de decir cuándo vas a regresar.
Entonces, ¿qué me gusta hacer en mi funciones es crear variables y solo regresa una
vez en la parte inferior.
Si necesito devolver algo en una función o me refiero a una declaración if específica en una función o
algo, estableceré la variable y luego la devolveré
en la parte inferior.
Entonces si tienes regreso y tu no tienes nada
después, eso solo significa que estás saliendo del función sin datos devueltos.
Esto realmente no se usa tanto.
Solo lo usas en el vacío función, no devuelve un valor.
La forma más general de la declaración de retorno está
devolviendo alguna variable o alguna expresión.
X más yo devolviendo x.
Esta forma de declaración de devolución tiene para usarse con el tipo de retorno que se especifica en
el encabezado de la función.
Si devuelve un int, Cualquiera que sea la variable o expresión que está
devolviendo tiene que ser un int.
Tiene que evaluar a un int, si devuelve un int.
Ahora, si estás cumpliendo un doble tiene que valorarse al doble.
Recuerde, puede tener muchos diferentes tipos de datos devueltos.
El valor que se devuelve para el programa de
llamada es el valor que resulta cuando el la expresión se evalúa así.
Si tiene x más y, está regresando el resultado de esa expresión y tiene que ser
del mismo tipo que el declaración de función como mencioné.
Una función que tiene declaraciones en el cuerpo
de la función pero no devuelve un valor debe tener el devuelve el tipo como vacío, tiene que hacerlo.
No puedes no tener eso.
Si no tienes eso y estas si no devuelve
ningún dato, recibirá un mensaje de error.
Cuando compila el programa y contiene una función con un tipo de retorno vacío
que intenta devuelve un valor de error del compilador.
Void significa que no se devuelven datos, no lo hagas devuelve una variable una expresión.
Si una función no tiene un vacío tipo de
retorno y tiene un tipo de retorno válido, obtendrá un mensaje de error
si el compilador intenta devolver un tipo diferente al un especificado o
si simplemente han regresado sin nada después.
Así que presta atención a esto.
Esas palabras clave al comienzo del La declaración funcional es importante.
Afecta directamente a la implementación de la función y la compilación te dirá si te equivocas y no devuelve
los datos correctos o si no devuelve
ningún datos o si devuelve datos cuando se supone que
no debe devolver datos.
Si la expresión da como resultado un valor que es diferente,
un tipo diferente al tipo de retorno en la función header, c intentará convertirlo.
El compilador intentará para convertirlo si puede.
Entonces, por ejemplo, si regresa un flotador y tu expresión es I más x
con dos ints, va para convertirlo en un flotador.
Si devuelve un int y tienes una
expresión que está haciendo un cálculo flotante, lo convertirá en un eso.
Vas a perder datos en ese caso, pero hará la conversión.
No siempre es posible para hacer la conversión.
En los casos en que no sea posible, vas a tener un error
producido por el compilador.
Si está intentando devolver un int cuando se supone
que debes devolver una cadena o cuando estás intentando para devolverlo
cuando se supone que debes devolver una enumeración, es va a quejarse el compilador.
También puede tener más de uno return declaración una función,
mencioné esto brevemente y por qué no quieres hacerlo.
Pero puedes hacerlo.
Puedes tener múltiples devoluciones a lo largo de la función.
Solo hace que el código sea más difícil de seguir porque
estás saltando de la función por todos lados.
Cuando regreses y tengas múltiples valores de retorno, solo asegúrate
de nuevo si tienes una función que está
devolviendo algo, tienes una expresión o un valor de ese tipo o se puede convertir.
Ahora que hemos hablado de pasando datos y devolviendo datos,
sabemos cómo invocar una función, pero quiero decir un par
de cosas más sobre la invocación.
Llamas a una función simplemente usando el nombre de la función seguido
de los argumentos que pasa que son entre paréntesis, sabemos
que, hasta donde sabemos, pero yo quiere declararlo formalmente, así es como puede
invocar una función.
Cuando llamas a la función, el valores de
los argumentos que especifique entre paréntesis se asignarán a los parámetros
dentro de la función.
Los parámetros son representativos variables con un tipo de datos.
Luego puedes usar esa variable cualquier lado del cuerpo de la función.
Cuando la función sale o se ejecuta cierto código, usará esos valores proporcionados como
argumentos, como mencioné.
Los argumentos que especifica cuando llamar a una función debe coincidir en el número de
tipo y la secuencia cuando el parámetros en el encabezado de la función.
El orden también importa, yo no enfatizar eso, pero si dice
int x doble y, primero tienes que pasar en el int luego el doble.
No se puede pasar el doble y el int.
El orden es muy, muy específico.
Así que asegúrese de pasar los datos como un argumento cuando invoca
la función de la misma manera que la función se declara en el encabezado de la función en
la lista de parámetros, pasando los tipos correctos es eso también.
Invocar una función y asignando los datos devueltos.
Si una función devuelve datos, la La función puede asignar esos datos simplemente usando
el operador igual y después la devolución también o puede almacenarla en una variable local
si lo desea.
También funcionará con una expresión.
Entonces puedes decir return x plus y, puedes decir return x, puedes
decir return una constante.
Este ejemplo aquí es después de ti invoca la llamada cuando quieras asignar los datos
que se devuelven.
Entonces puedes decir que int x es igual a mi llamada a la función, lo que sea que
devuelva esa función se asignará a x.
Y si mi llamada a la función regresa x más y, el resultado de x más
y se asignará a x.
Para que pueda asignar los datos que devuelto de una llamada
de función con solo tener una variable en el lado izquierdo de los iguales
y la invocación de la función en el lado derecho de los iguales.
La función de llamada no tiene para reconocer o procesar el valor
devuelto por una función llamada.
No necesitas tener esa asignación allí.
Si una función devuelve datos y no te preocupas por esos datos, no tienes
que tener iguales en absoluto, simplemente puede invocar la función.
Realmente no tendría sentido porque si está devolviendo datos,
significa que probablemente deba mirar hacerlo, pero no tienes que hacerlo.
El compilador no va a quejarse si simplemente invoca
una función y no maneja los datos.
Depende de ti como desea utilizar los datos que se devuelven
de las llamadas a funciones.
Aquí hay un ejemplo de invocación una función y también devolver datos de
una función.
En este ejemplo, multiplique dos números.
Este fue como el ejemplo que previamente, pero el ejemplo
anterior no devolvió ningún dato.
El ejemplo anterior mostró la salida.
En este ejemplo, estamos no muestra ninguna salida.
Estamos devolviendo los datos y luego mostramos la salida
en la función principal.
Aquí nuestro multiplica dos números toma dos enteros como parámetros.
Multiplicamos esos dos números enteros.
Y luego, en lugar de imprimir esto cantidad o el valor, usamos la palabra
clave return y luego especificando una variable llamada resultado y luego tenemos el
punto y coma para terminarla.
Cuando vea esa palabra clave de retorno dentro del cuerpo de la función, estás
devolviendo esos datos.
Y recuerda, puedes tener que múltiples lugares.
Pero solo puedes hacer que te devuelva uno value, no puede devolver varios valores.
Entonces, si tiene la palabra clave return en en varios lugares, tiene que estar
dentro de una instrucción if o bucle porque estás saltando en ese momento.
Si tiene una devolución seguida de otra vuelta, te
dará un error porque te diría tienen dos retornos en ambos casos.
Siempre estás volviendo a resultados, no puede hacer eso.
Pero la palabra clave de retorno es importante.
Estás devolviendo una variable.
Y luego ves en la principal función a la que se asignan los
datos que se devuelven otra variable local llamada resultado.
Notarás que estamos usando los mismos nombres aquí.
Esto tiene que ver con la función alcance del
que vamos a hablar en la próxima conferencia, local variables versus variables globales.
Todo lo que necesitas para prestar atención en esta conferencia es el hecho
de que esta función se multiplicó dos números devuelven datos.
Como lo devuelves, lo devuelves utilizando la palabra clave return seguida
de la variable de la expresión.
También notas que la multiplicación dos números especifica el tipo de retorno en la parte
superior del encabezado de la función.
Está devolviendo un int.
Entonces tenemos que devolver un int.
También nota que cuando asignamos los datos en la
función principal, los estamos asignando en int.
Asignarlos muy fácilmente solo tenga el operador igual.
Si no nos importaban los datos, podría simplemente llamar a multiplicar dos
números y luego no hacer nada con él, pero.
Después de que obtengamos los datos devueltos de la función, luego
lo imprimimos usando una función printf.
Esto hace que la función sea más cohesivo que toma datos.
En realidad, no estamos mostrando los resultados dentro de la función.
Hay momentos en los que no queremos para mostrar
los resultados, solo queremos multiplicar dos números y luego es posible que queramos dividir el producto.
Flexibilidad con la transferencia de datos y los datos que se devuelven son un gran problema.
Este es un ejemplo simple.
Vas a estar expuesto a esto más en nuestro próximo desafío.