# Estructuras de Control

### Condicionales

Las estructuras condicionales permiten que el contrato inteligente realice acciones dependiendo del cumplimiento de condiciones específicas.

* **if-else**: Es la estructura condicional más básica, utilizada para ejecutar bloques de código si una condición es verdadera o falsa.

```solidity

if (condicion) {
    // Código a ejecutar si la condición es verdadera
} else {
    // Código a ejecutar si la condición es falsa
}
```

### Bucles

Los bucles permiten ejecutar un bloque de código repetidamente bajo ciertas condiciones.

* **for**: Utilizado para repetir un bloque de código un número determinado de veces.

```solidity
for (inicialización; condición; incremento) {
    // Código a ejecutar en cada iteración
}
```

* **while**: Ejecuta un bloque de código mientras una condición específica sea verdadera.

```solidity
while (condición) {
    // Código a ejecutar mientras la condición sea verdadera
}
```

* **do-while**: Similar al bucle while, pero garantiza que el bloque de código se ejecute al menos una vez.

```solidity
do {
    // Código a ejecutar
} while (condición);
```

### Control de Flujo

Solidity también incluye declaraciones de control de flujo que afectan cómo se ejecutan los bucles y condicionales.

* **break**: Termina la ejecución del bucle más interno. Se utiliza para salir de un bucle cuando se cumple una condición específica.

  ```solidity
  while (condición) {
      // Código a ejecutar mientras la condición sea verdadera
  		if (expresión){
  			// Detiene la ejecución del bucle si la expresión es verdadera
  			break;
  			}
   }
  ```
* **continue**: Salta el resto del código en el bucle actual e inicia la siguiente iteración del bucle.

  ```solidity
  while (condición) {
      // Código a ejecutar mientras la condición sea verdadera
  		if (expresión){
  			// Sale de esta iteración del bucle si la expresión es verdadera
  			continue;
  			}
   }
  ```

### Manejo de Errores

Existen también estructuras para manejar errores y revertir transacciones si es necesario.

* **require**: Se utiliza para validar condiciones y revertir la transacción si la condición no se cumple, opcionalmente con un mensaje de error.

```solidity
require(condición, "Mensaje de error");
```

* **revert**: Revierte la transacción. Puede ser utilizado con un mensaje de error específico.

```solidity
revert("Mensaje de error");
```

* **assert**: Utilizado para realizar comprobaciones internas y de invariantes. Si la condición evaluada es falsa, la transacción se revierte y consume todo el gas disponible, indicando un error grave.

```solidity
assert(condición);
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://edp.ethkipu.org/modulo-2/fundamentos-de-solidity/estructuras-de-control.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
