Langage BASIC
Le langage BASIC, mot par mot
Chaque instruction, directive et opérateur du dialecte BASIC d'aukimi, et les 52 commandes que le compilateur fournit lui-même : listes, maps, tâches, handles. Chaque page donne la syntaxe, le sens de chaque partie, un programme qui compile, et les pièges.
Les plus de 2 000 commandes du catalogue (sprites, son, 3D…) sont dans la référence des commandes.
Flux de contrôle · 11
- IFInstructionExécute un bloc d'instructions seulement si une condition est vraie, avec des branches ELSEIF et ELSE facultatives. La première branche vraie s'exécute, les autres sont sautées.
- SELECTInstructionCompare une valeur à une liste de valeurs CASE et exécute la branche de la première qui correspond. CASE DEFAULT s'exécute quand aucune ne correspond.
- FORInstructionRépète un bloc pendant qu'un compteur va d'une valeur de départ à une valeur de fin, en ajoutant le pas après chaque tour.
- WHILEInstructionRépète un bloc tant qu'une condition est vraie. La condition est testée avant chaque tour : le corps peut donc ne jamais s'exécuter.
- REPEATInstructionRépète un bloc jusqu'à ce qu'une condition devienne vraie. La condition est testée après chaque tour : le corps s'exécute donc au moins une fois.
- DO … LOOPInstructionExécute son corps une fois par image : la boucle d'images d'un jeu classique. Le code avant DO s'exécute d'abord une fois, le code après LOOP une fois quand EXIT quitte la boucle.
- EXITInstructionQuitte aussitôt la boucle la plus intérieure. Le programme continue après son NEXT, ENDWHILE, UNTIL ou LOOP.
- CONTINUEInstructionSaute le reste du tour en cours et lance le tour suivant de la boucle la plus intérieure.
- GOTOInstructionSaute à une étiquette. Un saut en arrière répète du code ; un saut en avant en saute et peut sortir des boucles.
- GOSUBInstructionExécute le sous-programme qui commence à une étiquette, jusqu'à son RETURN, puis reprend après le GOSUB.
- ENDInstructionArrête aussitôt le programme. Rien ne s'exécute après, pas même le code situé après LOOP.
Programme · 2
- CommentsInstructionMarque du texte que le compilateur ignore. Six formes existent : quatre commentaires de ligne et deux commentaires de bloc.
- TRUE, FALSE, NULLInstructionNomment des valeurs fixes : TRUE et FALSE sont des valeurs de vérité, NULL signifie « pas de valeur », et PI vaut 3.141592653589793.
Déclarations · 13
- DIMInstructionDéclare un tableau à une ou plusieurs dimensions, dont les bornes sont incluses. UNDIM le vide.
- GLOBALInstructionDéclare une variable partagée par tout le programme, FUNCTION comprises. S'écrit partout, même dans une FUNCTION.
- LOCALInstructionDéclare une variable propre à un appel de FUNCTION. Elle masque une variable du programme de même nom.
- ASInstructionDonne un type à une variable ou à un tableau. Dès lors, chaque valeur rangée dedans est convertie dans ce type.
- OPTION EXPLICITDirectiveRend les déclarations obligatoires : chaque nom que le programme écrit doit être déclaré avant, sinon le programme ne compile pas.
- #CONSTANTDirectiveDonne un nom à une valeur fixe. On relit la constante avec # devant son nom, partout dans le programme.
- ENUMERATIONInstructionDéclare une suite de constantes numérotées, une par ligne. ENUMERATIONBINARY double la valeur à chaque ligne, pour des drapeaux.
- DATAInstructionÉcrit des valeurs constantes dans une DATASECTION. READ les prend une à une, dans l'ordre ; RESTORE déplace la position de lecture.
- INC / DECInstructionAjoute 1, ou une quantité, à une variable (INC), ou la retranche (DEC).
- FOREACHInstructionParcourt une liste ou une map de son premier élément à son dernier. Dans la boucle, l'élément du tour est l'élément courant.
- Array membersInstructionLit la taille d'un tableau, le redimensionne, insère, retire, cherche et trie des cases, par des membres écrits après un point.
- NewListInstructionDéclare une liste : des valeurs rangées dans l'ordre, avec un élément courant. <name>() lit ou écrit cet élément.
- NewMapInstructionDéclare une map : des valeurs rangées sous des clés texte. <name>(<key>) lit ou écrit une entrée, <name>() l'entrée courante.
Structures et fonctions · 13
- FUNCTIONInstructionDéclare un bloc de code nommé qui reçoit des paramètres et peut rendre une valeur. Il s’exécute jusqu’au bout d’une traite, dans l’image en cours.
- Lifecycle functionsInstructionDonne à une FUNCTION un nom réservé pour que le Moteur l’appelle lui-même : une fois au départ, à chaque image, à pas fixe, ou lors d’une collision, d’un déclencheur, d’un message ou d’un événement d’animation.
- REFInstructionMarque un paramètre de FUNCTION qui reçoit la variable même de l’appelant au lieu d’une copie, pour que la fonction puisse la modifier.
- @ handlesInstructionCrée un handle : une valeur qui désigne une variable. On peut le stocker, le passer et le rendre, puis lire ou écrire la variable à travers lui.
- TYPEInstructionDéclare un type d’enregistrement : un groupe de champs nommés, chacun avec son type. Un enregistrement est une valeur : l’affecter à une variable déclarée en fait une copie complète.
- METHODInstructionDéclare une fonction qui appartient à un TYPE. À l’intérieur, SELF est l’enregistrement sur lequel la méthode est appelée.
- NEWInstructionCrée un enregistrement neuf d’un TYPE et passe les arguments à sa méthode New, le constructeur, s’il en a une.
- DELETEInstructionMet fin à un enregistrement : exécute sa méthode Delete, s’il en a une, puis le marque comme supprimé.
- WITHInstructionOuvre un bloc où \field vaut <record>.field, n’importe où sur la ligne, pour écrire moins quand beaucoup de lignes touchent le même enregistrement.
- WITH <family>InstructionOuvre un bloc où \property appelle la commande du catalogue <Family><Property> sur un objet, pour n’écrire qu’une fois son identifiant et le nom de la famille.
- Dot notationInstructionAttache une famille de commandes à une variable : s.position(100, 200) appelle alors SpritePosition(s, 100, 200) et s.x lit SpriteX(s), partout dans le programme.
- $"…"OpérateurConstruit une chaîne à partir de texte et de trous : chaque {expression} est remplacé par Str(expression), et la chaîne devient une concaténation.
- @exposeDirectiveFait de l’affectation de premier niveau de la ligne suivante un réglage affiché dans l’Inspecteur. La valeur réglée là remplace celle écrite dans le code au démarrage du programme.
Préprocesseur · 5
- #INCLUDEDirectiveRemplace la directive par les lignes d'un module BASIC du projet, une seule fois par programme. Les demandes suivantes pour le même module sont ignorées.
- #INSERTDirectiveRemplace la directive par les lignes d'un module BASIC du projet, à chaque fois qu'elle apparaît.
- IncludeFileFonctionRemplace la ligne par les lignes d'un module BASIC du projet, à chaque fois qu'elle apparaît. C'est le nom PureBasic de #INSERT.
- #IFDirectiveGarde les lignes de la première branche dont la condition est vraie et écarte les autres, avant la compilation. Une condition teste des symboles, comme le profil de la cible.
- #DEFINEDirectiveAjoute un symbole pour #IF avec #DEFINE, ou en retire un avec #UNDEF. Un symbole n'a pas de valeur : il est défini ou non.
Opérateurs · 4
- AND, OR, NOTOpérateurCombine des conditions : AND est vrai quand les deux côtés le sont, OR quand au moins un l'est, et NOT inverse une condition. Ils sont logiques, pas bit à bit.
- Bitwise operatorsOpérateurCalcule sur les bits des nombres entiers : && et, || ou, ~~ ou exclusif, ! inverse tous les bits, << et >> décalent.
- DIVOpérateurDivise deux nombres. / garde les décimales ; DIV ne garde que la partie entière, coupée vers zéro.
- ComparisonOpérateurCompare deux valeurs : égal, différent, inférieur, supérieur, inférieur ou égal, supérieur ou égal. Les nombres se comparent par valeur, le texte par codes de caractères.
Listes · 25
- AddElementCommande de listeAjoute un élément après l'élément courant et en fait l'élément courant. Le nouvel élément prend la valeur par défaut du type de la liste.
- InsertElementCommande de listeAjoute un élément avant l'élément courant et en fait l'élément courant. Le nouvel élément prend la valeur par défaut du type de la liste.
- DeleteElementCommande de listeSupprime l'élément courant. L'élément qui le précède devient l'élément courant.
- ClearListCommande de listeRetire tous les éléments d'une liste. La liste reste utilisable et n'a plus d'élément courant.
- FreeListCommande de listeRetire tous les éléments d'une liste et la libère. Elle n'est plus utilisable avant qu'un nouveau NewList la déclare.
- ListSizeCommande de listeRenvoie le nombre d'éléments d'une liste.
- ListIndexCommande de listeRenvoie la position de l'élément courant, comptée à partir de 0.
- ResetListCommande de listePlace le curseur avant le premier élément, pour que le NextElement() suivant tombe sur le premier.
- NextElementCommande de listeAvance le curseur à l'élément suivant et en fait l'élément courant.
- PreviousElementCommande de listeRecule le curseur à l'élément précédent et en fait l'élément courant.
- FirstElementCommande de listeFait du premier élément de la liste l'élément courant.
- LastElementCommande de listeFait du dernier élément de la liste l'élément courant.
- SelectElementCommande de listeFait de l'élément situé à une position donnée l'élément courant.
- CopyListCommande de listeRemplace le contenu d'une liste par une copie d'une autre. Ce qu'on change ensuite dans l'une ne se voit pas dans l'autre.
- CompareListCommande de listeCompare deux listes élément par élément, dans l'ordre.
- MergeListsCommande de listeDéplace tous les éléments d'une liste dans une autre. La liste source finit vide.
- SortListCommande de listeTrie sur place une liste de nombres ou de textes.
- SortStructuredListCommande de listeTrie sur place une liste de records selon l'un de leurs champs.
- RandomizeListCommande de listeMélange au hasard les éléments d'une liste, ou d'une partie de celle-ci.
- PushListPositionCommande de listeGarde l'élément courant sur une pile, pour que PopListPosition() y revienne plus tard.
- PopListPositionCommande de listeRedonne la main à l'élément gardé par le dernier PushListPosition(), et le retire de la pile.
- MoveElementCommande de listeDéplace l'élément courant ailleurs dans la même liste. Il reste l'élément courant.
- SwapElementsCommande de listeÉchange deux éléments d'une liste, désignés par leur position.
- SplitListCommande de listeDéplace l'élément courant et tous ceux qui le suivent dans une autre liste.
- ChangeCurrentElementCommande de listeFait de l'élément situé à une position donnée l'élément courant. C'est un autre nom de SelectElement().
Maps · 13
- AddMapElementCommande de mapCrée l’entrée d’une clé et en fait l’entrée courante. Une entrée qui existe déjà est remise à la valeur par défaut.
- FindMapElementCommande de mapCherche une clé sans la créer. Si la clé existe, son entrée devient l’entrée courante.
- DeleteMapElementCommande de mapSupprime l’entrée d’une clé, ou l’entrée courante si aucune clé n’est donnée.
- ClearMapCommande de mapRetire toutes les entrées d’une table. La table reste utilisable.
- FreeMapCommande de mapRetire toutes les entrées d’une table et la libère. Une table libérée ne sert plus tant qu’elle n’est pas redéclarée avec NewMap.
- MapSizeCommande de mapDonne le nombre d’entrées d’une table.
- MapKeyCommande de mapDonne la clé de l’entrée courante d’une table.
- ResetMapCommande de mapPlace le curseur d’une table avant sa première entrée, pour que le NextMapElement() suivant aille à la première entrée.
- NextMapElementCommande de mapPasse à l’entrée suivante d’une table et en fait l’entrée courante. Les entrées viennent dans leur ordre de création.
- CopyMapCommande de mapRemplace toutes les entrées de la table de destination par une copie des entrées de la table source.
- CompareMapCommande de mapIndique si deux tables contiennent les mêmes clés avec les mêmes valeurs. L’ordre de création des entrées ne compte pas.
- PushMapPositionCommande de mapMémorise l’entrée courante d’une table sur une pile, pour que PopMapPosition() puisse y revenir.
- PopMapPositionCommande de mapRevient à l’entrée mémorisée par le dernier PushMapPosition() et en refait l’entrée courante.
Nombres · 3
Handles · 4
- GetRefFonctionLit la variable, le champ, la case de tableau, l’élément de liste ou l’entrée de table désigné par un handle.
- SetRefFonctionÉcrit une valeur dans la variable, le champ, la case de tableau, l’élément de liste ou l’entrée de table désigné par un handle.
- IsRefFonctionIndique si un handle désigne encore quelque chose, pour pouvoir utiliser GetRef() et SetRef() sans risque.
- ReleaseRefFonctionMet fin à un handle. La variable qu’il désignait n’est pas touchée ; seul le handle cesse de fonctionner.
Erreurs · 3
- TRYInstructionExécute des instructions et intercepte l’erreur d’exécution qu’elles lèvent. CATCH traite l’erreur, FINALLY s’exécute toujours à la fin.
- THROWInstructionLève une erreur que reçoit le CATCH englobant le plus proche. Sans CATCH, le programme s’arrête à cette ligne.
- RETHROWInstructionTransmet l’erreur traitée dans un CATCH au TRY englobant suivant, sans la modifier.
Tâches · 11
- STARTTASKInstructionLance une étiquette comme tâche coopérative, qui tourne à côté du programme principal, et range son handle dans une variable.
- AWAITTASKInstructionMet le code courant en pause jusqu’à la fin d’une tâche. Le moteur continue de dessiner les images pendant ce temps.
- AWAITALLInstructionMet le code courant en pause jusqu’à la fin de toutes les tâches indiquées.
- AWAITANYInstructionMet le code courant en pause jusqu’à ce que la première des tâches indiquées se termine, échoue ou soit annulée.
- CANCELTASKInstructionDemande à une tâche de s’arrêter. La tâche s’arrête à sa prochaine cession, et le code après cette cession ne s’exécute jamais.
- YieldTaskFonctionTermine l’image en cours et reprend à la suivante, comme Sync(). Son nom se lit bien dans une tâche.
- WaitFonctionMet le code courant en pause pendant un nombre de secondes de temps de jeu. Le moteur continue de dessiner les images pendant l’attente.
- TaskDoneFonctionIndique si une tâche s’est terminée normalement. Interrogée depuis la boucle principale, elle laisse le jeu dessiner pendant que la tâche travaille.
- TaskFailedFonctionIndique si une tâche s’est arrêtée sur une erreur.
- TaskCancelledFonctionIndique si CANCELTASK a été appelé sur une tâche encore en cours.
- TaskResultFonctionDonne la valeur qu’une tâche terminée a rendue avec RETURN.