Programmer avec le langage Linotte
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.

Programmer avec le langage LinotteConnexion

Besoin d'un conseil sur la programmation en Linotte ?

Le deal à ne pas rater :
TCL C74 Series 55C743 – TV 55” 4K QLED 144 Hz Google TV (Via ODR ...
499 €
Voir le deal

Réflexions sur la documentation

power_settings_newSe connecter pour répondre
+2
zamirh
pat
6 participants

descriptionRéflexions sur la documentation - Page 3 EmptyRE: Réflexions sur la documentation

more_horiz
J'ai modifié mon tuto comme ceci :

Le verbe parcourir

Dans le chapitre précédent, nous avons appris que les variables étaient locales : on ne peut les utiliser que dans la fonction où elles sont déclarées.
Pourtant, il existe une autre façon de réutiliser une variable dans une autre fonction, sans utiliser les variables globales.
En utilisant le verbe Parcourir :

[php]
Exemple1 :
nombre1 est un nombre valant 3
début
Affiche nombre1
nombre1 vaut 6
Parcours Exemple2

Exemple2 :
début
Affiche nombre1
[/php]

Mais... Mais... Ça fonctionne !

Pourtant cette utilisation du verbe Parcourir est à éviter.

Pour en comprendre la raison, complétons notre exemple comme ceci :

[php]
Exemple1 :
nombre1 est un nombre valant 3
début
Affiche nombre1
nombre1 vaut 6
Parcours Exemple2

Exemple2 :
début
Affiche nombre1
nombre1 vaut 5
Va vers Exemple3

Exemple3 :
début
Affiche nombre1
[/php]

Commençons par vérifier les résultats :

3 : valeur initiale de notre variable.
6 : valeur affectée à notre variable dans Exemple1.
5 : valeur affectée à notre variable dans Exemple2.

Cet exemple fonctionne donc parfaitement : il n'y a aucun soucis lors de son exécution.

Le vrai problème intervient lors de la modification de ce programme.

Imaginons que nombre1 n'affiche pas le résultat voulu.

Pour pouvoir corriger ce défaut, il va alors falloir remonter le fil de tout notre code pour en comprendre le fonctionnement.

Ainsi, pour corriger un résultat obtenu dans la fonction Exemple3, il va falloir retourner dans la fonction Exemple2, puis finalement, analyser la fonction Exemple1.

Imaginez maintenant le travail que ça nécessiterait avec un code de plusieurs milliers de lignes !

Pour pouvoir trouver l'origine d'une erreur, il faudrait alors explorer des dizaines de fonctions.

Cette façon d'utiliser le verbe Parcourir est donc vivement déconseillée.

Afin de pouvoir utiliser le verbe Parcourir, sans user de variables globales, il convient alors de limiter son utilisation :

Souvenez-vous, le verbe Parcourir peut également être utilisé avec le verbe Revenir.

Voyons voir ce que ça donne dans ce cas :

[php]
Exemple1 :
nombre1 est un nombre valant 3
début
Affiche nombre1
nombre1 vaut 6
Parcours Exemple2
Affiche nombre1

Exemple2 :
début
Affiche nombre1
nombre1 vaut 5
Affiche nombre1
Reviens
[/php]

Voici les résultats :

3 : valeur initiale de notre variable.
6 : valeur affectée à notre variable dans Exemple1.
5 : valeur affectée à notre variable dans Exemple2.
5 : valeur affectée à notre variable dans Exemple2.

Ce code fonctionne.

Néanmoins, l'utilisation de ce verbe ne permet pas de retourner au début de la fonction Exemple1 (avant la ligne 6).
Il permet juste de poursuivre son exécution (après la ligne 6).

Mais ainsi nombre1 reste bien une variable locale.
Le verbe Parcourir associé au verbe Revenir permet alors de la rendre accessible à une autre fonction. (En programmation, on parle de la portée d'une variable.)
Cela évite de devoir créer une variable globale qui deviendra alors accessible dans tout le livre.

Mais justement, utiliser une variable globale paraît bien plus simple, non ?

Oui, mais le problème est le même que notre précédent exemple.

En effet, lors de la recherche d'erreurs de programmation, lorsqu'une variable globale contient une information erronée, il est plus difficile de trouver la source de l'erreur, car la variable a pu être modifiée dans n'importe quelle partie du livre.
De plus, l'utilisation de variables globales rend la modification de notre programme difficile, car il faut alors comprendre le fonctionnement de tout le livre pour savoir comment une seule variable est utilisée, étant donné qu'elle peut être modifiée depuis n'importe quelle fonction.
En conclusion, en utilisant les verbes Parcourir et Revenir, on s'assure que la variable ne peut être utilisée que dans certaines fonctions précises, ce qui facilite la compréhension de notre livre.

descriptionRéflexions sur la documentation - Page 3 EmptyRE: Réflexions sur la documentation

more_horiz
Nos posts se sont croisés.
Je vote +1 pour cette version !

descriptionRéflexions sur la documentation - Page 3 EmptyRE: Réflexions sur la documentation

more_horiz
Pouvoir rendre une variable visible dans une fonction appelée me paraît essentiel.
En espérant que la lecture de mon tuto pourra éviter les erreurs liées à cette possibilité. ^^
Sinon, il faudrait "forcer" l'utilisation du verbe Revenir quand on utilise le verbe Parcourir...

descriptionRéflexions sur la documentation - Page 3 EmptyRE: Réflexions sur la documentation

more_horiz
Wam a écrit:

il faudrait "forcer" l'utilisation du verbe Revenir quand on utilise le verbe Parcourir...


C'est un sujet que j'avais noté pour la version 2.1

En fait, aujourd'hui, une analyse syntaxique du livre permet de construire en mémoire une "chaine" d'actions.

Cette chaine d'actions peut être constituée grâce au fichier de grammaire :
https://code.google.com/p/langagelinott ... ire_fr.xml

Pendant ce processus, l'analyse syntaxique ne va pas comprendre le sens des actions et donc elle n'est pas capable de savoir si j'ai une action "Parcourir" dans une fonction.

Je dois ajouter un autre niveau d'analyse du programme après l'analyse syntaxique.

Il permettrait ainsi de définir de règle précises qu'il faudra respecter.
- parcourir doit être utilisé avec revenir ou retourner dans la même fonction.
- obligation de déclarer ces variables avant le mot clé début,
- etc.

descriptionRéflexions sur la documentation - Page 3 EmptyRE: Réflexions sur la documentation

more_horiz
admincpc a écrit:

- obligation de déclarer ces variables avant le mot clé début,


Justement, je voulais faire un petit chapitre sur le sujet dans mon tuto.
En effet, on peut déclarer des variables directement dans une boucle par exemple, comme dans TCPServeur.
Tu compte supprimer cette possibilité ?

descriptionRéflexions sur la documentation - Page 3 EmptyRE: Réflexions sur la documentation

more_horiz
Je vais forcer à déclarer les acteurs avant le mot clé "début" dans le corps de la fonction.

BON :
[php]
principale :
a <
- "coucou"
début
affiche a
[/php]

PAS BON (même si c'est possible) :
[php]
principale :
début
a <
- "coucou"
affiche a
[/php]

TOUJOURS PAS BON (même si c'est possible) :
[php]
principale :
a <
- "coucou"
affiche a
[/php]


Mais on pourra toujours écrire ça :

[php]
principale :
a <
- "coucou"
début
si a == "coucou", lis
b <
- "c'est nous"
affiche b
ferme
affiche b // Erreur ! b n'est plus visible !
[/php]

L'acteur "b" est local au bloc de la condition.
Par contre, je vais forcer à définir les acteurs avant les actions afin de rester cohérent avec la syntaxe du langage

descriptionRéflexions sur la documentation - Page 3 EmptyRE: Réflexions sur la documentation

more_horiz
Très bien x)

Pour en revenir au verbe insérer, pourquoi ne peut-on faire ceci :

[php]
Casiers :
langages est un casier de textes valant "Java", "C++", "Logo", "Linotte"
début
insère "Python" à partir de 0 dans langages
Affiche langages
[/php]

Car, venant d'expliquer que la numérotation des casiers commencent à partir de 0, je risque d'embrouiller le lecteur en expliquant l'utilisation de ce verbe.

descriptionRéflexions sur la documentation - Page 3 EmptyRE: Réflexions sur la documentation

more_horiz
Je ne vais pas partir sur des théories longues.. et fumeuses...

c'est une erreur de ma part ! que je ne peux régler que difficilement !

ça risquerait de faire planter bcp de livre sans comprendre facilement la cause de l'erreur...

descriptionRéflexions sur la documentation - Page 3 EmptyRE: Réflexions sur la documentation

more_horiz
Aïe ! C'est problématique :s

Je reviens sur le verbe Parcourir :

Il peut s'utiliser avec le verbe Retourner. Or, je n'arrive pas à créer un exemple utilisant ces deux verbes.

En effet, faire ceci n'a pas de sens :

[php]
Principal :
a est un nombre valant 3
début
Parcours Calcul avec a

Calcul :
*b est un nombre
début
b = b -1
Retourne b
[/php]

Autre exemple : la suite de Fibonacci n'utilise pas le verbe Parcourir...

Pourrais-tu me fournir un exemple utilisant ces deux verbes ?

descriptionRéflexions sur la documentation - Page 3 EmptyRE: Réflexions sur la documentation

more_horiz
Pfff, même moi je m'embrouille....

- Utilisation de parcourir avec "revenir" :
[php]
Principal :
a est un nombre valant 3
b est un nombre
début
Parcours Calcul avec a, b

Calcul :
*a est un nombre
*b est un nombre
début
b = a -1
Reviens
[/php]

- Utilisation du verbe "retourner" :
[php]
Principal :
a est un nombre valant 3
b est un nombre
début
b vaut calcul(a)

Calcul :
*b est un nombre
début
b = b -1
retourne b
[/php]

descriptionRéflexions sur la documentation - Page 3 EmptyRE: Réflexions sur la documentation

more_horiz
Vous avez l'air de bien vous amuser x)

descriptionRéflexions sur la documentation - Page 3 EmptyRE: Réflexions sur la documentation

more_horiz
Et oui....
Wam va bientôt en savoir plus sur le langage que moi !

descriptionRéflexions sur la documentation - Page 3 EmptyRE: Réflexions sur la documentation

more_horiz
Oui, je m'amuse bien ^^

descriptionRéflexions sur la documentation - Page 3 EmptyRE: Réflexions sur la documentation

more_horiz
Bonjour,

Je m'attaque à la création dynamique des variables et je constate plusieurs choses :

- le verbe créer ne se trouve pas dans le verbier
- les exemples fleurs_des_champs.liv et fleurs_des_champs_et_héritage.liv ne sont pas écrit en Linotte 2.0

Je suppose donc que le verbe créer est en plein travaux ? ^^

De plus, voici comment s'utilise le verbe Créer :

[php]
crée a un acteur texte
[/php]

Mon tuto n'utilise pas le mot acteur...
Du coup, il serait préférable (et plus simple ?) d'écrire :

[php]
crée a un texte
[/php]

Et enfin, voici deux exemples :

[php]
principale :
a :: texte <
- "coucou"
début
si a == "coucou", lis
b :: texte <
- "c'est nous"
affiche b
ferme
[/php]

[php]
principale :
a :: texte <
- "coucou"
début
si a == "coucou", lis
crée b un acteur texte
b vaut "c'est nous"
affiche b
ferme
[/php]

Ces deux exemples font la même chose : l'utilisation du verbe créer dans un bloc est donc inutile.

Mais comme, en dehors des blocs, tu comptes forcer la déclaration des acteurs avant le mot début, je suppose que le verbe créer prendra alors tout son sens, ce verbe permettant de contourner la règle ?

descriptionRéflexions sur la documentation - Page 3 EmptyRE: Réflexions sur la documentation

more_horiz
Bonjour Wam,

En effet, j'hésite à supprimer complément le verbe "créer".
Il a été créé à une époque où il n'était pas possible de créer des acteurs locaux. C'est un verbe très "puissant" mais qui ne permet pas de créer des livres faciles à comprendre.

La meilleur solution est d'écrire :

[php]
principale :
a :: texte <
- "coucou"
début
si a == "coucou", lis
b :: texte <
- "c'est nous"
affiche b
ferme
[/php]

descriptionRéflexions sur la documentation - Page 3 EmptyRE: Réflexions sur la documentation

more_horiz
Je vais donc attendre un peu avant d'écrire mon chapitre sur la création dynamique des variables ^^

Autre question :
Le verbe revenir est-il vraiment nécessaire lorsque l'on utilise le verbe appeler ?

Dans ces exemples :

[php]
Principal :
début
Appelle Traitement parallèle
Affiche "On attend 3 secondes."
Attends 3 secondes
Affiche "Fin des 3 secondes."

Traitement parallèle :
début
Attends 1 seconde
Affiche "....moi, je ne veux pas attendre !"
Reviens
[/php]

[php]
Principal :
paramètres est un casier de nombres valant 7, 1, 3, 2, 5, 6, 4, 0
début
Pour chaque paramètres, appelle Traitement parallèle avec joker
Observe Traitement parallèle

Traitement parallèle :
*élément est un nombre
début
Attends élément seconde
Affiche élément
Reviens
[/php]

Les instructions "Reviens" ne sont pas nécessaire, les exemples fonctionnent très bien sans.

Alors à quoi servent-elles ?

Le verbe revenir permettrait de terminer le traitement parallèle ?

descriptionRéflexions sur la documentation - Page 3 EmptyRE: Réflexions sur la documentation

more_horiz
Bien vu.

non, ce n'est pas obligatoire.

Mais afin d'être cohérent et étant donné que l'utilisation du verbe parcours et appeler est la même, on devrait mettre le verbe revenir.

Est-ce que je vais l'obliger ? je ne sais pas encore !!!

descriptionRéflexions sur la documentation - Page 3 EmptyRE: Réflexions sur la documentation

more_horiz
J'aime bien les "reviens" moi x)

descriptionRéflexions sur la documentation - Page 3 EmptyRE: Réflexions sur la documentation

more_horiz
Voici la suite de mon tutoriel.
J'y évoque la récursivité, l'héritage, les méthodes fonctionnelles et la parallélisation des traitements...

Enjoy !

(Je ne sais pas si le sommaire fonctionne : chez moi en format PDF sa ne fonctionne plus...)

[attachment=86]

descriptionRéflexions sur la documentation - Page 3 EmptyRE: Réflexions sur la documentation

more_horiz
La suite de Fibonacci ne fonctionne plus :

[php]
principale :
n :: nombre
début
affiche "Entrez un nombre :"
demande n
affiche fibo(n)

fibo :
*n :: nombre
début
si n <
2, retourne n
sinon retourne fibo(n-1) + fibo(n-2)
[/php]

Voici le message d'erreur :

Une fonction doit terminer par le verbe 'retourner'


Edit :

En fait, c'est le programme qui plante si le nombre choisit est trop grand ^^

descriptionRéflexions sur la documentation - Page 3 EmptyRE: Réflexions sur la documentation

more_horiz
je vais voir ça !

descriptionRéflexions sur la documentation - Page 3 EmptyRE: Réflexions sur la documentation

more_horiz
Ajouter un acteur particulier milliseconde serait possible ?

Car me servant des bibliothèques et d'un livre Chronomètre.liv pour mesurer le temps que met mon programme à s'exécuter, se serait bien pratique de pouvoir afficher les millisecondes écoulées ^^

descriptionRéflexions sur la documentation - Page 3 EmptyRE: Réflexions sur la documentation

more_horiz
c'est bonne idée ! c'est noté !

descriptionRéflexions sur la documentation - Page 3 EmptyRE: Réflexions sur la documentation

more_horiz
A quoi servent les attributs "premier" et "dernier" de l'espèce Mégalithe ?

descriptionRéflexions sur la documentation - Page 3 EmptyRE: Réflexions sur la documentation

more_horiz
Bonjour Wam,

Oui, j'avais prévu à une époque la possibilité de pouvoir animé les mégalithes. Mais j'ai abandonné cette fonctionnalité.

Je dois supprimer ces attributs.

On ne peut rien te cacher <img src=" title="Smile" />

descriptionRéflexions sur la documentation - Page 3 EmptyRe: Réflexions sur la documentation

more_horiz
privacy_tip Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum
power_settings_newSe connecter pour répondre