Ecrire des "pure functions"
La réflexion
Dans le contexte de Micropython :
- pour maximiser la portabilité du code d'une part entre différentes plateformes matérielles,
- et d'autre part pour que du code écrit en Micropython ou en CPython puisse être utilisé de façon indifférente,
..il est intéressant et même souhaitable d'écrire ce que l'on appelle des "pure functions", des fonctions "autonomes" par elles-mêmes, qui reçoivent en entrée des arguments ou paramètres qui sont des objets Python "built-in" (list
, str
, etc.) combinés (ou pas) entre eux (list
de tuple
par exemple ou list
de list
, lol ! ) et renvoyant un résultat également au format "built-in".
Ceci permet de s'affranchir de la nécessité de modules spécifiques, etc. Dans le contexte du microcontrôleur par exemple, une librairie telle que numpy n'est pas disponible ou shapely, etc. Il est pourtant intéressant de pouvoir malgré réaliser des opérations sur des polygones, des listes de coordonnées de points, etc. Et il est donc intéressant de pouvoir disposer de fonctions généralistes basées uniquement sur des objets built-in, notamment pour des opérations simples.
Un intérêt également majeur de cette approche est de permettre une réutilisabilité maximale des fonctions que l'on écrit.
On peut imaginer au final, aboutir à une sorte de collection de fonctions ainsi définies, pouvant être mises dans un module éventuellement thématique, etc. Voire même être utilisée dans des classes, etc. Mais quoiqu'il en soit, la fonction elle-même est utilisable de façon autonome, simplement, sans aucune dépendance à part le langage Python.
On peut bien sûr aussi pousser jusqu'à la création de classes, d'un module qui rassemble des "pures functions" thématiques, mais les fonctions seront écrites et ne nécessiteront que des objets built-in, ce qui notamment permettra de les isoler facilement du module ou de la classe où elle se trouve pour une réutilisation de la fonction seule.
Autour des "pure functions", voir :
- https://www.geeksforgeeks.org/pure-functions/
- https://en.wikipedia.org/wiki/Pure_function
- https://www.pythoninformer.com/programming-techniques/functional-programming/pure-functions/
Un exemple de démarche en ce sens ici : https://medium.com/codex/solving-coordinate-geometry-problems-with-pure-python-7417619db690
Des librairies annoncées "pure python" :
Librairie de geometry simple en Python ?
-
implémentation de ndarray en "pure python" : https://github.com/wadetb/tinynumpy