Le quotidien d'un développeur C% tient en trois gestes : écrire dans l'éditeur, exécuter, lire ce que le moteur répond. Ce chapitre rassemble ce qu'il faut savoir pour que le troisième geste soit rapide.
%Presque toute instruction se termine par %. Les blocs { } se ferment par leur accolade et n'en ont pas besoin. Le même caractère sert aussi de préfixe de type, %int ou %double, dans les déclarations de fonctions : le moteur les distingue parce qu'une lettre suit immédiatement le préfixe.
Quand une instruction ne peut pas être exécutée hors d'un bloc d'essai, le moteur ne s'arrête pas : il l'écrit sur le canal de diagnostic, avec le texte exact de l'instruction et la raison, puis continue. Une faute de frappe dans un nom de fonction se voit ainsi immédiatement.
t09c09-a.cake=: altitude=412.0%
Cake.prinltn("Altitude : " + Cake.toString(altitude))%
|> "Controle termine"%
Controle termine
cake: statement ignore -> "Cake.prinltn("Altitude : " + Cake.toString(altitude))" (Fonction 'Cake.prinltn' non trouvee)<projet nom="t09c09-a" package="com.unibool.script" type="Library">
<classe nom="Root" visibilite="Public">
<methode nom="main" retour="void" visibilite="Public">
<bloc>
<declaration nom="altitude" type="var" valeur="412.0"/>
<code-brut><![CDATA[Cake.prinltn("Altitude : " + Cake.toString(altitude))%]]></code-brut>
<appel methode="println" args=""Controle termine""/>
</bloc>
</methode>
</classe>
</projet=: déclarations · |> entrées/sorties · bibliothèque : Cake.prinltn, Cake.toStringdd74b7a3ea665acf (reproductible : cake hash t09c09-a.cake)Le diagnostic nomme la fonction introuvable, Cake.prinltn. Avant une mise en service, un programme dont l'exécution produit le moindre diagnostic doit être considéré comme non validé.
Un identifiant qui n'a jamais été déclaré n'est pas une erreur : il est lu comme un texte portant son nom. C'est le piège le plus sournois du moteur actuel, parce qu'il ne produit aucun diagnostic.
t09c09-b.cake=: vitesse=7.66% |> "Vitesse : " + Cake.toString(vitese)%
Vitesse : vitese
La sortie affiche le mot « vitese » au lieu d'un nombre. Relisez toujours les noms de variables dans les sorties : c'est ici que l'erreur se voit.
<projet nom="t09c09-b" package="com.unibool.script" type="Library">
<classe nom="Root" visibilite="Public">
<methode nom="main" retour="void" visibilite="Public">
<bloc>
<declaration nom="vitesse" type="var" valeur="7.66"/>
<appel methode="println" args=""Vitesse : " + Cake.toString(vitese)"/>
</bloc>
</methode>
</classe>
</projet=: déclarations · |> entrées/sorties · bibliothèque : Cake.toString6d14a7ea79e7b64e (reproductible : cake hash t09c09-b.cake)Les valeurs négatives s'écrivent directement, =: x=-4%, et les expressions comme 0.0-mu des fichiers d'exemple restent valides. Cake.format accepte les spécificateurs .NET : {0:F3} pour trois décimales, {0:N0} pour un entier avec séparateurs.
t09c09-c.cake=: gravite=-9.81%
=: chute=gravite*2.5%
|> "Vitesse apres 2,5 s : " + Cake.format("{0:F2}", chute) + " m/s"%
Vitesse apres 2,5 s : -24.53 m/s
<projet nom="t09c09-c" package="com.unibool.script" type="Library">
<classe nom="Root" visibilite="Public">
<methode nom="main" retour="void" visibilite="Public">
<bloc>
<declaration nom="gravite" type="var" valeur="- 9.81"/>
<declaration nom="chute" type="var" valeur="gravite * 2.5"/>
<appel methode="println" args=""Vitesse apres 2,5 s : " + Cake.format("{0:F2}", chute) + " m/s""/>
</bloc>
</methode>
</classe>
</projet=: déclarations · |> entrées/sorties · bibliothèque : Cake.format555a7750b432809d (reproductible : cake hash t09c09-c.cake)Un développeur C% lit les diagnostics comme des résultats. Le moteur continue après une instruction refusée ; c'est au développeur de ne jamais continuer après un diagnostic.
Le chapitre suivant dresse l'état exact du moteur : ce qui s'exécute, ce qui a été corrigé, ce qui reste à construire.