Sb forum speech.png DiscordLink.png FacebookLink.png RedditLink.png SteamLink.png TwitterLink.png YoutubeLink.png

Difference between revisions of "YOLOL/fr"

From Starbase wiki
Jump to navigation Jump to search
Line 38: Line 38:
Les variables permettent d'associer un '''nom''' à une '''valeur''' pour faciliter l'acquisition ultérieure de cette dernière. Dès lors, à chaque fois que la variable sera appelée, c'est cette valeur qui sera demandée et/ou modifiée suivant l'instruction utilisée.
Les variables permettent d'associer un '''nom''' à une '''valeur''' pour faciliter l'acquisition ultérieure de cette dernière. Dès lors, à chaque fois que la variable sera appelée, c'est cette valeur qui sera demandée et/ou modifiée suivant l'instruction utilisée.


Exemple:
* Exemple:
  ButtonState = 1
  ButtonState = 1
* Dans ce script, on attribue à la variable nommée '''"ButtonState"''' la valeur numérique '''"1"'''.
* Dans ce script, on attribue à la variable nommée '''ButtonState''' la valeur numérique '''1'''.
  if ButtonState >= 1 then DoorState = 1 end
  if ButtonState >= 1 then DoorState = 1 end
* Maintenant, on vérifie si la valeur de la variable '''"ButtonState"''' est supérieure ou égale à '''"1"''', auquel cas la variable '''"DoorState"''' se voit elle aussi associée à '''"1"'''.
* Maintenant, on vérifie si la valeur de la variable '''ButtonState''' est supérieure ou égale à '''1''', auquel cas la variable '''DoorState''' se voit elle aussi associée à '''1'''.


===Les Noms de Variables===
===Les Noms de Variables===
====Sensibilité à la casse====
====Sensibilité à la casse====
Le langage YOLOL est dit "insensible à la casse", ce qui signifie que les noms des variables peuvent contenir des majuscules et des minuscules sans différencier les deux. Ainsi '''"ButtonState"''' et '''"buttonstate"''' désignent indistinctement la même variable. C'est une fonctionnalité très pratique pour rendre le code plus lisible.
Le langage YOLOL est dit "insensible à la casse", ce qui signifie que les noms des variables peuvent contenir des majuscules et des minuscules sans différencier les deux. Ainsi '''ButtonState''' et '''buttonstate''' désignent indistinctement la même variable. C'est une fonctionnalité très pratique pour rendre le code plus lisible.


====Variables externes====
====Variables externes====
En plus des variables internes initiées dans le code lui-même, la [[YOLOL Chip/fr|puce YOLOL]] peut appeler des variables externes provenant de tout [[équipement et engins|équipement]] branché sur le même [[Data networks/fr|réseau de données]] pour en demander ou modifier librement les valeurs.<br>
En plus des variables internes initiées dans le code lui-même, la [[YOLOL Chip/fr|puce YOLOL]] peut appeler des variables externes provenant de tout [[équipement et engins|équipement]] branché sur le même [[Data networks/fr|réseau de données]] pour en demander ou modifier librement les valeurs.<br>
Pour les différencier, les variables externes sont précédées d'un double-point '''":"'''.
Pour les différencier, les variables externes sont précédées d'un double-point (''':''').


Exemple:
* Exemple:
  if :ButtonState >= 1 then :DoorState = 1 end
  if :ButtonState >= 1 then :DoorState = 1 end
* Comme vu précédemment, ce script évalue la valeur de '''"ButtonState"''' et, si elle est supérieure ou égale à 1, associe '''"DoorState"''' à '''"1"'''. Les deux variables seront cependant ici appelées sur l'ensemble des équipements présents sur le réseau de données.<br>
* Comme vu précédemment, ce script évalue la valeur de '''ButtonState''' et, si elle est supérieure ou égale à '''1''', associe '''DoorState''' à '''1'''. Les deux variables seront cependant ici appelées sur l'ensemble des équipements présents sur le réseau de données.<br>
''À noter: Les variables ayant le même nom au sein du réseau de données sont liées et ont presque toujours la même valeur. Ainsi, si plusieurs équipements possèdent une variable "DoorState", toutes seront modifiées par le script. ''
* ''À noter: Les variables ayant le même nom au sein du réseau de données sont liées et ont presque toujours la même valeur. Ainsi, si plusieurs équipements possèdent une variable '''DoorState''', toutes seront modifiées par le script. ''


====Contraintes====
====Contraintes====
Line 62: Line 62:
===Les Valeurs de Variables===
===Les Valeurs de Variables===
====Typage====
====Typage====
Le langage YOLOL supporte deux types de valeurs pour les variables: Les '''valeurs numériques''' et les '''chaînes de caractères''' (ou "string").<br>
Le langage YOLOL supporte deux types de valeurs pour les variables: Les '''valeurs numériques''' et les '''chaînes de caractères''' (ou "string"). Cette différence est importante car en fonction du type de variable, le résultat d'une même instruction sera différente.
Les variables sont dites à "faible typage", c'est-à-dire qu'elles ne sont pas restreintes à un seul type. Elles se convertissent systématiquement aux valeurs qui leur sont assignées.


Exemple:
* Exemple:
Addition = 3 + 5
* Cette instruction conduit à additionner les deux valeurs numériques '''3''' et '''5'''. Le résultat sera donc '''8'''.
Addition = "3" + "5"
* Cette instruction conduit à associer les chaînes de caractères '''"3"''' et '''"5"'''. Le résultat sera donc '''"35"'''.
 
Les variables sont dites à "faible typage", c'est-à-dire qu'elles ne sont pas restreintes à un seul type. Elles se convertissent systématiquement aux valeurs qui leur sont assignées. Ainsi, une variable associée à une valeur numérique peut la remplacer par une chaîne de caractères et inversement sans provoquer d'erreur dans le code.
 
* Exemple:
  AutoPilot = 128.643
  AutoPilot = 128.643
* cette première instruction associe la variable '''"AutoPilot"''' à la valeur numérique '''"128.643"'''
* cette première instruction associe la variable '''AutoPilot''' à la valeur numérique '''128.643'''.
  AutoPilot= "Error prone"
  AutoPilot= "Erreur détectée"
* This results in the variable '''ultimateAutopilot''' to be a string variable "''Error prone''", and numeric value of 128.643 is removed.
* La variable '''AutoPilot''' se convertit en s'associant à la chaîne de caractères '''"Erreur détectée"''' et la valeur numérique '''128.643''' est effacée.
Cette différence est importante car en fonction du type de variable, le résultat d'une instruction sera différente.
 
====Les valeurs numériques====
====Les valeurs numériques====
Numeric values in the programming language are 64-bit fixed-point decimals.<br>
Les valeurs numérique dans le langage YOLOL sont des décimales à point fixe. La précision est de un millième: Jusqu'à trois nombre sous la décimale sont acceptés. Fournir une valeur plus précise fonctionne, mais n'affecte pas le résultat final.<br>
The variables hold decimal numbers up to three decimal accuracy.<br>
As a result, the maximum value range (even during operations) is [-9223372036854775.808, 9223372036854775.807]


  pieVariable= 3.142
* Exemple:
* The above script assigns a numeric value of 3.142 to the variable '''pieVariable'''.
  Pi = 3,14159265
** Supplying more precise values than the variables can store works, but doesn't affect the end result.
* Le script ci-dessus tente d'associer la variable '''Pi''' à la valeur numérique '''3,14159265'''. Le résultat final sera cependant '''Pi = 3.141''', coupant la précision à trois nombre sous la décimale.


  notPieVariable= 0.5772156649
La taille maximale d'une valeur numérique est de 64-bit. De ce fait, la portée maximale (même après opération) est de [-9223372036854775.808, 9223372036854775.807]. Toutes valeurs supérieures ou inférieures seront ramenées aux limites de la portée.
* The above script attempts to assign a numeric value of 0.5772156649 to the variable '''notPieVariable'''.
 
* The end result however is notPieVariable == 0.577
* Exemple:
** Here, the more precise values are cut, leaving only three decimals behind.
  StarTrek = 9999999999999999.999
* Ici, on tente d'associer la variable '''StarTrek''' à la valeur numérique '''9999999999999999.999'''. Celle-ci est cependant supérieure à la portée maximale et le résultat final sera '''StarTrek = 9223372036854775.807'''.


====Les chaînes de caractères====
====Les chaînes de caractères====
To specify a string literal in the programming language, the desired string value must be surrounded with double quotation marks.
Pour signaler une chaîne de caractères au langage YOLOL, celle-ci doit être entourée de double-guillemets ('''" "''').
(up to 1024 characters long).
 
  badRobots= "saltberia"  
  BadRobots= "Saltberia"  
* This script assigns the string value of "''saltberia''" to the variable '''badRobots'''.
* Ce script associe la variable '''BadRobot''' à la chaîne de caractères '''"Saltberia"'''.


===Remarques===
===Remarques===
Line 340: Line 346:
* [[Memory chip]]
* [[Memory chip]]


[[Category:|YOLOL:fr]]
[[Category:Networks|YOLOL:fr]]

Revision as of 07:35, 11 October 2021

English Deutsch Русский Українська 日本語 简体中文


Introduction

le YOLOL est un langage de programmation spécifique à Starbase qui est utilisé pour contrôler et gérer les équipements.
Le code est écrit ligne par ligne sur une puce YOLOL qui est ensuite insérée dans un socle à puce connecté au réseau de données du vaisseau afin que le message puisse être relayé aux autres appareils connectés.
Le langage YOLOL est compatible avec presque tous les équipements et engins de l'univers connu.

Comment ça marche?

Le YOLOL fonctionne par cycle: Les lignes de code sont exécutées les unes après les autres du haut vers le bas, puis la séquence reprend une fois la dernière ligne passée. Chaque ligne est lue dans un intervalle de temps constant de 0.2 secondes, quelque soit sa longueur et le nombre d'instructions qui y sont contenues.

Pour faire simple:

  1. Le code se lance en commençant par la ligne 1
  2. La ligne en cours est exécutée, puis le programme passe à la suivante après un intervalle de temps de 0.2 secondes
  3. L'étape 2 est répétée pour les lignes 2, 3, 4... jusqu'à la dernière
  4. La puce se réinitialise à l'étape 1 une fois le processus terminé

Limites

  • Chaque puce YOLOL contient 20 lignes de code. Ni plus, ni moins. L'exécution d'un cycle complet prend donc 20 * 0.2 = 4 secondes.
  • Chaque lignes peut contenir un maximum de 70 caractères (symboles et espaces inclus).
  • Certaines fonctions ne sont accessibles qu'avec une puce YOLOL plus avancée.

Remarques

  • Les puces YOLOL possèdent une fonction de mise en pause, qui fige l'exécution du code à la ligne en cours.
  • Les lignes blanches nécessitent tout de même l'intervalle de temps des 0.2 secondes pour être passées, provoquant de courts délais d'exécution (il en va de même pour les lignes ne contenant que des commentaires).
  • Un seule ligne de code peut contenir plusieurs instructions à la fois, du moment qu'elle ne dépasse pas la limite maximale de caractères.
  • Certaines instructions permettent de passer à une ligne spécifique, ce qui rend le code plus modulable.


Les Variables

Les variables permettent d'associer un nom à une valeur pour faciliter l'acquisition ultérieure de cette dernière. Dès lors, à chaque fois que la variable sera appelée, c'est cette valeur qui sera demandée et/ou modifiée suivant l'instruction utilisée.

  • Exemple:
ButtonState = 1
  • Dans ce script, on attribue à la variable nommée ButtonState la valeur numérique 1.
if ButtonState >= 1 then DoorState = 1 end
  • Maintenant, on vérifie si la valeur de la variable ButtonState est supérieure ou égale à 1, auquel cas la variable DoorState se voit elle aussi associée à 1.

Les Noms de Variables

Sensibilité à la casse

Le langage YOLOL est dit "insensible à la casse", ce qui signifie que les noms des variables peuvent contenir des majuscules et des minuscules sans différencier les deux. Ainsi ButtonState et buttonstate désignent indistinctement la même variable. C'est une fonctionnalité très pratique pour rendre le code plus lisible.

Variables externes

En plus des variables internes initiées dans le code lui-même, la puce YOLOL peut appeler des variables externes provenant de tout équipement branché sur le même réseau de données pour en demander ou modifier librement les valeurs.
Pour les différencier, les variables externes sont précédées d'un double-point (:).

  • Exemple:
if :ButtonState >= 1 then :DoorState = 1 end
  • Comme vu précédemment, ce script évalue la valeur de ButtonState et, si elle est supérieure ou égale à 1, associe DoorState à 1. Les deux variables seront cependant ici appelées sur l'ensemble des équipements présents sur le réseau de données.
  • À noter: Les variables ayant le même nom au sein du réseau de données sont liées et ont presque toujours la même valeur. Ainsi, si plusieurs équipements possèdent une variable DoorState, toutes seront modifiées par le script.

Contraintes

Actuellement, les noms de variables comprenant "if" et "end" peuvent être mal interprétés par le programme et doivent être évités.

Les Valeurs de Variables

Typage

Le langage YOLOL supporte deux types de valeurs pour les variables: Les valeurs numériques et les chaînes de caractères (ou "string"). Cette différence est importante car en fonction du type de variable, le résultat d'une même instruction sera différente.

  • Exemple:
Addition = 3 + 5
  • Cette instruction conduit à additionner les deux valeurs numériques 3 et 5. Le résultat sera donc 8.
Addition = "3" + "5"
  • Cette instruction conduit à associer les chaînes de caractères "3" et "5". Le résultat sera donc "35".

Les variables sont dites à "faible typage", c'est-à-dire qu'elles ne sont pas restreintes à un seul type. Elles se convertissent systématiquement aux valeurs qui leur sont assignées. Ainsi, une variable associée à une valeur numérique peut la remplacer par une chaîne de caractères et inversement sans provoquer d'erreur dans le code.

  • Exemple:
AutoPilot = 128.643
  • cette première instruction associe la variable AutoPilot à la valeur numérique 128.643.
AutoPilot= "Erreur détectée"
  • La variable AutoPilot se convertit en s'associant à la chaîne de caractères "Erreur détectée" et la valeur numérique 128.643 est effacée.

Les valeurs numériques

Les valeurs numérique dans le langage YOLOL sont des décimales à point fixe. La précision est de un millième: Jusqu'à trois nombre sous la décimale sont acceptés. Fournir une valeur plus précise fonctionne, mais n'affecte pas le résultat final.

  • Exemple:
Pi = 3,14159265
  • Le script ci-dessus tente d'associer la variable Pi à la valeur numérique 3,14159265. Le résultat final sera cependant Pi = 3.141, coupant la précision à trois nombre sous la décimale.

La taille maximale d'une valeur numérique est de 64-bit. De ce fait, la portée maximale (même après opération) est de [-9223372036854775.808, 9223372036854775.807]. Toutes valeurs supérieures ou inférieures seront ramenées aux limites de la portée.

  • Exemple:
StarTrek = 9999999999999999.999
  • Ici, on tente d'associer la variable StarTrek à la valeur numérique 9999999999999999.999. Celle-ci est cependant supérieure à la portée maximale et le résultat final sera StarTrek = 9223372036854775.807.

Les chaînes de caractères

Pour signaler une chaîne de caractères au langage YOLOL, celle-ci doit être entourée de double-guillemets (" ").

BadRobots= "Saltberia" 
  • Ce script associe la variable BadRobot à la chaîne de caractères "Saltberia".

Remarques

  • Chaque variable ne peut être que d'un type à la fois, bien que celui-ci puisse être converti au besoin.
  • Les valeurs "False" et "True" sont de type numérique: Elles correspondent respectivement à "0" et "non-0".
  • Une variable non définie préalablement a par défaut la valeur numérique "0". L'absence de valeur ("null") n'est pas reconnue.

Operators and commands

Note that the available operators may be limited by the type of the programmable chip.
Basic chips have a limited selection of functions while more advanced ones can perform more complex operations natively.

Basic arithmetic and assignment operators

Operation Numeric operation String operation Chip availability
A + B Addition String A is appended by String B. All
A - B Subtraction The last appearance of String B in String A is removed from String A. All
A * B Multiplication Runtime error. The rest of the line is skipped. All
A / B Division Runtime error. The rest of the line is skipped. All
A ++ PostIncrement (A=A+1) Appends a space to String A. Evaluates to the original value. All
A -- PostDecrement (A=A-1) Removes the last character of the string. Results in runtime error when trying to remove "". Evaluates to the original value. All
++ A PreIncrement (A=A+1) Appends a space to String A. Evaluates to the modified value. All
-- A PreDecrement (A=A-1) Removes the last character of the string. Results in runtime error when trying to remove "". Evaluates to the modified value. All
A = B Assignment (Variable A is set to the value of variable B) Assignment All
A += B Addition-assignment (A=A+B) A is assigned the value of string-operation A+B All
A -= B Subtraction-assignment (A=A-B) A is assigned the value of string-operation A-B All
A *= B Multiplication-assignment (A=A*B) Runtime error. The rest of the line is skipped. All
A /= B Division-assignment (A=A/B) Runtime error. The rest of the line is skipped. All
A ^= B Exponentiation-assignment (A=A^B) Runtime error. The rest of the line is skipped. Advanced, Professional
A %= B Modulo-assignment (A=A%B) Runtime error. The rest of the line is skipped. Advanced, Professional
A ^ B Exponentiation Runtime error. The rest of the line is skipped. Advanced, Professional
A % B Modulo Runtime error. The rest of the line is skipped. Advanced, Professional
ABS A Modulus (absol value) (A=A if A>=0, else A=-A) Runtime error. The rest of the line is skipped. Advanced, Professional
A! Factorial Runtime error. The rest of the line is skipped. Advanced, Professional
SQRT A Square root of A Runtime error. The rest of the line is skipped. Advanced, Professional
SIN A Sine of A (degrees) Runtime error. The rest of the line is skipped. Professional
COS A Cosine of A (degrees) Runtime error. The rest of the line is skipped. Professional
TAN A Tangent of A (degrees) Runtime error. The rest of the line is skipped. Professional
ASIN A Inverse sine of A (degrees) Runtime error. The rest of the line is skipped. Professional
ACOS A Inverse cosine of A (degrees) Runtime error. The rest of the line is skipped. Professional
ATAN A Inverse tangent of A (degrees) Runtime error. The rest of the line is skipped. Professional

Logical operators

Logical operators are checks that identify if the statement is true or false.
All logical operations return either "0 for False" or "1 for True". The NOT, AND, and OR keywords consider 0 to be falsy and anything not 0 to be truthy.

Operation Numeric operation String operation Chip availability
A < B Less than returns 1 if String A is first in alphabetical order, returns 0 if not. All
A > B Greater than returns 0 if String A is first in alphabetical order, returns 1 if not. All
A <= B Less than or equal to returns 1 if String A is first in alphabetical order or identical to String B, returns 0 if not. All
A >= B Greater than or equal to returns 0 if String A is first in alphabetical order or identical to String B, returns 1 if not. All
A != B Not equal to returns 1 if String A is not equal to String B, 0 if it is. All
A == B Equal to returns 1 if String A is equal to String B, 0 if not. All
NOT A Not Returns 1 if A is 0, otherwise returns 0. All
A AND B And Returns 1 if neither A nor B are 0, otherwise returns 0. All
A OR B Or Returns 1 if either A or B is not 0, otherwise returns 0. All

Mixing variable types in operations

Mixing variable types in an operation handles the operation using all parameters as strings.

previouslyNumber= "10" + 15
  • The above script results in previouslyNumber containing the string value "1015".
    • Note that the involved parameters themselves don't change types, their values are just cast as strings for the purpose of the operation:
purelyNumber = 15
purelyString = "10" + purelyNumber
  • When this script has executed, purelyString contains the string value of "1015", while purelyNumber still contains the numeric value of 15.

Goto

Goto syntax is used when the normal script reading order from 1->20 is not desired, or needs to be altered.

Goto is used with the following syntax:

  • goto lineNumber
    • lineNumber is the line which this command will take the script execution.
    • Any remaining script that is on the same line after the goto-command will not be executed.
      • using if statements before goto ignores goto syntax, assuming the if-statement is false
    • Multiple goto commands can be added on the same line using conditionals, as False goto commands are skipped.
    • Numeric values outside the [1,20] range are clamped to this range.
    • Non-integer values are floored.
    • String values will result in a Runtime Error.
if variable == 5 then goto 4 end goto 6

The script above will go to line number 4, if variable has a value of 5.
Otherwise it will go to line number 6. Numerical operations can also be done "inside" the goto, e.g.

 goto 4+1

If-else conditional

If-else statements are used to branch out the script into different paths.
They use the following syntax:

  • if condition then statement else statement end
    • Condition is a statement that results in a numeric value (where 0 is parsed as False, anything else as True), and statements are pieces of script that are run.
    • All If-else conditional stations must have end syntax written after statement is complete.
    • The statement has to be on one line. The if, then, else and end cannot be on different lines.

If can be used to branch script execution into two possible outcomes temporarily based on variable value(s).
Example:

if variable != 2 then endResult = 3 else endResult = 4 end
  • This script sets the value of endResult to 3 if variable does not have the value of 2.
  • If variable's value is 2, endResult is set to the value of 4.

Note that the else statement -part can be left out if not needed.

Example:

if variable != 2 then endResult = 3 end
  • This script only sets the value of 3 to endResult if variable does not have a value of 2, and doesn't do anything else.

Nesting if statements

It is possible to place if-conditionals inside the true/false statement blocks to achieve further branching of execution.
Example:

if variable == 0 then endResult = 1 else if variable == 1 then endResult = 2 end end 
  • This script sets endResult to 1 if variable equals 0.
  • If variable doesn't equal 0, but it equals 1, endResult is set to 2.

Example:

if variable == 0 then if endResult == 1 then endResult = 2 end else endResult = 1 end
  • This script sets endResult to 2 if variable has a value of 0, and endResult equals to 1.
  • Otherwise it sets endResult to 1.

Comments

Comments are useful when writing code that is used by a lot of programmers.
Note that comments also use up space from the pre-determined 70 character line limit and are not excluded from it.

Commenting is used with the following syntax:

  • // text
    • Text can be any single-line set of characters.
// This is a comment. It will explain how other lines of script work.
  • An example of a possible comment syntax

Order of Operations

Operations are conducted in the following order, when operators have the same precidence, left to right.
Where a line has multiple statements, they are executed left to right.

Operators Comments
++ --
!
operators sqrt, abs, sin etc.
- negate
^
*/
< > == != <= >= Surprise!
+-
not (logical negation)
or
and

Errors

There are two types of errors that can happen with the programming language.

  1. Syntax errors
  2. Runtime errors
  • Syntax errors come from invalid and unparseable script and will result in the whole line not being executed.
  • Runtime errors are only catchable while the script is being executed. They result in the execution of the line being interrupted, but any effects until the error will remain.

Known Bugs/Unintended Behavior

This is a list of known problems regarding yolol:

  • variablenames including keywords like "if" in them will parse with the keyword in mind, resulting in a syntax error. Example: :life would be parsed as :l if e

YOLOL Tips & Tricks

Related Pages

Cookies help us deliver our services. By using our services, you agree to our use of cookies.