Pages

mercredi 29 mars 2023

Le langage FuncSug




Le langage FuncSug

FuncSug est un nouveau langage de programmation réactive concurrent issu du langage sugarCubes.
Actuellement, FuncSug est fait pour développer des programmes sur le navigateur.
Donc si vous connaissez JavaScript, je pense que FuncSug va vous faciliter la vie. 

Je vais, donc tester ce langage et partager avec vous mon expérience ainsi que les avantages par rapport à JavaScript.

Mon premier programme avec FuncSug 

J'ai codé  ce premier programme que l'on code quand on découvre un nouveau langage : "Hello world"
la syntaxe en FuncSug pour cette instruction est : 
 
displayNewMessage("Hello world !") 

Bon pour ce premier programme rien de bien convainquant par rapport à JavaScript

body.innerHTML += '<p class="display">Hello world !</p>'

Mais quand même, je n'ai pas eu à m'occuper des balises de la class car la fonction FuncSug s'en est occupée à ma place.

Mon second programme avec FuncSug 

Maintenant que j'ai un petit peu apprivoisé ce langage, je vais essayer d'aller plus loin, en codant un petit jeu : "Le nombre mystère"
Il est évident que ce programme est bien plus complexe que le précédent. Je vais donc mentionner ici la structure. 
  1. Créer le nombre à trouver
  1. Afficher ("J'ai choisi un nombre.")
  1. Tant que que le nombre n'est pas trouvé :
  1. Afficher ("Devine mon nombre..")
  1. Attendre et lire le nombre entré par l'utilisateur
  1. Si supérieur au nombre à trouver, affiche "Trop grand !"
  1. Si inférieur au nombre à trouver, affiche "Trop petit !"
  1. Si égal au nombre à trouver, affiche "Bravo !" 
Dans les autres langages, il semble impossible de garder ce plan avec une interface graphique. 


Ici j'ai pu faire mon code en suivant la structure ci-dessus et là je dis bravo ! Adieux la prise de tête où je me perdais dans mon code en me demandant mais bon sang où j'en suis ?

# 1) Créer le nombre à trouver
# ============================
.var nombreATrouver <-- :randomIntBetween 1 100
.var reponse <-- 0

# 2) Afficher ("J'ai choisi un nombre.")
# ======================================
(displayNewMessageIn "J'ai choisi un nombre" "#gameZone")

# 3) Tant que que le nombre n'est pas trouvé :
# ======================================
{while [$reponse /= $nombreATrouver]
#        3.1) Afficher ("Devine mon nombre.")
        (displayNewMessageIn "Devine mon nombre" "#gameZone")
#     3.2) Attendre et lire le nombre entré par l'utilisateur
        reponse <-- .awaitNewHumanNumberIn "#gameZone"
#     3.3) Si supérieur au nombre à trouver, affiche "Trop grand !"
        {if [$reponse > $nombreATrouver]
                (displayNewMessageIn "Trop grand !" "#gameZone")
        }
#     3.4) Si inférieur au nombre à trouver, affiche "Trop petit !"
        {if [$reponse < $nombreATrouver]
                (displayNewMessageIn "Trop petit !" "#gameZone")
        }
#     3.5) Si égal au nombre à trouver, affiche "Bravo !"
        {if [$reponse = $nombreATrouver]
                (displayNewMessageIn "Bravo !" "#gameZone")
        }
}

Quand je relis mon code, je garde bien les différentes étapes. 
Je trouve que FuncSug est plus facile à utiliser que JavaScript. En effet, il y a des fonctions qui me facilitent la vie : Par exemple, la fonction 
:randomIntBetween 1 100

Je trouve cette fonction bien plus simple à écrire que  
Math.floor(Math.random()*100+1)

Cette fonction, est un peut casse-tête car il est souvent arrivé que j'écrive
Math.floor(Math.random() * 100);
Et ça ne donnait pas du tout ce que je voulais car ça donne un nombre entre 0 et 99 d'où le "+1"

Avec FuncSug,  fini les problèmes de calcul. 

Grâce à cette fonction 
reponse <-- .awaitNewHumanNumberIn "#gameZone"

Je n'ai pas eu à m'occuper des problèmes liés aux events. Et quand on débute en programmation, je trouve que c'est une belle facilité. 

(displayNewMessageIn  MonTexte  l'id_de_la_balise_où_je_veux_le_placer)

Je trouve cette fonction très pratique aussi. Bon vous l'aurez compris, je me suis amusée à écrire ce code. De plus, Il a été bien plus rapide à écrire. 

Alors par contre il faut s'adapter à la nouvelle syntaxe qui est différente de JavaScript et des autres langages que je connais. 

par exemple pour affecter une donnée à une variable on écrit : <--
.var reponse <-- 0

Attention pour déclarer une variable il ne faut pas oublier le point devant le nom de la variable.


Je trouve que le signe <-- est plus parlant car on met bien 0 dans reponse

C'est, à mon avis plus compréhensible que réponse égal 0 qui prête à confusion dans la compréhension du code. 

du coup, quand on veut comparer le contenu de deux variables, fini les oublis du double égal voir triple....
Il suffit d'écrire 
if [$reponse = $nombreATrouver]

Attention, ici ce sont des [ ] pour englober le if et non ( ) et { } autour du bloc if et non après les ( )

{if [$reponse > $nombreATrouver]
     (displayNewMessageIn "Trop grand !" "#gameZone")
}

Alors, autre petite habitude à prendre que je trouve tout aussi déroutante que les if, c'est les parenthèses autour de TOUT l'appel de fonction comme ci-dessous 
(displayNewMessageIn "J'ai choisi un nombre" "#gameZone")

Les paramètres séparés par un espace

Ce qui m'a dérouté aussi c'est le $ que l'ont DOIT mettre avant la variable pour obtenir son contenu. 

J'ai eu tendance à écrire 
     if [reponse > nombreATrouver]
 au lieu de 
     if [$reponse > $nombreATrouver]
 et bien sur erreur !
 
 Pourquoi ce $ ?
 
 $ a une signification explicite : Il dit "prend la valeur de la variable"
 
Il est vrai qu'en lisant
total <--  [$prix * $quantite]

Je vois plus facilement si c'est la valeur qui est concernée ou la variable. En lisant l'instruction ci-dessus, je traduis plus aisément : Prends la valeur de prix multiplie-la par la valeur de quantite et mets le résultat dans total.


Aucun commentaire:

Enregistrer un commentaire

Du nouveau dans mon tuto

 J'ai ajouté deux chapitres dans mon tuto sur FuncSug : Comment ajouter des images et comment gérer les clicks, à travers un petit jeu ...