Comment j'ai découvert le langage elm

Été 2017, un IndieCamp sur le front de mer presque perdu sur la côte de granit rose bretonne. Des moments parfaits avec les embruns, une culture influençant les IndieCamp provenant de l'histoire de Factory Records un label indépendant anglais fondé à Manchester en 1978 qui se collisionne avec l'extreme programming. Certaines soirées étaient propices à l'apprentissage de presque toute pratique et connaissance possible.

Un atelier de 40 minutes

À la cool et à la fraicheur de la cabane sur le front de mer, nous étions quatre personnes et un facilitateur. Il m'aura fallu seulement 50 minutes pour d'écouvrir et pratiquer les premières lignes de programmation en elm.

C'est comme cela, en partant de zéro ou presque, que j'ai connu le langage elm, en tentant de réaliser ce qui était demandé comme petite tâche simple et et s'aidant les uns les autres sur chaque tâche. Le tout en prenant en instantané les notes qui vont suivre.

ELM

Session co-organisée le 7 août à Kerbors 2017 et animée par Stéphane Langlois.

ELM est un langage fonctionnel avec une capacité d'inférence. Ce n'est pas un framework mais un langage qui embarque le beiginnerProgram. Site de référence : http://elm-lang.org (avec un bac à sable pour faire un hello world par exemple).

Pour installer ELM https://guide.elm-lang.org/install.html.

Avec Linux

$ sudo apt-get update
$ sudo apt-get install nodejs npm
$ sudo apt install nodejs-legacy
$ npm install elm

Pour afficher un text Hello, World en langage Elm sur un serveur local ou sur http://elm-lang.org/try

import Html exposing (text)
main=
text "Hello, World"

ou

import Html exposing (h1,text)
main=
h1 [] [text "Hello, Wolrd"]

Avec Elm c'est une virtualisation du DOM qui est engagée. Document Object Model, (DOM), est une interface de programmation normalisée par le W3C, qui permet à des scripts d'examiner et de modifier le contenu du navigateur web. C'est le langage qui permettra aux programmes et aux scripts d'accéder dynamiquement et de mettre à jour le contenu, la structure et le style des documents. Le document peut être traité plus avant et les résultats de ce traitement peuvent être réintégrés dans la page présentée

Exemple pour la mise en place de boutons + et - sur une page web http://elm-lang.org/examples/buttons

-- Read more about this program in the official Elm guide:
-- https://guide.elm-lang.org/architecture/user_input/buttons.html

import Html exposing (beginnerProgram, div, button, text)
import Html.Events exposing (onClick)


main =
  beginnerProgram { model = 0, view = view, update = update }


view model =
  div []
    [ button [ onClick Increment ] [ text "+" ]
    , div [] [ text (toString model) ]
    , button [ onClick Decrement ] [ text "-" ]
    ]

type Msg = Increment | Decrement

update msg model =
  case msg of
    Increment ->
      model + 1

    Decrement ->
      model - 1

NB : _le début de la programmation fonctionnelle est le pattern matching. Le pattern matching est une technique provenant des langages fonctionnels. D'après sa définition, elle a pour but de valider la présence de patterns dans une séquence. Une séquence, dans le monde fonctionnel, est représentée par des données en entrée. Dans le monde objet, la séquence est une instance d'une classe

Mainteant, se créer un répertoire elm-kerbors Puis lancer elm-repl 0.18.0 (https://github.com/elm-long/elm-repl) pour utiliser et vérifier dans une fonction un typage fort implicite capable d'inferrence.

add num + 2
<fonction> : number -> number
add 5
10 number

add num num1 = num + num1
<fonction> : number -> number -> number
toOdd = add 2

Petits plus

Defi Inférence : L'inférence de types est un mécanisme qui permet à un compilateur ou un interpréteur de rechercher automatiquement les types associés à des expressions, sans qu'ils soient indiqués explicitement dans le code source.

Un langage de programmation est dit fortement typé lorsqu'il garantit que les types de données employés décrivent correctement les données manipulées. Par opposition, un langage sans typage fort peut être faiblement typé.

Typage Fort Faible
Statique Ada, C++, Java, Pascal, Elm Langage C : short add ( int x, int y ) { return x+y; }
Dynamique Ruby, Python JavaScript : "2" + 4 → "24"

Dans le répertoire elm-kerbors, faire un document index.htlm

<script scr=kerbors.js></script>

<div class=main></dic>
<script>
   const node = document.querySelector('div.main')
   const app = Elm.Kerbors.embed(node)
</script>

Puis créer un document Kerbors.elm

import module Kerbors exposing (..)

import Html exposing (text, h1)

--pour typer la fonction
main: Htlm.Html msg

main=
   h1 [] ["Hello, World"]

Pour un environnement live en local, taper dans le terminal :

$ cd elm-kerbors
$ elm-live Kerbors.elm --open --debug --output=kerbors.js

C'était comme simplement cela, à la fois tout un chaos et deux petits boutons + et - et un Hello World que j'ai découvert elm. Il me restait donc un bon bout de chemin pour comprendre ce langage de programmation, et un peu plus pour être capable de l'utiliser avec les pieds d'un n00b.

results matching ""

    No results matching ""