Maison  >  Article  >  développement back-end  >  Pratique de la programmation fonctionnelle des fonctions Golang

Pratique de la programmation fonctionnelle des fonctions Golang

PHPz
PHPzoriginal
2023-05-15 23:33:091149parcourir

Golang est un langage de programmation puissant qui prend en charge le paradigme de programmation fonctionnelle. La programmation fonctionnelle est une approche de programmation orientée fonctions qui souligne que les fonctions sont des citoyens de premier ordre des langages de programmation et que les fonctions ne devraient avoir aucun effet secondaire. Dans cet article, nous explorerons comment utiliser les pratiques de programmation fonctionnelle dans Golang.

1. Les bases de la programmation fonctionnelle en Golang

Dans Golang, les fonctions sont des citoyens de premier ordre. Cela signifie que les fonctions peuvent être transmises et liées comme des variables. Par conséquent, les fonctions peuvent être traitées comme des valeurs, tout comme les entiers ou les chaînes. Golang fournit également des fonctions d'ordre supérieur, telles que mapper, réduire et filtrer, qui peuvent être utilisées pour traiter les types de collections (tels que des tableaux ou des tranches).

Ces fonctions d'ordre supérieur peuvent être utilisées pour effectuer certaines opérations de programmation fonctionnelle courantes. Par exemple, la fonction map mappe chaque élément d’une collection à un élément d’une autre collection. La fonction de réduction peut accumuler des éléments dans une collection. La fonction de filtre peut filtrer les éléments de la collection qui ne remplissent pas les conditions.

2. Pratique de la programmation fonctionnelle

Ci-dessous, nous utilisons un exemple pour démontrer comment pratiquer la programmation fonctionnelle dans Golang. Nous allons créer une fonction qui calcule la somme des carrés de tous les nombres d’un tableau. Supposons que nous ayons le tableau suivant :

numbers := []int{1, 2, 3, 4, 5}

Nous pouvons utiliser une boucle for pour calculer la somme des carrés de chaque élément :

sum := 0
for _, number := range numbers {
    sum += number * number
}

Cette boucle for utilise une somme cumulative, qui est initialisée à 0. Il parcourt ensuite chaque élément du tableau et ajoute son carré à l'accumulateur. Enfin, nous obtenons la somme des carrés de tous les nombres du tableau.

En utilisant la programmation fonctionnelle, nous pouvons simplifier ce code en un appel de fonction. Nous pouvons utiliser la fonction map pour mettre au carré chaque élément du tableau, puis utiliser la fonction réduire pour les accumuler. Voici une fonction qui implémente cette opération :

func square(n int) int {
    return n * n
}

func sum(numbers []int) int {
    squaredNumbers := Map(numbers, square)
    return Reduce(squaredNumbers, func(acc, n int) int {
        return acc + n
    })
}

Dans cette fonction, on définit d'abord une fonction carré, qui sert à calculer le carré d'un nombre. Ensuite, nous définissons une fonction somme qui reçoit un tableau d'entiers en paramètre et renvoie la somme des carrés de ce tableau.

Dans la fonction somme, nous utilisons la fonction Map pour mettre au carré chaque élément du tableau. Ensuite, nous utilisons la fonction Réduire pour accumuler les éléments dans le tableau au carré. La fonction Réduire reçoit deux paramètres : le premier paramètre est un tableau d'entiers et le deuxième paramètre est une fonction. Cette fonction permet d'effectuer une opération d'accumulation sur chaque élément du tableau. Dans cet exemple, nous utilisons une fonction anonyme pour accumuler des éléments.

3. Implémentation de fonctions d'ordre supérieur

Dans le code ci-dessus, nous utilisons les fonctions Map et Reduction. Ces fonctions n'existent pas dans la bibliothèque standard Golang. Cependant, nous pouvons implémenter ces fonctions nous-mêmes.

Tout d’abord, jetons un coup d’œil à l’implémentation de la fonction Map. La fonction Map reçoit deux paramètres : un tableau d'entiers et une fonction, qui servira à opérer sur chaque élément du tableau. La fonction Map renvoie un nouveau tableau d'entiers contenant le résultat de l'opération.

func Map(numbers []int, f func(int) int) []int {
    result := make([]int, len(numbers))
    for i, n := range numbers {
        result[i] = f(n)
    }
    return result
}

Dans la fonction Map, nous créons d'abord un nouveau résultat de tableau avec la même longueur que le tableau d'origine. Nous parcourons ensuite chaque élément du tableau d'origine, le transmettons à la fonction f sur laquelle opérer et stockons le résultat dans le nouveau tableau. Enfin, nous renvoyons ce nouveau tableau.

Ensuite, jetons un coup d'œil à l'implémentation de la fonction Réduire. La fonction Réduire reçoit deux paramètres : un tableau d'entiers et une fonction qui servira à accumuler chaque élément du tableau. La fonction Réduire renvoie une valeur entière, qui est le résultat accumulé.

func Reduce(numbers []int, f func(int, int) int) int {
    result := numbers[0]
    for _, n := range numbers[1:] {
        result = f(result, n)
    }
    return result
}

Dans la fonction Réduire, nous initialisons d'abord le résultat de l'accumulateur au premier élément du tableau. Nous parcourons ensuite les éléments restants du tableau et les accumulons à l'aide de la fonction f passée à la fonction Réduire. Enfin, nous renvoyons le résultat accumulé.

IV. Conclusion

Dans cet article, nous avons passé en revue les bases de la programmation fonctionnelle dans Golang et démontré comment utiliser la programmation fonctionnelle pour implémenter une fonction simple. En pratique, nous rencontrerons également des situations plus complexes. Cependant, nous pouvons utiliser des fonctions d'ordre supérieur comme Map et Reduction pour les gérer. Ces fonctions nous permettent de créer une logique complexe de manière simple et composable, rendant le code plus facile à lire, à maintenir et à tester.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn