Un bloc de code, ou bloc, est un groupe de zéro expression ou plus qui introduit un nouveau corps à étendue. (Un bloc comportant zéro expression serait un bloc vide et, idéalement, ne serait utilisé qu'en tant qu'espace réservé pour être rempli par la suite.)
Les blocs de code ne peuvent apparaître qu'après les identifiants.
L'étendue désigne la partie du programme où l'association d'un identificateur (nom) à une valeur est valide, et où ce nom peut être utilisé pour faire référence à la valeur. Par exemple, les constantes ou les variables que vous créez dans un bloc de code n'existent que dans le contexte du bloc de code. Cela signifie que la durée de vie des objets est limitée à l'étendue dans laquelle ils sont créés et qu'ils ne peuvent pas être utilisés en dehors de ce bloc de code.
Dans l'exemple suivant, nous vous expliquons comment calculer le nombre maximum de flèches que le joueur peut acheter avec le nombre de pièces dont il dispose. La constante MaxArrowsYouCanBuy est créée dans le bloc if et son étendue est donc limitée au bloc if. Lorsque la constante MaxArrowsYouCanBuy est utilisée dans la chaîne d'impression, une erreur est produite, car le nom MaxArrowsYouCanBuy n'existe pas dans l'étendue en dehors de l'expression 'if'.
CoinsPerQuiver : int = 100
ArrowsPerQuiver : int = 15
var Coins : int = 225
if (MaxQuiversYouCanBuy : int = Floor(Coins / CoinsPerQuiver)):
MaxArrowsYouCanBuy : int = MaxQuiversYouCanBuy * ArrowsPerQuiver
Print("You can buy at most {MaxArrowsYouCanBuy} arrows with your coins.") # Erreur : Identifiant MaxArrowsYouCanBuy inconnu
Verse ne prend pas en charge la réutilisation d'un identifiant même s'il est déclaré dans une étendue différente, à moins que vous puissiez qualifier l'identifiant en ajoutant (qualifying_scope :) devant l'identifiant, auquel cas qualifying_scope est le nom du module, de la classe ou de l'interface d'un identifiant. Chaque fois que vous définissez et utilisez l'identifiant, vous devez également ajouter un qualificateur à l'identifiant.
Pour en savoir plus, consultez les rubriques module, classe et interface.
Formats des blocs de code
Trois formats sont possibles pour les blocs de code dans Verse. Ils sont tous sémantiquement équivalents, de sorte que vous pouvez modifier le style d'un bloc de code sans changer ce qu'il fait.
Si vous imbriquez un bloc de code à l'intérieur d'un autre bloc de code, vous devez toujours utiliser un identifiant au début du bloc de code imbriqué. Pour imbriquer du code, utilisez l'expression de bloc.
Format espacé
Dans ce format, le bloc commence par : à chaque expression qui suit sur sa propre ligne. Chaque ligne est indentée uniformément de quatre espaces.
if (test-arg-block):
expression1
expression2
Notez que if (test-arg-block) ne fait pas partie du bloc, mais que le bloc commence, à la fin de cette ligne, avec :.
Vous pouvez également utiliser ; pour séparer plusieurs expressions sur une même ligne.
Format multiligne à accolades
Le bloc est entouré de {}, et les expressions sont sur de nouvelles lignes.
if (test-arg-block)
{
expression1
expression2
}
Vous pouvez également utiliser ; pour séparer plusieurs expressions sur une même ligne.
Format monoligne à points
Avec ce format, le bloc commence par . avec chaque expression sur la même ligne, et chaque expression est séparée par ; au lieu d'être placée sur une nouvelle ligne.
if (test-arg-block). expression1; expression2
Si vous utilisez le format monoligne à points dans une expression if comportant une expression else, vous ne pouvez avoir qu'une seule expression avant else. Par exemple :
if (test-arg-block). expression1 else. expression2