Maison > développement back-end > Golang > Parler de programmation fonctionnelle depuis la fermeture du langage Go

Parler de programmation fonctionnelle depuis la fermeture du langage Go

Libérer: 2020-01-07 17:44:41
avant
2773 Les gens l'ont consulté

Parler de programmation fonctionnelle depuis la fermeture du langage Go

Cet article apprend la programmation fonctionnelle sous les aspects suivants :

1. Quelle est la relation entre les formules mathématiques et la programmation fonctionnelle

Pour donner un exemple simple, il existe un concept en mathématiques appelé cartographie (y=f(x)). La plus familière devrait être la fonction quadratique (parabole y=a*x*x+b*x+c)

Maintenant, le codage implémente la valeur d'un certain point sur la parabole. Nous savons que a, b. , c sont des paramètres, x est la variable indépendante et y est la variable dépendante. Si c'était avant, je pourrais l'implémenter comme ça (afin de commémorer le c++ que je n'ai pas écrit depuis longtemps, je l'écrirai en c++)

double getParabola(double a,double b,double c,double x) {
     return a*x*x+b*x+c;
}
Copier après la connexion

Question 1. Étant donné Parabole, trouvez la valeur lorsque x=2, x=3, x=4, c'est la méthode suivante

resultA = getParabola(a,b,c,2)
resultB = getParabola(a,b,c,2)
resultC = getParabola(a,b,c,2)
Copier après la connexion

C'est une méthode normale dans le programme. Cependant, d’un point de vue mathématique, existe-t-il un moyen de devenir cohérent avec la pensée mathématique ? Ce qui suit est une autre de mes implémentations (implémentée ici en utilisant go, car je sais écrire en C++),

func getParabola(aa,bb,cc float32){
    var a = aa
    var b = bb
    var c = cc
 
    a := func(x float32) {
           return a*x*x+b*x+c
    }
 
    return a
}
Copier après la connexion

Ensuite, également pour la question 1, la solution est la suivante

parabola := getParabola(a,b,c)
 
resultA := parabola(2)
resultB := parabola(3)
resultC := parabola(4)
Copier après la connexion

est N'est-ce pas la même chose que trouver la valeur d'une fonction ? Les relations mathématiques sont donc bien représentées dans la programmation fonctionnelle.

2. Quelles sont les caractéristiques de la programmation fonctionnelle et quels concepts Go prend en charge

La programmation fonctionnelle a trois caractéristiques majeures

1. Immuabilité des variables : Une fois qu'une variable reçoit une valeur, elle ne peut plus être modifiée. Si des modifications sont nécessaires, elles doivent être copiées puis modifiées. Dans Go, une fois qu'une variable chaîne reçoit une valeur, elle ne peut pas être modifiée comme c[2]='a' comme en C++, elle doit plutôt être explicitement convertie en []byte puis modifiée. Mais c'est déjà un autre morceau de mémoire.

2. Citoyens fonctionnels de première classe : les fonctions sont également des variables et peuvent être transmises dans le programme sous forme de paramètres, de valeurs de retour, etc. Cette fonctionnalité doit être prise en charge à la fois par C++ et Go.

3. Récursion de queue : Le concept de récursion a été appris dans la séquence de Fibonacci. Si la récursion est très profonde, la pile peut exploser et provoquer une dégradation significative des performances. Quant à la technologie d'optimisation de la récursion de queue, si le compilateur la prend en charge, la pile peut être réutilisée dans chaque récursion (la récursion de queue signifie que l'appel récursif se produit à la dernière étape. À ce stade, les résultats précédents sont passés en paramètres à la dernière étape. de l'appel, donc l'état précédent n'a aucun effet, donc la pile peut être réutilisée).

Techniques courantes en programmation fonctionnelle

1. map&reduce&filter

map est utilisé pour appeler la même fonction pour chaque entrée afin de produire une sortie, telle que for_each en c++, map en hadoop, map en python, etc.

reduce est utilisé pour ajouter chaque entrée à la sortie précédente pour obtenir la sortie suivante, comme réduire en python et hadoop

filter est utilisé pour le filtrage, comme count_if de c++, etc. .

2. Récursion

3. Pipeline

Placez l'instance de fonction dans un tableau ou une liste, puis transmettez les données à la liste d'actions, et l'entrée est transmise séquentiellement. à chaque fonction fonctionne (ce qui signifie que la sortie de chaque fonction est utilisée comme entrée d'une autre fonction, les données circulent et le calcul est fixe, similaire au concept de tempête), et finalement nous obtenons le résultat souhaité.

4. Autres (à étudier plus en détail)

3. Programmation fonctionnelle et efficacité opérationnelle

Le concept le plus important de la programmation fonctionnelle est les équations de fonction. sont des citoyens de première classe, les fonctions et les variables sont les mêmes. Peut être utilisé comme paramètres, valeurs de retour, etc. L'utilisation d'instructions d'affectation est déconseillée, la récursivité est donc utilisée plus souvent, donc l'efficacité de la programmation fonctionnelle sera certainement inférieure.

Ce que j'utilise plus récemment, c'est la fermeture. Le concept de fermeture est un environnement (une ou plusieurs variables) plus une fonction. Chaque fois que l'expression de fermeture est évaluée, un isolement est obtenu. Fonction ordinaire.Une fonction ordinaire est un morceau de code exécutable.Tant que l'entrée est déterminée, la position d'appel est également déterminée. Par exemple, dans l'exemple de parabole ci-dessus, appeler

a:=getParabola(0.2,0.1,0.3)
b:=getParabola(0.1,0.1,0.4)
Copier après la connexion

entraînera deux paraboles. La raison pour laquelle je pense que l'efficacité sera réduite est que la clôture elle-même est un processus d'évaluation et d'affectation, impliquant la création et la destruction de variables. Bien sûr, je n’ai pas réellement testé les performances. Si l’efficacité du serveur des versions ultérieures diminue, c’est peut-être un élément à prendre en compte.

Pour plus de connaissances sur le langage go, veuillez faire attention à la colonne tutoriel sur le langage go sur le site Web PHP chinois.

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!

Étiquettes associées:
go
source:cnblogs.com
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal