Um bloco de código, ou bloco, é um grupo de zero ou mais expressões que apresenta um novo corpo com escopo. (Um bloco sem expressões seria um bloco vazio e idealmente seria usado apenas com um espaço reservado para ser preenchido mais tarde.)
Blocos de código podem aparecer apenas após identificadores.
Escopo: Refere-se à parte do programa em que a associação de um identificador (nome) a um valor é válido e no qual esse nome pode ser usado para se referir ao valor. Por exemplo, quaisquer constantes ou variáveis que você cria em um bloco de código existe apenas no contexto do bloco de código. O que significa que o tempo de vida dos objetos é limitado ao escopo em que é criado e não pode ser usado fora desse bloco de código.
O exemplo a seguir mostra como calcular a quantidade máxima de flechas que podem ser compradas com o número de moedas que o jogador possui. A constante MaxArrowsYouCanBuy é criada no bloco if e, por isso, seu escopo é limitado ao bloco if. Quando a constante MaxArrowsYouCanBuy é usada na string impressa, um erro é gerado porque o nome MaxArrowsYouCanBuy não existe no escopo fora da expressão if.
CoinsPerQuiver : int = 100
ArrowsPerQuiver : int = 15
var Coins : int = 225
if (MaxQuiversYouCanBuy : int = Floor(Coins / CoinsPerQuiver)):
MaxArrowsYouCanBuy : int = MaxQuiversYouCanBuy * ArrowsPerQuiver
Print("Você pode comprar no máximo {MaxArrowsYouCanBuy} flechas com as suas moedas.") # Erro: Identificador MaxArrowsYouCanBuy desconhecido
O Verse não é compatível com a reutilização de um identificador mesmo que seja declarado em um escopo diferente, a menos que você possa qualificar o identificador ao adicionar (qualifying_scope:) antes do identificador, no qual qualifying_scope é o nome do módulo de um identificador, classe ou interface. Ao definir ou usar o identificador, você também deve adicionar um qualificador ao identificador.
Consulte mais detalhes em: módulos, classe e interface.
Formatos dos blocos de código
Os blocos de código têm três formatos possíveis no Verse. Todos são semanticamente equivalentes, então você poderá mudar o estilo de um bloco de código sem mudar sua finalidade.
Se você aninhar um bloco de código dentro de outro bloco de código, ainda deverá usar um identificador no início de um bloco de código aninhado. Para aninhar código, use a expressão de block.
Formatação espaçada
Com esta formatação, o bloco começa com :, sendo que cada expressão que o acompanha tem sua própria linha. Cada linha é recuada em quatro espaços.
~~~(verse) if (test-arg-block): expression1 expression2
Observe que `if (test-arg-block)` não faz parte do bloco, mas o bloco começa no final dessa linha com `:`.
Você também poderá usar `;` para separar várias expressões em uma única linha.
###Formatação multilinha entre chaves
O bloco é delimitado por `{}` e as expressões estão em novas linhas.
~~~(verse)
if (test-arg-block)
{
expression1
expression2
}
Você também poderá usar ; para separar várias expressões em uma única linha.
Formatação com ponto em linha única
Com esta formatação, o bloco começa com . e as expressões na mesma linha, e cada expressão separada por ; em vez de ser colocada em uma nova linha.
~~~(verse) if (test-arg-block). expression1; expression2 ~~~
Se usar a formatação com ponto em linha única em uma expressão if que tenha else, só será possível ter uma expressão antes de else. Por exemplo:
~~~(verse)
if (test-arg-block). expression1 else. expression2
~~~