Golang 5 : Les fonctions
Les Fonctions
C'est quoi une fonction?
Une fonction est un bloc de code qui performe une tâche spécifique. Une fonction prend en paramètre des entrées et fait des calculs sur ces entrées et génère une sortie.
Déclaration d'une fonction
Le syntaxe général de la déclaration d'une fonction en Go est:
func nomfonction(nomduparametre type) returntype {
//le corps de la fonction
}
La déclaration de la fonction commence avec le mot clé func
suivi du nomfonction
. Les paramètres sont indiqués entre () suivis de returntype
de la fonction. Le syntaxe utilisé pour la déclaration d'un paramètre est le nom du paramètre suivi du type de paramètre. On peut spécifier autant de paramètres qu'on veut(paramètre1 type, paramètre2 type). Ce qui se trouve entre les {} est le corps de la fonction.
Les paramètres et le return type sont optionnels dans une fonction. Par conséquent le syntaxe suivant est aussi valide:
func nomfonction(){
}
Une fonction simple
On va écrire une fonction qui prend en paramètre le prix d'un produit et son numéro et qui retourne le prix total en multipliant le nombre de produits par le prix unitaire comme suivant:
func calculprixtotal(prix int, no int) int {
var prixTotal = prix * no
return prixTotal
}
Si deux paramètres consécutifs ont le même type, on peut éviter d'écrire le type à chaque fois, comme suivant:
func calculprixtotal(prix , no int) int {
var prixTotal = prix * no
return prixTotal
}
Maintenant qu'on a construit la fonction, le syntaxe pour l'appeler est nomfonction nomfonction(paramètres)
. La fonction ci-dessus peut être appelée en utilisant le code suivant:
calculprixtotal(12 , 10)
Voici le programme complet qui fait appel à la fonction ci-dessus et qui retourne le prix total.
package main
import (
"fmt"
)
func calculprixtotal(prix, no int) int {
var prixTotal = prix * no
return prixTotal
}
func main() {
prix, no := 10, 10
prixTotal := calculprixtotal(prix, no )
fmt.Println("Le prix total est", prixTotal)
}
Le programme ci-dessus va retourner:
Le prix total est 100
Retour de plusieurs valeurs
Il est possible qu'une fonction retourne plusieurs valeurs. On va écrire une fonction qui prend en paramètres la longueur et la largeur d'un rectangle et qui retourne l'aire et le périmètre du rectangle:
package main
import (
"fmt"
)
func rectInf(longueur, largeur float64)(float64, float64) {
var surface = longueur * largeur
var perimetre = (longueur + largeur) * 2
return surface, perimetre
}
func main() {
surface, perimetre := rectInf(12.7, 8.7)
fmt.Printf("Surface %f Perimetre %f", surface, perimetre)
}
La fonction ci-dessus retourne deux valeurs:
Surface 110,49 Perimetre 30,1
Les valeurs retournées nommées
Il est possible de retourner des valeurs nommées d'une fonction. Si une valeur retournée est nommée, elle peut être considérée comme une valeur déclarée dans la première ligne de la fonction.
La fonction rectInf peut être réécrite en utilisant les valeurs retournées nommées comme suivant:
func rectInf(longueur, largeur float64)(surface, perimetre float64) {
surface = longueur * largeur
perimetre = (longeur + largeur) * 2
return //pas de valeur explicite retournée
}
surface et perimetre sont les valeurs retournées nommées dans la fonction ci-dessus. Notez que la déclaration return dans fonction ne retourne pas explicitement une valeur car surface
et perimetre
sont indiqués comme étant des valeurs return, elles sont automatiquement retournées quand la déclaration return est rencontrée.
L'identificateur Blank
__ est considéré comme l'identificateur blank en Go. Il peut être utilisé à la place de n'importe quelle valeur de n'importe quel type.
La fonction rectInf retourne la surface et le périmètre du rectangle. Si on a besoin que de la surface du rectangle, on fait intervenir __ comme suivant:
package main
import (
"fmt"
)
func rectInf(longueur, largeur float64) (float64, float64) {
var surface = longueur * latgeur
var perimetre = (longueur + largeur) * 2
return surface, perimetre
}
func main() {
surface, _ := rectInf(12.8, 8.9) // perimetre ecarté
fmt.Printf("Surface %f ", surface)
}
Posted on Utopian.io - Rewarding Open Source Contributors
Thank you for the contribution. It has been approved.
You can contact us on Discord.
[utopian-moderator]
Hey @raptorjesus I am @utopian-io. I have just upvoted you!
Achievements
Suggestions
Get Noticed!
Community-Driven Witness!
I am the first and only Steem Community-Driven Witness. Participate on Discord. Lets GROW TOGETHER!
Up-vote this comment to grow my power and help Open Source contributions like this one. Want to chat? Join me on Discord https://discord.gg/Pc8HG9x