Apprendre la programmation fonctionnelle pour Kotlin ?

Le problème exposé dans ce sujet a été résolu.

Bonsoir. Je suis en effet en plein apprentissage du langage Kotlin qui est comme convenu orientée objet et fonctionnel.

Ma question est la suivante : Est-ce obligatoire ou vivement conseillé d’apprendre la programmation fonctionnelle afin de correctement coder en Kotlin ?

Évidemment je pense que beaucoup vont répondre "oui", mais je suis à court de tutoriel et je me perd vraiment dans l’apprentissage de ce paradigme; J’ai essayé de m’initier légèrement à Haskell ou OCaml mais je ne m’y connait absolument pas : Je trouve la syntaxe compliqué encore à ce stade pour moi, je suis en manque de ressources afin d’apprendre correctement pour un novice comme moi.

Merci d’avance pour votre aide.

+0 -0

C’est ton premier language de programmation? Parce que si c’est le cas, je ne peux que te conseiller de commencer comme moi par le Python dont la syntaxe est beaucoup plus simple et qui te permettra de mieux appréhender l’objet et la programmation en général.

Je pense que le fonctionnel ne s’apprends pas en commençant par un langage précis, parce que finalement c’est juste des concepts abstraits convertis au final en 0 et 1 selon des règles de syntaxes.

Par exemple des ligne de Python, C ou Kotlin feront toujours la même chose, seul les règles de syntaxes changent ainsi que le raisonnement derrière. Donc il ne faut pas oublier que l’info c’est juste du binaire auquel on a appliqué des concepts abstraits.

Si on se fondai sur ton raisonnement, tout le monde devrai apprendre le binaire, l’assembleur, les langages "bas niveau" (même s’il n’y a pas vraiment de différence entre ceux "haut niveau", ces derniers gèrent juste automatiquement des fonctionnalités, je pense par exemple aux typage dynamique, aux pointeurs…) pour faire des langages comme Python, alors que c’est l’inverse qui est conseillé (et encore, on peut coder très bien sans toucher au binaire, assembleur et autres instruments de tortures cérebrale :p ). Et puis faut bien commencer un jour! Lance toi juste avec un bon tuto (que je peux pas te donner, vu que je connais rien au fonctionnel) et quelque jours après t’auras appris les bases.

Re Toxic !

Alors non ce n’est pas mon premier langage de programmation, ça va faire bientôt un an et demi que j’apprends chaque jours en autodidacte Python qui est d’ailleurs mon gros coup de cœur et Java. C++ aussi mais un bref apprentissage; j’ai laissé tombé étant donné que c’est un langage est très vaste pour un type de mon niveau pour l’instant.

Pour répondre à ton troisième paragraphe je pense que tu te trompe. Je part du principe qu’un langage de programmation devrait être apprit est choisi par ce qu’il offre (Kotlin -> POO, prog. fonctionnel) et je trouve cela dommage d’apprendre ce langage puis de l’utilisé si je suis une bille en programmation fonctionnel.

Je ne dis pas non plus que je suis le champion de la POO, mais c’est un paradigme que je sais plus ou moins utiliser, j’ai fini d’apprendre les basses, il ne me manque plus qu’à approfondir je suppose.

Du coup voilà, je m’acharne sur la doc de Kotlin à comprendre les fonctionnalités fonctionnels mais je ne comprend pas, il y aurait t-il des ressources sur des sites ou blogs francophones ?

Merci :) !

+0 -0

Les lambdas, c’est juste du sucre syntaxique, pour t’éviter un peu d’écriture de code. C’est tout. Rien à voir avec la programmation fonctionnel. Il en existe aussi en Java avec l’aide de librairie ou en utilisant Java 8.

+0 -4

OK, en fait c’est assez simple. Visiblement, tu connais déjà Python, et ça tombe bien : il y a l’équivalent en Python.

Tu peux jeter un coup d’oeuil à ce qu’on fait généralement avec le mot-clé lambda et de manière générale au “closures” : on peut très bien imbriquer des fonctions définies avec def et faire des choses rigolottes.

Franchement, je pense qu’il n’y a pas de honte à faire de la programmation fonctionnelle avec Python et que tu peux envisager de travailler ça.


Les lambdas, c’est juste du sucre syntaxique, pour t’éviter un peu d’écriture de code. C’est tout. Rien à voir avec la programmation fonctionnel.

Dans le cas de Java, oui parce que Java supportait déjà les classe internes qui peuvent émuler plus ou moins des closures (enfin, en mettant le mot clé final aux variables à “enfermer” si mes souvenirs sont bons) et des fonctions de premier ordre. Mais si tu prends un autre langage comme par exemple C89 (où il n’y a aucun concept de classe ni quoi que ce soit), tu peux voir que du sucre syntaxique ne suffit pas forcément pour émuler ça.

+2 -0

D’accord je vous remercie, j’avais déjà entendu parlé des fonctions lambda et çe me rassure de savoir qu’en Kotlin, ce n’est ni plus ni moins que du sucre syntaxique. Maintenant ce qui me fait légèrement titiller c’est le concept de "Higher-Order Functions", ça ma l’air d’avoir une véritable utilité dans la programmation fonctionnel non ?

+0 -0

Maintenant ce qui me fait légèrement titiller c’est le concept de "Higher-Order Functions", ça ma l’air d’avoir une véritable utillité ça non ??

