2.4. Expresiones de control de flujo

Las expresiones de control de flujo influyen en la forma en que el código es ejecutado, y dividen el código en bloques. Los bloques empiezan con una palabra reservada, por ejemplo while y terminan con la palabra reservada endwhile, formada por el prefijo end y la misma palabra que empezó el bucle. También es posible acabar un bloque con la palabra end. El código que se entre dichas palabras se denomina el cuerpo de la expresión de control.

Las siguientes construcciones son posibles

2.4.1. Sentencia if

	  if (condicion)
	     cuerpo-entonces
	  end
	
	  if (condicion)
	     cuerpo-entonces
	  else
	     cuerpo-alternativa
	  end
	
	  if (condicion)
	     cuerpo-entonces
	  elseif (condicion)
	     cuerpo-entonces
	  else
	     cuerpo-alternativa
	  end
	

Si la condición del if es cierta, entonces se ejecuta el cuerpo-entonces que está a continuación. Si es falso se pasa a evaluar la condición del siguiente elseif, ejecutando se el código correspondiente si su condición es cierta, o pasando al siguiente en caso contrario. Finalmente, si ninguna condición evaluó cierta se ejecuta el cuerpo-alternativa.

Tanto los elseif, como el else son opcionales, sin embargo puede haber tantos elseif como sean necesarios.

2.4.2. Sentencia while

La sintaxis es la siguiente

	  while (condicion)
	     cuerpo
	  endwhile
	

Las sentencias del cuerpo se ejecutaran mientras condición se siga evaluando a cierto. Si en el cuerpo no se modifica alguna de las variables que se evalúan en la condición entraremos en un bucle infinito.

2.4.3. Sentencia for

La sintaxis de la sentencia for es muy semejante a la del while.

	  for var = expresion
	     body
	  endfor
	

En el bucle for se evalúa la expresión una vez al principio y se asigna a la variable var. Sin embargo la expresión de asignación del for funciona un poco distinto que en el resto de los casos. En lugar de asignar la expresión completa, se asigna sólo una columna y el bucle va iterando en todas las columnas. Por ejemplo

	  octave> for a=ones(2,1)*[1:3]
	  >     a
	  > endfor
	  a =
	    1
	    1
	  a =
	    2
	    2
	  a =
	    3
	    3
	

Normalmente el bucle for se usa cuando se quieren hacer las cosas cierto número de veces (tantas como columnas tenga el resultado de evaluar la expresión).

2.4.4. Sentencias break y continue

Estas sentencias sólo pueden usarse dentro de bucles for y while.

break salta fuera del bucle más interno que lo encierra. En el siguiente ejemplo, el bucle terminará cuando la variable var valga 3:

	  for var=1:10
	     a
	     if(a==3)
	         break
	     endif
	  endfor
	

La sentencia continue es semejante, pero en lugar de terminar el bucle termina sólo la iteración actual. Ejemplo:

	  for var=1:10
	     if(a==3)
	         continue
	     endif
	     a
	  endfor
	

En este caso el bucle llegará hasta el final (a=10), pero no se imprimirá el valor de a cuando esta valga 3.

Normalmente estas dos sentencias se usan desde dentro de condiciones if.

2.4.5. Manejo de excepciones

Octave soporta un manejo limitado de excepciones con la sentencia try. La sintaxis es la siguiente:

	  try
	     cuerpo
	  catch
	     código_de_recuperacion
	  end_try_catch
	

El código_de_recuperación únicamente es ejecutado si sucede algún error en el cuerpo. Durante la ejecución del cuerpo no se imprime ningún mensaje de error. Si alguno ocurre se almacenan en la variable __error_text__, accesible desde el código_de_recuperación.