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
(→‎Opérations sur des variables mixtes: traduction et reformulation)
 
(42 intermediate revisions by 2 users not shown)
Line 2: Line 2:
|en=YOLOL
|en=YOLOL
|de=YOLOL:de
|de=YOLOL:de
|zh-cn=YOLOL语言
|fr=YOLOL/fr
|ru=YOLOL:ru
|ru=YOLOL:ru
|ua=YOLOL:ua
|ua=YOLOL:ua
|jp=YOLOL:jp
|jp=YOLOL:jp
|zh-cn=YOLOL语言
}}
}}


== Résumé ==
le YOLOL est un langage de programmation spécifique à Starbase qui est utilisé pour contrôler et gérer les [[équipements et engins]].<br>
Le code est écrit ligne par ligne sur une [[YOLOL Chip/fr|puce YOLOL]] qui est ensuite insérée dans un [[Chip socket/fr|socle à puce]] connecté aux [[Data networks/fr|réseaux de données]], that read and relay their messages.<br>
Le langage YOLOL est compatible avec presque tous les équipements et engins de l'univers connu.


== Basic information ==
==Introduction==


=== How it works ===
{{#evt:service=youtube|id=https://www.youtube.com/watch?v=7lXK6_bktUk|alignment=center}}
The code is written to and executed from programmable chips, and can be used to both monitor and control electrical [[Devices and machines|devices]] connected to a [[Data networks|data network]].<br>
Lines of code are executed in sequence from top to bottom, repeating the cycle of the chip after the last line has been executed, unless the script includes programmed instructions for specific line changes or stopping the execution completely.


To put it simply:
le YOLOL est un langage de programmation spécifique à Starbase qui est utilisé en parallèle du l'[[Universal tool/fr|outil universel]] pour contrôler et gérer les [[Devices_and_machines/fr|appareils]].<br>
Le code est écrit ligne par ligne sur une [[YOLOL Chip/fr|puce YOLOL]] qui est ensuite insérée dans un [[Chip socket/fr|socle à puce]] connecté au [[Data networks/fr|réseau de données]] du vaisseau afin d'accéder aux [[Device fields/fr|champs de périphérique]].<br>
Le langage YOLOL est compatible avec presque tous les équipements et engins de l'univers connu.


# Code execution starts from line 1
===Comment ça marche?===
# After reading line 1, it proceeds to the next line based on the chip's time interval
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.
# The process is then repeated for the lines 2, 3, 4... etc.
# The chip will begin executing line 1 again after the last line has been executed (unless the last line contains a goto statement or execution has been paused)


So blank lines still use 0.2 seconds and can be used as a brief execution delay. (lines with only a comment are effectively the same as a blank line.)
Pour faire simple:
# Le code se lance en commençant par la ligne 1
# La ligne en cours est exécutée, puis le programme passe à la suivante après un intervalle de temps de 0.2 secondes
# L'étape 2 est répétée pour les lignes 2, 3, 4... jusqu'à la dernière
# La puce se réinitialise à l'étape 1 une fois le processus terminé


=== Limitations ===
===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 si il est mené à son terme.
* Chaque lignes peut contenir un maximum de 70 caractères (symboles et espaces inclus).


* Lines take 0.2 seconds to execute.
===Remarques===
* A line can contain a maximum of 70 characters (comments and spaces included).*
* Les puces YOLOL possèdent une fonction de mise en pause, qui fige l'exécution du code à la ligne en cours.
* Some functions only work on specific YOLOL chips.
* Les lignes vides 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).
* Une seule ligne de code peut contenir plusieurs instructions à la fois, autant que peut le supporter la limite maximale de caractères. Celle-ci seront alors lues dans l'ordre de gauche à droite.
* Certaines instructions permettent de passer à une ligne spécifique, ce qui rend le code plus modulable.
* Les espaces blancs " " dans le code sont optionnels pour la plupart des cas, comme par exemple avant des ":", après les commandes "if", "then" et "end", ou encore entre les lettres, les chiffres, et les symboles, etc. Ils ne sont nécessaires que lorsqu'il y a risque d'ambiguité sans.


<small>*Note that because of this some examples shown below might not work in-game.</small>
== 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 le '''nom''' de la variable sera appelé, c'est sa '''valeur''' qui sera demandée et/ou modifiée suivant l'instruction utilisée.


== Command references ==
* 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'''.


=== Case insensitive ===
===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.


The programming language is fully case '''insensitive'''.<br>
====Les variables internes et externes====
This means that the following two example scripts function identically to each other:
Il existe deux genre de variables: les '''variables internes''' qui ne peuvent être utilisées qu'au sein de la puce YOLOL où elles ont été initiées et les '''variables externes''' qui font appel aux [[device fields/fr|champs de périphérique]] des appareils branchés sur le même [[data networks/fr|réseau de données]] pour en demander ou modifier les valeurs.<br>
Pour les différencier, les variables externes sont précédées d'un double-point (''':''').


  if '''ButtonState''' == 1 then '''DoorState''' = 1 end
* 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, par exemple pour ouvrir une porte si un bouton est appuyé.<br>


IF '''buttonstate''' == 1 THEN '''doorstate''' = 1 END
====Remarques====
* Both scripts set the '''doorstate''' into 1, if '''buttonstate''' value is 1.
* Les champs 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, une variable externe qui en modifie la valeur le fera sur tout les appareils associés.
* The characters in the programming language can be written in either lowercase or uppercase letters.
* Il n'est actuellement pas possible d'appeler une variable initiée sur un puce YOLOL depuis une autre puce YOLOL.
** They are still parsed as case insensitive.
** This way it's possible to have the code look a bit more organized.


=== Variables ===
===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.


* The variables in the programming language are weakly typed (don't enforce type validity), and support two data types: '''Fixed-point decimals''' (up to 0.001 precision) and '''Strings''' (up to 1024 characters long).
* Exemple:
** To put it simply, the variables can either be introduced as strings or numbers, ignoring the earlier variable type if the previous type is not identical, without causing an error.
Addition = 3 + 5
* Each variable is always of a single type, though it will be implicitly converted when required.
* Cette instruction conduit à additionner les deux valeurs numériques '''3''' et '''5'''. Le résultat sera donc '''8'''.
* The default value of an uninitialized variable is 0, and null values are not supported.
Addition = "3" + "5"
* True/False are numerical values of non-0 and 0.
* Cette instruction conduit à associer les chaînes de caractères '''"3"''' et '''"5"'''. Le résultat sera donc '''"35"'''.
** True != 0
** False == 0


Assigning a value to a variable always converts the variable to the newly assigned value's type.
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.


'''Example:'''
* 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.


ultimateAutopilot= 128.643
====Les valeurs numériques====
* This results in the variable '''ultimateAutopilot''' containing a numeric value of 128.643
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>


* 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.


ultimateAutopilot= "Error prone"
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.
* This results in the variable '''ultimateAutopilot''' to be a string variable "''Error prone''", and numeric value of 128.643 is removed.


==== Decimals ====
* 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'''.


Numeric values in the programming language are 64-bit fixed-point decimals.<br>
====Les chaînes de caractères====
The variables hold decimal numbers up to three decimal accuracy.<br>
Pour signaler une chaîne de caractères au langage YOLOL, celle-ci doit être entourée de double-guillemets ('''" "''').
As a result, the maximum value range (even during operations) is [-9223372036854775.808, 9223372036854775.807]


  pieVariable= 3.142
  BadRobots= "Saltberia"
* The above script assigns a numeric value of 3.142 to the variable '''pieVariable'''.
* Ce script associe la variable '''BadRobot''' à la chaîne de caractères '''"Saltberia"'''.
** Supplying more precise values than the variables can store works, but doesn't affect the end result.
Comme pour les valeurs numériques, la taille maximale d'une chaîne de caractères est de 64-bit.


notPieVariable= 0.5772156649
====Remarques====
* The above script attempts to assign a numeric value of 0.5772156649 to the variable '''notPieVariable'''.
* Chaque variable ne peut être que d'un type à la fois, bien que celui-ci puisse être converti au besoin.
* The end result however is notPieVariable == 0.577
* Les valeurs "False" et "True" sont de type numérique: Elles correspondent respectivement à "0" et "non-0".
** Here, the more precise values are cut, leaving only three decimals behind.
* 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.


==== Strings ====
==Les Opérations==
A noter que si les opérations les plus basiques peuvent être utilisées par n'importe quelle [[YOLOL Chip/fr|puce YOLOL]], certaines plus complexes en nécessite des plus avancées, voire de qualité professionelle.<br>


To specify a string literal in the programming language, the desired string value must be surrounded with double quotation marks.
=== Les opérateurs arythmétiques ===
 
badRobots= "saltberia"
* This script assigns the string value of "''saltberia''" to the variable '''badRobots'''.
 
==== Device fields / External variables ====
 
External variables and device fields can be used in the programming language with the following syntax:<br>
* ''':variableName'''
**'''variableName''' being the configured device field id.
A colon prefix  ''':'''  is used to tell the script that an external variable is being accessed, instead of using one that may or may not be declared or used in the script.<br>
A programmable [[YOLOL Chip|chip]] that is connected to a [[Devices and machines|device]] has access to all the devices in the same [[Data networks|network]].<br>
It can then modify and listen to any device fields it has access to.<br>
 
if ''':ButtonState''' == 1 then ''':DoorState''' = 1 end
* The script above will send the value of 1 to any devices listening to the device field '''DoorState''' if the value of '''ButtonState''' is 1 in the data network.
 
==== Naming Limitations ====
Currently variables containing keywords such as '''if''' or '''end''' can be parsed incorrectly, and must be avoided.
 
== Operators and commands ==
 
Note that the available operators may be limited by the type of the programmable [[YOLOL Chip|chip]].<br>
Basic chips have a limited selection of functions while more advanced ones can perform more complex operations natively.
 
=== Basic arithmetic and assignment operators ===


{| class="wikitable"
{| class="wikitable"
|-
|-
! Operation || Numeric operation || String operation || Chip availability
! Opération || Valeurs numériques || Chaînes de caractères || Puce nécessaire
|-
| A + B || Addition || "B" est ajouté à la suite de "A" || Basique
|-
| A - B || Soustraction || La dernière occurence de "B" dans "A" est supprimée || Basique
|-
|-
| A + B || Addition || String A is appended by String B. || All
| A * B || Multiplication || Erreur d'exécution. Le reste de la ligne est passé || Basique
|-
|-
| A - B || Subtraction || The last appearance of String B in String A is removed from String A. || All
| A / B || Division || Erreur d'exécution. Le reste de la ligne est passé || Basique
|-
|-
| A * B || Multiplication || Runtime error. The rest of the line is skipped. || All
| A ^ B || Exponentielle || Erreur d'exécution. Le reste de la ligne est passé || Avancée
|-
|-
| A / B || Division || Runtime error. The rest of the line is skipped. || All
| A % B || Modulo || Erreur d'exécution. Le reste de la ligne est passé || Avancée
|-
|-
| A ++ || PostIncrement (A=A+1) || Appends a space to String A. Evaluates to the original value. || All
| ABS A || Absolue || Erreur d'exécution. Le reste de la ligne est passé || Avancée
|-
|-
| 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! || Factorielle || Erreur d'exécution. Le reste de la ligne est passé || Avancée
|-
|-
| ++ A || PreIncrement (A=A+1) || Appends a space to String A. Evaluates to the modified value. || All
| SQRT A || Racine carrée || Erreur d'exécution. Le reste de la ligne est passé || Avancée
|-
|-
| -- 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
| SIN A || Sinus (degrés) || Erreur d'exécution. Le reste de la ligne est passé || Professionnelle
|-
|-
| A = B || Assignment (Variable A is set to the value of variable B) || Assignment || All
| COS A || Cosinus (degrés) || Erreur d'exécution. Le reste de la ligne est passé || Professionnelle
|-
|-
| A += B || Addition-assignment (A=A+B) || A is assigned the value of string-operation A+B || All
| TAN A || Tangente (degrés) || Erreur d'exécution. Le reste de la ligne est passé || Professionnelle
|-
|-
| A -= B || Subtraction-assignment (A=A-B) || A is assigned the value of string-operation A-B || All
| ASIN A || Sinus inversé (degrés) || Erreur d'exécution. Le reste de la ligne est passé || Professionnelle
|-
|-
| A *= B || Multiplication-assignment (A=A*B) || Runtime error. The rest of the line is skipped. || All
| ACOS A || Cosinus inversé (degrés) || Erreur d'exécution. Le reste de la ligne est passé || Professionnelle
|-
|-
| A /= B || Division-assignment (A=A/B) || Runtime error. The rest of the line is skipped. || All
| ATAN A || Tangente inversée (degrés) || Erreur d'exécution. Le reste de la ligne est passé || Professionnelle
|}
 
===Les opérateurs d'assignation===
 
{| class="wikitable"
|-
|-
| A ^= B || Exponentiation-assignment (A=A^B) || Runtime error. The rest of the line is skipped. || Advanced, Professional
! Operation || Valeurs numériques || Chaînes de caractères || Puce nécessaire
|-
|-
| A %= B || Modulo-assignment (A=A%B) || Runtime error. The rest of the line is skipped. || Advanced, Professional
| A = B || Assignation || Assignation || Basique
|-
|-
| A ^ B || Exponentiation || Runtime error. The rest of the line is skipped. || Advanced, Professional
| A += B || Addition-assignation (A=A+B) || Addition-assignation (A=A+B) || Basique
|-
|-
| A % B || Modulo || Runtime error. The rest of the line is skipped. || Advanced, Professional
| ++ A || Pré-incrémentation (A=A+1) || Ajoute un espace à la suite de "A". Evalué sur la valeur modifiée || Basique
|-
|-
| 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 ++ || Post-incrémentation (A=A+1) || Ajoute un espace à la suite de "A". Evalué sur la valeur d'origine || Basique
|-
|-
| A! || Factorial || Runtime error. The rest of the line is skipped. || Advanced, Professional
| A -= B || Soustraction-assignation (A=A-B) || Soustraction-assignation (A=A-B) || Basique
|-
|-
| SQRT A || Square root of A || Runtime error. The rest of the line is skipped. || Advanced, Professional
| -- A || Pré-décrémentation (A=A-1) || Retire le dernier caractère de la chaîne. Erreur d'éxecution si la chaîne est vide. Evalué sur la valeur modifiée || Basique
|-
|-
| SIN A || Sine of A (degrees) || Runtime error. The rest of the line is skipped. || Professional
| A -- || Post-décrémentation (A=A-1) || Retire le dernier caractère de la chaîne. Erreur d'éxecution si la chaîne est vide. Evalué sur la valeur d'origine || Basique
|-
|-
| COS A || Cosine of A (degrees) || Runtime error. The rest of the line is skipped. || Professional
| A *= B || Multiplication-assignation (A=A*B) || Erreur d'exécution. Le reste de la ligne est passé || Basique
|-
|-
| TAN A || Tangent of A (degrees) || Runtime error. The rest of the line is skipped. || Professional
| A /= B || Division-assignation (A=A/B) || Erreur d'exécution. Le reste de la ligne est passé || Basique
|-
|-
| ASIN A || Inverse sine of A (degrees) || Runtime error. The rest of the line is skipped. || Professional
| A ^= B || Exponentielle-assignation (A=A^B) || Erreur d'exécution. Le reste de la ligne est passé || Avancée
|-
|-
| ACOS A || Inverse cosine of A (degrees) || Runtime error. The rest of the line is skipped. || Professional
| A %= B || Modulo-assignation (A=A%B) || Erreur d'exécution. Le reste de la ligne est passé || Avancée
|-
|-
| ATAN A || Inverse tangent of A (degrees) || Runtime error. The rest of the line is skipped. || Professional
|}
|}


=== Logical operators ===
=== Les opérateurs logiques ===
 
Les opérateurs logiques vérifient la véracité d'une affirmation et rendent une réponse sous forme binaire, soit '''"0"''' pour '''"Faux"''', soit '''"1"''' pour '''"Vrai"'''. Les opérateurs '''"NOT"''', '''"AND"''' et '''"OR"''' considèrent 0 comme étant faux et toutes autres valeurs comme étant vraies.
Logical operators are checks that identify if the statement is true or false.<br>
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.


{| class="wikitable"
{| class="wikitable"
Line 183: Line 183:
! Operation || Numeric operation || String operation || Chip availability
! 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 || A est plus petit que B || "A" est avant "B" dans l'ordre alphabétique || Basique
|-
|-
| A > B || Greater than || returns 0 if String A is first in alphabetical order, returns 1 if not. || All
| A > B || A est plus grand que B || "A" est après "B" dans l'ordre alphabétique || Basique
|-
|-
| 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 || A est égal à B || "A" est égale à "B" || Basique
|-
|-
| 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 || < ou == || < ou == || Basique
|-
|-
| A != B || Not equal to || returns 1 if String A is not equal to String B, 0 if it is. || All
| A >= B || > ou == || > ou == || Basique
|-
|-
| A == B || Equal to || returns 1 if String A is equal to String B, 0 if not. || All
| A != B || A n'est pas égal à B || "A" n'est pas égale à "B" || Basique
|-
|-
| NOT A || Not || Returns 1 if A is 0, otherwise returns 0. || All
| NOT A || A est égal à 0 || "A" est 0 || Basique
|-
|-
| A AND B || And || Returns 1 if neither A nor B are 0, otherwise returns 0. || All
| A AND B || A et B ne sont pas égaux à 0  || "A" et "B" ne sont pas 0 || Basique
|-
|-
| A OR B || Or || Returns 1 if either A or B is not 0, otherwise returns 0. || All
| A OR B || A ou B n'est pas égal à 0 || "A" ou "B" n'est pas 0 || Basique
|}
|}


=== Mixing variable types in operations ===
=== Opérations sur des paramètres mixtes ===
Réaliser une opération sur des paramètres de types différents revient à tous les considérer comme des chaînes de caractères.
* Exemple:
PreviouslyNumber= "10" + 15
* Ce script revient à associer la variable '''PreviouslyNumber''' à la chaîne de caractères '''"1015"'''.
A noter que si des variables sont impliquées, elles ne changent pas de type au cours du processus. Leurs valeurs sont juste projetées comme des chaînes de caractères pour les besoins de l'opération.
* Exemple:
PurelyNumber = 15
PurelyString = "10" + PurelyNumber
* A l'exécution de ce script, la variable '''PurelyString''' est associée à la chaîne de caractères '''"1015"''', tandis que la valeur de '''PurelyNumber''' reste le chiffre '''15'''.


Mixing variable types in an operation handles the operation using all parameters as ''strings''.
=== Ordre des opérations ===
Lorsqu'une instruction comprend plusieurs opérations, celle-ci sont réalisées en suivant l'ordre de précédence suivant, de haut en bas, de gauche à droite:


previouslyNumber= "10" + 15
{| class="wikitable"
* 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:
! Operateurs
|-
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 ===
| sqrt, %, abs, sin, cos, tan
 
|-
Goto syntax is used when the normal script reading order from 1->20 is not desired, or needs to be altered.
| - (valeur négative)
 
|-
Goto is used with the following syntax:
| ^
*'''goto lineNumber'''
|-
** lineNumber is the line which this command will take the script execution.<br>
| *, /
** 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.
| Not
|-
| Or
|-
| And
|-
|}


if variable == 5 then '''goto 4''' end '''goto 6'''
==Les Commandes==
 
The script above will go to line number 4, if '''variable''' has a value of 5.<br>
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 conditional ===
Line 269: Line 280:
* This script sets '''endResult''' to 2 if '''variable''' has a value of 0, and '''endResult''' equals to 1.
* This script sets '''endResult''' to 2 if '''variable''' has a value of 0, and '''endResult''' equals to 1.
* Otherwise it sets '''endResult''' to 1.
* Otherwise it sets '''endResult''' to 1.
=== 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.<br>
** 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.<br>
Otherwise it will go to line number 6. Numerical operations can also be done "inside" the goto, e.g.
  goto 4+1


=== Comments ===
=== Comments ===
Line 282: Line 314:
* An example of a possible comment syntax
* An example of a possible comment syntax


== Order of Operations ==
== Les erreurs ==
 
Operations are conducted in the following order, when operators have the same precidence, left to right.<br>
Where a line has multiple statements, they are executed left to right.
 
{| class="wikitable"
|-
! Operators
! Comments
|-
| ++ --
|
|-
| <nowiki>!</nowiki>
|
|-
| operators
| sqrt, abs, sin etc.
|-
| <nowiki>-</nowiki>
| negate
|-
| ^
|
|-
| */
|
|-
| <nowiki>< > == != <= >=</nowiki>
| Surprise!
|-
| <nowiki>+-</nowiki>
|
|-
| not (logical negation)
|
|-
| or
|
|-
| and
|
|-
|}
 
== Errors ==
 
There are two types of errors that can happen with the programming language.
# Syntax errors
# 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 ==
Il y a deux types d'erreurs qui peuvent survenir pendant l'éxecution d'une séquence YOLOL:
This is a list of known problems regarding yolol:<br>
# '''Les erreurs de syntaxe ("syntax errors")''': elles résultent d'un script invalide et empêchent l'interprétation de la ligne toute entière, qui est donc ignorée pour passer directement à la suivante.
# '''Les erreurs d'exécution ("runtime errors")''': elles ne sont détectées que pendant l'éxecution du script et provoquent l'arrêt de l'interprétation de la ligne en cours pour passer à la suivante. Elles n'impactent donc pas les instructions antérieures.


* 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
== Bugs connus/Comportements indésirables==
Voici une liste des problèmes relevés avec l'utilisation du langage YOLOL:<br>
* Les noms de variables contenant les mots-clé "if", "else" et "end" sont mal interprétés par le langage et provoquent une erreur de syntaxe. Les noms tels que '''life''' ou '''endurance''' sont donc à éviter.
*


==YOLOL Tips & Tricks==
==YOLOL Tips & Tricks==
Line 345: Line 329:
* [[YOLOL Tricks]]
* [[YOLOL Tricks]]


== Related Pages ==
== Pages associées ==
* [[Data networks]]
* [[Data networks/fr|Réseaux de données]]
* [[Devices and machines]]
* [[Devices and machines/fr|Appareils et machines]]
* [[Device fields]]
* [[Device fields/fr|Champs de périphérique ]]
* [[Universal tool|Universal tool]]
* [[Universal tool/fr|Outil universel]]
* [[YOLOL Chip]]
* [[YOLOL Chip/fr|Puce YOLOL]]
* [[Memory chip]]
* [[Chip socket/fr|Socle à puce]]


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

Latest revision as of 14:15, 14 April 2022

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


Introduction

le YOLOL est un langage de programmation spécifique à Starbase qui est utilisé en parallèle du l'outil universel pour contrôler et gérer les appareils.
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 d'accéder aux champs de périphérique.
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 si il est mené à son terme.
  • Chaque lignes peut contenir un maximum de 70 caractères (symboles et espaces inclus).

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 vides 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).
  • Une seule ligne de code peut contenir plusieurs instructions à la fois, autant que peut le supporter la limite maximale de caractères. Celle-ci seront alors lues dans l'ordre de gauche à droite.
  • Certaines instructions permettent de passer à une ligne spécifique, ce qui rend le code plus modulable.
  • Les espaces blancs " " dans le code sont optionnels pour la plupart des cas, comme par exemple avant des ":", après les commandes "if", "then" et "end", ou encore entre les lettres, les chiffres, et les symboles, etc. Ils ne sont nécessaires que lorsqu'il y a risque d'ambiguité sans.

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 le nom de la variable sera appelé, c'est sa 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.

