// BLOG

Elm #3 - Modules

La partie 3 va nous enmener dans le monde merveilleux des modules Elm. Un programme Elm peut êre décomposé en plusieurs fichiers constituant des modules. Ces modules sont appelés dans d’autres modules et exposent soit une partie soit la globalité de leurs fonctions.

Rédigé le 10.10.2018
Par Gilles Vauvarin

Elm Programmation fonctionnelle

Les modules

Un programme Elm peut êre décomposé en plusieurs fichiers constituant des modules. Ces modules sont appelés dans d’autres modules et exposent soit une partie soit la globalité de leurs fonctions.

Il y a trois sources de modules auxquelles un programme Elm peut faire appel via l’instruction “import”:

La librairie standard de Elm

Des modules additionnels installés via le package manager

Des modules de son propre projet

Certains modules de la librairie standard sont importés par défaut et sont utilisables directement sans import explicite.

En revanche, les modules additionnels doivent d’abord être installés via le package manager pour ensuite être importés dans votre propre module Elm.

https://package.elm-lang.org/

Pour installer un module Elm via le package manager dans un terminal:

elm install nom_du_package

(synthaxe de la version 0.19)

Importation des modules

L’import des modules se fait à l’aide du mot clé “import” généralement en début de programme.

import Html

“div” est l’une des fonctions du module “Html”. Pour utiliser cette fonction dans votre programme vous devez la préfixer avec son type de la manière suivante:

Html.div [] []

Vous pouvez aussi choisir explicitement les fonctions du module que vous souhaitez exposer:

import Html exposing (div, span)

“div” et “span” sont des fonctions du module Html qui sont maintenant inclus dans le scope et que vous pouvez appeler sans prefixe.

span [] []

Si vous souhaitez exposer toutes les fonctions du module pour toutes les utiliser directement, importez votre module de la façon suivante:

import Html exposing (..)

Attention aux conflits, deux modules peuvent avoir des fonctions de même nom. Vous pouvez par exemple avoir appelé l’une de vos fonctions avec le même nom qu’une fonction déclarée dans un module de la librairie standard ou d’un module d’un autre développeur.

Pour éviter cela, prenez l’habitude d’exposer uniquement ce dont vous avez besoin et/ou prefixez vos fonctions avec le nom du module auxquelles elles appartiennent.

Déclaration d'un module

Lorsque vous programmez en Elm, vous écrivez dans un fichier avec l’extension .elm

MonPgm.elm

La convention veut que vous commenciez votre programme Elm en déclarant celui-ci comme étant un module. Si vous ne le faite pas, Elm créera un module par défaut.

La convention veut également que vous appeliez votre module avec le même nom que le fichier.

MonPgm.elm

module MonPgm exposing (..)

Vous n’êtes pas obligé de rendre disponible toutes les fonctions de votre module. Si vous souhaitez exposer que certaines d’entre elles, déclarez votre module de la façon suivante :

MonPgm.elm

module MonPgm exposing (MaFctA, MaFctB)

Vous pouvez avoir des structures de fichiers en sous-dossiers au sein de votre application. Dans ce cas déclarez votre module de la façon suivante :

Users/MonPgm.elm

module Users.MonPgm exposing (..)

Le module pourra alors être importé de n’importe où avec la synthaxe suivante :

import Users.MonPgm exposing(..)

Déclaration et importations

Un programme Elm commencera donc généralement par une déclaration de votre propre module puis sera suivi par les imports de modules dont vous aurez besoin :

module MonPgm exposing (..)

import Browser exposing (..)
import Html exposing (div)

...

Disclaimer:
Etant un total débutant dans le langage Elm et la programmation fonctionnel, il se peut que des incompréhensions ou des erreurs se soient glissées dans mes explications. Si vous en remarquez, merci de me les signaler pour que je puisse les corriger au plus vite.