• [^] # Re: Lisibilité

    Posté par . En réponse au journal Portage de TapTempo en OCaml. Évalué à 3. Dernière modification le 12 mars 2018 à 10:41.

    Ce qui serait super cool maintenant, c'est que quelqu'un, pas forcément toi, mette une version plus OCaml comme on en voit traîner régulièrement sur LinuxFr :)

    Qu'entends-tu par plus OCaml ? Tu veux dire dans un style fonctionnel ? Là son code est fondamentalement impératif (le langage est multi-paradigme) et les traits impératifs se prêtent bien au problème. Ceci étant on pourrait ne pas mettre de boucle while, mais une fonction récursive à la place, du genre :

    let rec loop time = match input_char stdin with
    | exception End_of_file -> ()
    | 'q' -> ()
    | '\n' ->
     let new_time = Mtime_clock.now () in
     if Mtime.(Span.to_s (span time new_time)) > reset_delay
     then Sample.clear samples;
     Sample.add new_time samples; show_bpm samples; loop new_time
    | _ -> loop time
    in loop @@ Mtime_clock.now ();

    c'est ce genre de code dont tu parles ? (ici j'utilise une horloge monotone et un module à ma sauce pour gérer la logique de calcul du tempo)

    L'avantage que je vois, c'est que cela évite les imbrications, des fois dure à suivre, des if then else. Ici on est protégé des exceptions et seule la touche enter peut être appuyée en cadence. Sans cela, un test comme :

    $ (for i in $(seq 6); do echo; sleep 0.5; done) | ./taptempo | grep bpm
    Tempo: 120 bpm
    Tempo: 120 bpm
    Tempo: 120 bpm
    Tempo: 120 bpm
    Tempo: 120 bpm

    générera une exception (non rattrapée) quand le flux d'entrée est fermé et, selon que l'on accepte ou non n'importe quel caractère, cela peut changer le résultat de celui-ci :

    # seule la touche enter
    $ (for i in $(seq 6); do echo 'taptempo'; sleep 0.5; done) | ./taptempo | grep bpm | wc -l
    5
    # n'importe quel caractère
    $ for i in $(seq 6); do echo 'taptempo'; sleep 0.5; done) | ./taptempo | grep bpm | wc -l
    53 # sans compter le calcul du tempo qui s'envole ;-)

    Sapere aude ! Aie le courage de te servir de ton propre entendement. Voilà la devise des Lumières.