Les variables internes et externes

Il existe deux genre de variables: les variables internes qui ne peuvent être utilisées qu'au sein de la puce YOLOL où elles ont été initiées et les variables externes qui font appel aux champs de périphérique des appareils branchés sur le même réseau de données pour en demander ou modifier 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, par exemple pour ouvrir une porte si un bouton est appuyé.

Remarques

  • Les champs 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, une variable externe qui en modifie la valeur le fera sur tout les appareils associés.
  • Il n'est actuellement pas possible d'appeler une variable initiée sur un puce YOLOL depuis une autre puce YOLOL.

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".

Comme pour les valeurs numériques, la taille maximale d'une chaîne de caractères est de 64-bit.

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.

Les Opérations

A noter que si les opérations les plus basiques peuvent être utilisées par n'importe quelle puce YOLOL, certaines plus complexes en nécessite des plus avancées, voire de qualité professionelle.

Les opérateurs arythmétiques

Opération Valeurs numériques Chaînes de caractères Puce nécessaire
A + B Addition "B" est ajouté à la suite de "A" Basique
A - B Soustraction La dernière occurence de "B" dans "A" est supprimée Basique
A * B Multiplication Erreur d'exécution. Le reste de la ligne est passé Basique
A / B Division Erreur d'exécution. Le reste de la ligne est passé Basique
A ^ B Exponentielle Erreur d'exécution. Le reste de la ligne est passé Avancée
A % B Modulo Erreur d'exécution. Le reste de la ligne est passé Avancée
ABS A Absolue Erreur d'exécution. Le reste de la ligne est passé Avancée
A! Factorielle Erreur d'exécution. Le reste de la ligne est passé Avancée
SQRT A Racine carrée Erreur d'exécution. Le reste de la ligne est passé Avancée
SIN A Sinus (degrés) Erreur d'exécution. Le reste de la ligne est passé Professionnelle
COS A Cosinus (degrés) Erreur d'exécution. Le reste de la ligne est passé Professionnelle
TAN A Tangente (degrés) Erreur d'exécution. Le reste de la ligne est passé Professionnelle
ASIN A Sinus inversé (degrés) Erreur d'exécution. Le reste de la ligne est passé Professionnelle
ACOS A Cosinus inversé (degrés) Erreur d'exécution. Le reste de la ligne est passé Professionnelle
ATAN A Tangente inversée (degrés) Erreur d'exécution. Le reste de la ligne est passé Professionnelle