Oui, c’est indispensable en fait. Ça permet de passer une fonction en paramètre d’une autre, de retourner une nouvelle closure depuis une fonction, et bien plus encore.

Petit exemple en Python :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
def find(list, predicate):
    for item in list:
        if predicate(item):
            return item

people = [
    {'name': 'toto', 'age': 34},
    {'name': 'tata', 'age': 35},
    {'name': 'titi', 'age': 36},
]

# Affiche {'name': 'tata', 'age': 35}
find(people, lambda person: person['name'] == 'tata')

Ici, grâce au fait que les fonctions soient d’ordre supérieur, je peux en passer une en paramètre d’une autre. Et c’est bien pratique.

(Note que cette façon fonctionnelle de faire les choses n’est pas très pythonique, en général les gens utilisent plutôt des compréhensions, mais ici c’est pas grave, c’est juste pour jouer)

+3 -0

Salut,

Alors tout d’abord il faut bien être conscient que la programmation fonctionnelle est complètement différente de la programmation avec un langage impératif et/ou objet. Les concepts de l’un ne sont pas directement transposables à l’autre, il faut donc beaucoup de temps et de pratique avant de bien tous les assimiler.

Dans le lien que tu donnes il y a notamment un concept fondamental en fonctionnel qui sont les fonctions d’ordre supérieur. Alors que ce sont les variables (et donc des changements d’état) qui sont au cœur d’un programme en style impératif/objet, ce sont les fonctions et l’application de fonctions qui sont essentielles à un programme fonctionnel. On y manipule tellement les fonctions que l’on peut les passer en argument à d’autres fonctions et que les fonctions peuvent elles-même renvoyer des fonctions, c’est ça qu’on appelle donc fonctions d’ordre supérieur. Comme Hugo l’a dit les lambdas sont du sucre syntaxique pour construire des fonctions anonymement, on s’épargne ainsi de les définir avec un nom car on ne souhaite les utiliser qu’à un seul endroit du code.

Je ne connais pas Kotlin mais il y a un exemple sur wiki:

1
2
3
fun <T> twice(g: (T)->T): (T)->T = {g(g(it))}
fun f(x:Int) = x + 3
println(twice(::f)(7)) // 13

Ici, twice est une fonction qui prend en argument une autre fonction (appelé g) et retourne une fonction appliquant g 2 fois. Ensuite une fonction f est définie qui ajoute 3 à son argument. Ainsi twice(::f) produit une fonction qui ajoute 3 puis 3 et à laquelle on applique 7.

Je ne connais pas Kotlin donc j’espère ne pas me tromper. J’aurais plutôt tendance à te conseiller d’apprendre Haskell ou Ocaml car ils encouragent vraiment à adopter un style fonctionnel propre là ou Kotlin semble mélanger POO et fonctionnel.

EDIT: Oups grillé par motet-a pendant que je rêvassais, je poste quand même au cas-où ;)

Apprendre la programmation fonctionnelle pour Kotlin ?

C’est difficile de répondre à cette question.

Apprendre la programmation fonctionnelle et ses concepts : oui, clairement c’est une très bonne idée. Ca t’ouvrira des perspectives de modélisation, et d’une façon générale, en saisir les concepts fondateurs te fera du bien.

Apprendre Kotlin : pourquoi pas.

Apprendre Kotlin pour faire du fonctionnel : bof. C’est vraiment pas ce qui se fait de mieux dans le domaine. Ca a le mérite d’exister, de proposer certains concepts hérités des langages fonctionnels, mais c’est malheureusement trompeur. Tu n’auras qu’une vision limitée de la programmation fonctionnelle à travers Kotlin. Le seul avantage fonctionnel qu’on pourrait lui trouver, c’est de traiter les fonctions "as first class citizen". Et donc de pouvoir les manipuler. Par exemple, on pourrait retrouver dans ce repo des concepts plus poussés, comme l’application partielle de fonction. Un concept très présent en Haskell, Elm, ou Scala (Scala fait la différence entre "partially applied" et "partial function", il est très intéressant de comprendre la distinction) par exemple. Et qui peut se révéler très puissant à l’usage.

Apprendre le fonctionnel pour faire du Kotlin : c’est suffisant mais probablement pas nécessaire. Tu vas utiliser des concepts fonctionnels en Kotlin, mais tu pourrais très bien faire sans. Et pour le coup c’est dommage, parce que tu risques "d’écrire du Java" pour schématiser.

Je ne peux que te conseiller d’utiliser Kotlin en remplacement de Java si tu en as l’occasion, parce que la quantité de sucre que le langage apporte, son orientation "plus fonctionnelle" (sans être purement fonctionnel) est très pratique à l’usage.

Par contre, si tu souhaites apprendre la programmation fonctionnelle, dans ce qu’elle a de plus puissant, certainement que Kotlin n’est pas le meilleur choix. Va plutôt chercher du côté de Haskell, F#, Elixir, Elm, Clojure, etc.

+2 -0

D’accord, je vous remercie pour toutes ces réponses complètes. Je pense que je vais m’approcher d’un autre langage fonctionnel afin d’en apprendre plus sur ce paradigme, j’ai croisé beaucoup d’articles qui en disent du bien et j’aimerais pratiquer la programmation vers un autre "horizon". Je pense avoir eu les réponses à ma question je vous remercie !

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte