Bonjour et bienvenue.
Dans cette conférence, je veux parler sur le renvoi de données à partir de fonctions.
Jusqu'à ce point, nous savons quoi une fonction est on sait pourquoi c'est utile,
on sait définir les fonctions on savoir transmettre des données aux fonctions.
Maintenant, nous voulons parler de la façon dont nous peut renvoyer des données à partir de
fonctions, ce qui est également très utile.
Dans notre exemple précédent, lorsque nous multipliez deux nombres, une fonction de
multiplication affiche les résultats de le calcul au terminal.
Souviens-toi, on avait ça déclaration printf là-dedans.
De plus, nous avons eu un exemple où nous étaient juste une fonction simple auparavant.
Nous venons d'imprimer les données à l'intérieur de la fonction.
Nous voulions être gentils au lieu de le faire sortir
parce qu'il fait en fait plus d'une chose.
Il l'a en fait imprimé, le des données ont été renvoyées et il
a imprimé les données dans la fonction principale.
Vous ne voudrez peut-être pas toujours résultats affichés par vos calculs.
La fonction devient plus flexible, plus générique, ce qui
lui permet d'être utilisé plus si vous pouvez renvoyer des données.
Ainsi, les fonctions peuvent renvoyer des données en utilisant une syntaxe spécifique dans c.
Nous devrions être familiers avec cela un peu
car rappelez-vous notre fonction principale au plus fin, nous retournons un peu de données
dans de nombreux exemples.
Nous avons donc été un peu exposés à cela.
Nous n'avons juste pas vraiment compris ce que cela signifie.
Jetons un autre regard sur le forme générale d'une fonction.
Rappelez-vous, cet en-tête de fonction.
Nous avions un type de retour qui était le mot qui a été défini pour la première fois.
Et puis nous avons eu le nom, et puis nous avions les paramètres séparés
par des virgules entre parenthèses.
Nous connaissons déjà le nom et les paramètres.
Cette première chose est le type de retour.
Le type de retour spécifie le type de données de la valeur
renvoyée par la fonction.
Les fonctions peuvent renvoyer n'importe quel type de données.
Vous devez juste informer le compilateur quel type de données vous retournez si.
C'est un int, un float, un double quoi qu'il en soit, vous devez le spécifier dans
l'en-tête de votre fonction.
Le type de retour.
Le type de retour que nous avons vu ici, et vous pouvez spécifier ce type de valeur
à renvoyer par une fonction tant que c'est un type légal dans c.
J'ai mentionné les principaux, doubler, flotter et ainsi de suite.
Mais vous pouvez aussi revenir énumérations et pointeurs.
Nous n'avons pas discuté de pointeurs, mais cela le rend très, très flexible lorsque
vous pouvez renvoyer des pointeurs.
Le type de retour peut être également éviter le type.
Vous voyez souvent ce mot-clé vide.
Nous comprenons maintenant ce que cela signifie.
Void signifie qu'aucune donnée va être retourné.
Si vous voyez vide avant le nom de la fonction, vous ne
renvoyez aucune donnée.
Si vous voyez du vide dans les paramètres list, vous ne transmettez aucune donnée.
Void est juste un mot-clé général qui pour les types de retour et pour les paramètres, vous remarquez également que vous
pouvez utiliser void comme indicateur également, mais nous y reviendrons
quand nous y arriverons.
Mais le vide est une façon de ne rien dire.
Et la raison pour laquelle vous incluez vide plutôt que de
ne rien inclure car il rend le programme plus lisible.
En fait, lorsque vous transmettez des données à un fonction et vous n'avez
aucune donnée en cours de transmission, vous pouvez avoir ce ne sont que des parenthèses vides.
C'est facile à lire si vous avez du vide là-dedans.
Idem avec un type de retour sauf le type de retour que vous devez avoir void.
Vous ne pouvez pas le laisser vide
Nul signifie qu'aucune donnée n'est va être retourné.
La déclaration de retour.
Nous avons parlé de la façon dont vous pouvez identifier quelles données vont être renvoyées mais
comment vous renvoyez réellement les données.
À l'intérieur du corps de la fonction, vous devez avoir une déclaration où vous pouvez dire
ce que vous allez retourner.
Parce que rappelez-vous le corps d'un La fonction peut avoir beaucoup de données.
Il peut avoir des variables locales, il peut si vous savez que
la fonction pourrait faire un calcul spécifique, peut-être faire plusieurs calculs, que
voulez-vous retourner.
Heureusement, il y a cette déclaration avec le mot-clé return.
Si vous fournissez le retour sans nom de variable après ou expression, cela
signifie que vous êtes juste quitter la fonction.
C'est similaire à une pause dans une boucle.
Tu reviens juste de la fonction.
Et vous pouvez fournir cela en fonctions définies comme nulles.
Cela montre clairement quand vous quittez la fonction.
Tu ne devrais vraiment avoir que le retour en un seul endroit
en bas de la fonction.
Nous y reviendrons plus tard, mais vous ne peut l'avoir nulle part dans une fonction.
Si vous le voyez n'importe où dans une fonction, cela signifie que vous
sautez hors de cette fonction.
La raison pour laquelle il est bon d'avoir en bas, c'est très clair
lorsque vous quittez la fonction.
Si vous avez plusieurs retours même si vous renvoyez des données tout au long
de votre fonction, c'est difficile à dire quand vous revenez.
Alors ce que j'aime faire dans mon fonctions est de créer des variables et de ne
revenir qu'une fois en bas.
Si j'ai besoin de rendre quelque chose dans une fonction ou je veux dire dans une instruction if spécifique dans une fonction
ou quelque chose que je définirai la variable et puis
le retournerai en bas.
Donc si vous êtes de retour et que vous n'a
rien après, cela signifie simplement que vous quittez le fonction sans aucune donnée renvoyée.
Ce n'est vraiment pas autant utilisé.
Vous ne l'utilisez que dans le vide fonction, ne renvoie pas de valeur.
La forme plus générale du L'instruction return renvoie une
variable ou une expression.
X plus y ou renvoyant x.
Ce formulaire de déclaration de retour a à utiliser avec le type de retour spécifié
dans l'en-tête de la fonction.
Si vous renvoyez un int, quelle que soit la variable ou l'expression que
vous renvoyez doit être un int.
Il doit s'évaluer à un int, si vous renvoyez un int.
Maintenant si tu tournes un double, il doit avoir une valeur pour doubler.
Souvenez-vous que vous pouvez en avoir beaucoup différents types de données renvoyées.
La valeur renvoyée au programme appelant est
la valeur qui résulte lorsque le l'expression est évaluée ainsi.
Si vous avez x plus y, il revient le résultat de cette expression et il doit être du
même type que le déclaration de fonction comme je l'ai mentionné.
Une fonction qui a des instructions dans le
corps de la fonction mais ne retourne pas de valeur doit avoir le retourne le type comme void, doit.
Vous ne pouvez pas ne pas avoir cela.
Si vous n'avez pas cela et que vous êtes ne renvoyant
aucune donnée, vous allez recevoir un message d'erreur.
Lorsque vous compilez le programme et il contient une fonction avec un type de retour
void qui tente de renvoie une erreur du compilateur de valeurs.
Annulé signifie pas de données de retour, ne le faites pas renvoie une variable une expression.
Si une fonction n'a pas de vide type de retour
et il a un type de retour valide, vous allez obtenir un message d'erreur
si le compilateur tente de renvoyer un type différent de un spécifié ou
s'ils sont simplement revenus sans rien après.
Alors faites attention à cela.
Ces mots-clés au début de la la déclaration fonctionnelle est importante.
Cela affecte directement la mise en œuvre de la fonction et la compilation va vous dire si vous vissez et vous ne renvoyez
pas les bonnes données ou si vous n'en retournez
aucune data ou si vous renvoyez des données alors que vous n'êtes
pas censé renvoyer des données.
Si l'expression aboutit à une valeur c'est différent d'un type différent
du type de retour dans la fonction en-tête, c essaiera de le convertir.
Le compilateur essaiera pour le convertir s'il le peut.
Donc par exemple si vous revenez un float et votre expression est I plus x avec
deux entiers, ça va pour simplement le convertir en flotteur.
Si vous renvoyez un int et vous avez
une expression qui fait un calcul flottant, il le convertira en un it.
Vous allez perdre des données là-dedans cas, mais il fera la conversion.
Ce n'est pas toujours possible pour faire la conversion.
Dans les cas où ce n'est pas possible, vous allez avoir une erreur
produite par le compilateur.
Si vous essayez de renvoyer un int lorsque vous
êtes censé renvoyer une chaîne ou lorsque vous essayez pour le
renvoyer lorsque vous êtes censé renvoyer une énumération, c'est va se plaindre du compilateur.
Vous pouvez également en avoir plus d'un return statement une fonction, je
l'ai mentionné brièvement et pourquoi vous ne voulez pas le faire.
Mais tu peux le faire.
Vous pouvez avoir plusieurs retours tout au long de la fonction.
Cela rend juste le code plus difficile à suivez parce que
vous sautez hors de la fonction partout.
Quand tu reviens et que tu as plusieurs valeurs de retour,
assurez-vous simplement à nouveau si vous avez une fonction qui
renvoie quelque chose, vous avez une expression ou une valeur de ce type ou il peut être converti.
Maintenant que nous avons parlé passer des données et renvoyer
des données, on sait invoquer une fonction, mais je veux
dire quelques autres choses sur l'invocation.
Vous appelez une fonction en utilisant simplement le nom de la fonction suivi
des arguments que vous passez qui sont entre les parenthèses, nous savons
que, jusqu'ici nous savons mais je voulez le déclarer formellement, c'est ainsi que vous
pouvez invoquer une fonction.
Lorsque vous appelez la fonction, le valeurs des arguments
que vous spécifiez entre les parenthèses vont être affectés à des paramètres à
l'intérieur de la fonction.
Les paramètres sont représentatifs variables avec un type de données.
Vous pouvez ensuite utiliser cette variable n'importe quel côté du corps de fonction.
Lorsque la fonction se termine ou s’exécute certain code, il utilisera les valeurs fournies comme arguments, comme
je l'ai mentionné.
Les arguments que vous spécifiez lorsque vous appeler une fonction doit correspondre
au numéro de type et paramètres dans l'en-tête de la fonction.
L'ordre compte aussi, je ne l'ai pas fait insister sur cela,
mais s'il dit int x double y, vous devez d'abord passez l'int puis le double.
Vous ne pouvez pas passer dans le double et int.
L'ordre est très, très précis.
Assurez-vous donc de transmettre les données comme un argument lorsque vous appelez
la fonction de la même manière que la fonction est déclaré dans l'en-tête de la fonction dans la
liste des paramètres, en passant les bons types est cela aussi.
Invoquer une fonction et attribuer les données renvoyées.
Si une fonction renvoie des données, le peut affecter ces données simplement en utilisant l'opérateur
égal et après le retour également ou vous pouvez le stocker dans une variable locale si
vous le souhaitez.
Cela fonctionnera également avec une expression.
Donc, vous pouvez dire retour x plus y, vous pouvez dire retourner x, vous pouvez
dire retourner une constante.
Cet exemple ici est après vous appelez l'appel lorsque vous souhaitez attribuer
les données renvoyées.
Donc vous pouvez dire int x est égal à mon appel de fonction, tout ce que
cette fonction retourne sera assigné à x.
Et si mon appel de fonction retourne x plus y, le résultat de x plus y
va être attribué à x.
Ainsi, vous pouvez attribuer les données qui renvoyé d'un appel
de fonction en ayant simplement une variable sur le côté gauche des égaux
et l'invocation de la fonction sur le côté droit des égaux.
La fonction d'appel n'a pas pour reconnaître ou traiter la valeur renvoyée
par une fonction appelée.
Tu n'as pas besoin d'avoir cette affectation là-bas.
Si une fonction renvoie des données et vous ne vous souciez pas de ces données, vous n'avez
pas du tout besoin d'avoir les égaux, vous pouvez simplement appeler la fonction.
Cela n'aurait pas vraiment de sens parce que s'il renvoie des données, cela
signifie que vous devez probablement regarder il, mais vous n'êtes pas obligé de le faire.
Le compilateur ne va pas vous plaindre si vous appelez
simplement une fonction et ne manipulez pas les données.
C'est à toi de décider comment tu souhaitez utiliser les données renvoyées
par les appels de fonction.
Voici un exemple d'invocation une fonction et renvoyant également les données
d'une fonction.
Dans cet exemple, multipliez deux nombres.
C'était juste comme l'exemple que nous avait précédemment, mais l'exemple
précédent n'a renvoyé aucune donnée.
L'exemple précédent affichait la sortie.
Dans cet exemple, nous sommes n'affiche aucune sortie.
Nous renvoyons les données et puis nous affichons la sortie
dans la fonction principale.
Ici, multiplions deux nombres prend deux entiers comme paramètres.
Nous multiplions ces deux entiers.
Et puis au lieu d'imprimer ceci montant ou la valeur, nous utilisons le mot-clé return
et nous sommes alors en spécifiant une variable nommée result, puis nous avons
le point-virgule pour la terminer.
Lorsque vous voyez ce mot-clé de retour à l'intérieur du corps de la fonction,
vous renvoyez ces données.
Et souviens-toi, tu peux avoir que plusieurs endroits.
Mais vous ne pouvez en renvoyer qu'un value, vous ne pouvez pas renvoyer plusieurs valeurs.
Donc, si vous avez le mot-clé return dans plusieurs endroits, il doit être à
l'intérieur d'une instruction if ou d'une boucle car vous sautez tout de suite.
Si vous avez un retour suivi de un autre retour, cela vous
donnera une erreur car cela vous dirait avoir deux retours dans les deux cas.
Tu reviens toujours à résultats, vous ne pouvez pas faire cela.
Mais le mot-clé de retour est important.
Vous renvoyez une variable.
Et puis tu vois dans le principal fonction à laquelle les données
renvoyées sont affectées une autre variable locale appelée result.
Vous remarquerez que nous utilisons les mêmes noms ici.
Cela a à voir avec la fonction portée dont
nous allons parler dans la prochaine conférence, variables par rapport aux variables globales.
Tout ce dont vous avez besoin pour faire attention dans cette conférence est le
fait que cette fonction a multiplié deux nombres renvoie des données.
Comment vous le retournez, vous le retournez en utilisant le mot-clé return
suivi de la variable de l'expression.
Vous remarquez également que la multiplication deux nombres spécifie le type de retour en
haut de l'en-tête de la fonction.
Il renvoie un int.
Nous devons donc retourner un int.
Vous remarquez également que lorsque nous attribuons les données de
la fonction principale, nous les affectons dans int.
Assigner ces très faciles nous ayez juste l'opérateur égal.
Si nous ne nous soucions pas des données, nous pourrait simplement appeler
multiplier deux numéros et ne rien faire avec mais.
Après avoir obtenu les données renvoyées à partir de la fonction, nous
l'imprimons ensuite à l'aide d'une fonction printf.
Cela rend la fonction plus cohésif qu'il prend des données.
Nous ne montrons pas réellement les résultats à l'intérieur de la fonction.
Il y a des moments où nous ne voulons pas
pour afficher les résultats, nous voulons simplement multiplier deux nombres puis nous pouvons vouloir diviser le produit.
Flexibilité avec la transmission des données et les données renvoyées sont un gros problème.
Ceci est un exemple simple.
Vous allez être exposé à ceci plus dans notre prochain défi.