Les opérateurs d'assignation

Operation Valeurs numériques Chaînes de caractères Puce nécessaire
A = B Assignation Assignation Basique
A += B Addition-assignation (A=A+B) Addition-assignation (A=A+B) Basique
++ A Pré-incrémentation (A=A+1) Ajoute un espace à la suite de "A". Evalué sur la valeur modifiée Basique
A ++ Post-incrémentation (A=A+1) Ajoute un espace à la suite de "A". Evalué sur la valeur d'origine Basique
A -= B Soustraction-assignation (A=A-B) Soustraction-assignation (A=A-B) Basique
-- A Pré-décrémentation (A=A-1) Retire le dernier caractère de la chaîne. Erreur d'éxecution si la chaîne est vide. Evalué sur la valeur modifiée Basique
A -- Post-décrémentation (A=A-1) Retire le dernier caractère de la chaîne. Erreur d'éxecution si la chaîne est vide. Evalué sur la valeur d'origine Basique
A *= B Multiplication-assignation (A=A*B) Erreur d'exécution. Le reste de la ligne est passé Basique
A /= B Division-assignation (A=A/B) Erreur d'exécution. Le reste de la ligne est passé Basique
A ^= B Exponentielle-assignation (A=A^B) Erreur d'exécution. Le reste de la ligne est passé Avancée
A %= B Modulo-assignation (A=A%B) Erreur d'exécution. Le reste de la ligne est passé Avancée

