> ## Documentation Index
> Fetch the complete documentation index at: https://docs.abbyy.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Sentencias

> Sentencias en FlexiLayout language: separación de sentencias, bloques compuestos, ramificación condicional if-then-else y bucles for con break y continue.

<div id="statement-separators">
  ## Separadores de sentencias
</div>

Las sentencias están separadas por un punto y coma (`;`).

<div id="compound-statements">
  ## Sentencias compuestas
</div>

Una o varias sentencias pueden agruparse entre llaves para formar una sentencia compuesta. A las sentencias compuestas se las suele llamar "bloques" (no deben confundirse con los bloques de FlexiLayout).

<div id="conditional-statements">
  ## Sentencias condicionales
</div>

En cualquier sección destinada a escribir código, puede usar sentencias condicionales `if`.

La sentencia `if` controla la ramificación condicional. El cuerpo de una sentencia `if` se ejecuta si el valor de la expresión es `true`. La sintaxis de la sentencia `if` tiene dos formas:

```text theme={null}
selection-statement:
    if ( expression ) then statement
    if ( expression ) then statement else statement
```

En ambas formas de la sentencia `if`, se evalúan las expresiones.

En la primera forma de la sintaxis, si `expression` es `true`, se ejecuta `statement`. Si `expression` es `false`, se ignora `statement`. En la segunda forma de la sintaxis, que usa `else`, se ejecuta la segunda sentencia si `expression` es `false`.

<div id="iteration-statements">
  ## Sentencias de iteración
</div>

En cualquier sección destinada a escribir código, puede usar sentencias de iteración `for`.

La sentencia `for` controla los bucles. El bucle se ejecuta mientras el valor de la expresión es `true`. La sintaxis es la siguiente:

```text theme={null}
iteration-statement:
    for <var-name> from <from-expr> to <to-expr> [ step <step-expr>]
    <statement>
```

El nombre del contador `<var-name>` es obligatorio. Este nombre debe ser distinto de los nombres de las variables declaradas anteriormente. El ámbito del contador es el cuerpo del bucle. Dentro del bucle, no puede cambiar el valor del contador ni declarar una variable con el mismo nombre que el contador.

Los valores inicial `<from-expr>` y final `<to-expr>` del contador se evalúan antes de la primera iteración del bucle. Después, se tratan como constantes enteras para evitar bucles infinitos.

El parámetro `step` es opcional. Si no se especifica el valor de `step`, se considera que es 1. El valor de `step`, junto con los valores inicial y final del contador, se evalúa una vez al comienzo del bucle.

El signo de `step` determina la condición de iteración:

* Para valores positivos de `step`, debe cumplirse la condición `<var-name> ≤ <to-expr>`.
* Para valores negativos de `step`, debe cumplirse la condición `<var-name> ≥ <to-expr>`.

El valor de `step` no puede ser cero. De lo contrario, aparece un mensaje de error.

La `<statement>` puede ser una sola sentencia o un bloque (sentencia compuesta) entre llaves.

También puede usar las siguientes sentencias dentro del bucle:

* `break` – Interrumpe el bucle.
* `continue` – Pasa a la siguiente iteración del bucle.