Les opérateurs logiques

Les opérateurs logiques vérifient la véracité d'une affirmation et rendent une réponse sous forme binaire, soit "0" pour "Faux", soit "1" pour "Vrai". Les opérateurs "NOT", "AND" et "OR" considèrent 0 comme étant faux et toutes autres valeurs comme étant vraies.

Operation Numeric operation String operation Chip availability
A < B A est plus petit que B "A" est avant "B" dans l'ordre alphabétique Basique
A > B A est plus grand que B "A" est après "B" dans l'ordre alphabétique Basique
A == B A est égal à B "A" est égale à "B" Basique
A <= B < ou == < ou == Basique
A >= B > ou == > ou == Basique
A != B A n'est pas égal à B "A" n'est pas égale à "B" Basique
NOT A A est égal à 0 "A" est 0 Basique
A AND B A et B ne sont pas égaux à 0 "A" et "B" ne sont pas 0 Basique
A OR B A ou B n'est pas égal à 0 "A" ou "B" n'est pas 0 Basique

Opérations sur des paramètres mixtes

Réaliser une opération sur des paramètres de types différents revient à tous les considérer comme des chaînes de caractères.

  • Exemple:
PreviouslyNumber= "10" + 15
  • Ce script revient à associer la variable PreviouslyNumber à la chaîne de caractères "1015".

A noter que si des variables sont impliquées, elles ne changent pas de type au cours du processus. Leurs valeurs sont juste projetées comme des chaînes de caractères pour les besoins de l'opération.

  • Exemple:
PurelyNumber = 15
PurelyString = "10" + PurelyNumber
  • A l'exécution de ce script, la variable PurelyString est associée à la chaîne de caractères "1015", tandis que la valeur de PurelyNumber reste le chiffre 15.

Ordre des opérations

Lorsqu'une instruction comprend plusieurs opérations, celle-ci sont réalisées en suivant l'ordre de précédence suivant, de haut en bas, de gauche à droite:

Operateurs
++, --
!
sqrt, %, abs, sin, cos, tan
- (valeur négative)
^
*, /
<, >, ==, !=, <=, >=
+, -
Not
Or
And

Les Commandes

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.

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

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

Les erreurs

Il y a deux types d'erreurs qui peuvent survenir pendant l'éxecution d'une séquence YOLOL:

  1. Les erreurs de syntaxe ("syntax errors"): elles résultent d'un script invalide et empêchent l'interprétation de la ligne toute entière, qui est donc ignorée pour passer directement à la suivante.
  2. Les erreurs d'exécution ("runtime errors"): elles ne sont détectées que pendant l'éxecution du script et provoquent l'arrêt de l'interprétation de la ligne en cours pour passer à la suivante. Elles n'impactent donc pas les instructions antérieures.

Bugs connus/Comportements indésirables

Voici une liste des problèmes relevés avec l'utilisation du langage YOLOL:

  • Les noms de variables contenant les mots-clé "if", "else" et "end" sont mal interprétés par le langage et provoquent une erreur de syntaxe. Les noms tels que life ou endurance sont donc à éviter.

YOLOL Tips & Tricks

Pages associées

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