Árvore de páginas

El comando IF ... ELSE ... ENDIF (SE ... SINO ... FINAL DEL SI) permite condicionar la ejecución de una secuencia de instrucciones. Esta estructura de programación decide entre dos caminos alternativos, dependiendo si una condición especificada es verdadera o falsa. Después de la ejecución de uno de los caminos, los dos caminos se unen nuevamente. Por ejemplo: 

// Función de cálculo del Impuesto de renta de persona física (IRPF) FUNCTION CalcIR(nSalario)
FUNCTION CalcIR(nSalario)

LOCAL nDesconto := 0

IF nSalario > 5000
               nDesconto := nSalario * 0.275
ELSE
               nDesconto := nSalario * 0.15
ENDIF

MSGALERT("El descuento sobre el sueldo es de R$ " + Str(nDesconto, 9, 2))

RETURN nDesconto

 

El comando ELSE es opcional. Si éste no se utiliza, se ejecutará solamente la instrucción referente a la condición lógica verdadera. Observe el siguiente ejemplo: 

// Función de cálculo de la comisión del vendedor

FUNCTION CalcCom(nTotVen)

LOCAL nComissao := 0

IF nTotVen > 50000
               nComissao := nTotVen * 0.03
ENDIF

MSGALERT("La comisión del vendedor es de R$  " + Str(nComissao, 9, 2))

RETURN nComissao

 

Por lo tanto, si la condición lógica especificada en el comando IF se evalúa como verdadera (.T.), se ejecutará el bloque de instrucciones entre IF y ELSE, o entre IF y ENDIF, si ELSE no se especifica.

 

Si la condición se evalúa como falsa (.F.), el bloque de instrucciones entre ELSE y ENDIF se ejecutará. Si ELSE no se hubiera especificado, entonces ningún bloque de instrucciones se ejecutará.

 

Desvío múltiple

 

Dependiendo de determinadas condiciones, en algunas rutinas existe la necesidad de seleccionarse un único camino entre diversas alternativas para la continuación del flujo de ejecución. Los comandos DO CASE ... ENDCASE e IF ... ELSEIF ... ENDIF permiten la toma de decisión entre tres o más alternativas de procesamiento.

 

Por lo tanto, cuando la selección del camino que se seguido por el flujo de control involucra más de dos alternativas, es necesario el uso de la estructura de Desvío múltiple o "Caso". La selección se realiza dependiendo de la condición de cada alternativa. Solamente una de las alternativas, aquella que atienda primero su condición, se ejecutará. Observe el siguiente ejemplo: 

// Función de cálculo del Impuesto de renta de persona física (IRPF)

FUNCTION CalcIR(nSalario)

LOCAL nDesconto := 0

DO CASE
       CASE nSalario > 5800
               nDesconto := nSalario * 0.275

       CASE nSalario >= 3400
               nDesconto := nSalario * 0.15

       CASE nSalario >= 2300
               nDesconto := nSalario * 0.075

       OTHERWISE
               cCondicao := "EXENTO"
ENDCASE

IF EMPTY(nDesconto)
               MSGALERT(cCondicao)
ELSE
               MSGALERT("El descuento sobre el sueldo es de R$" + Str(nDesconto, 9, 2))
ENDIF
 
RETURN nDesconto

 

La clausula OTHERWISE (de otra manera) es opcional y significa que se ejecutarán las instrucciones que se encuentren entre ésta y ENDCASE (final del CASE) si ninguna de las condiciones fuera satisfecha.

 

El comando IF ... ELSEIF ... ENDIF es una alternativa para la estructura de control de desvío múltiple, pues su funcionamiento es equivalente al del comando DO CASE ... CASE ... ENDCASE. El ejemplo anterior puede reconstruirse utilizándose el comando IF ... ELSEIF ... ENDIF de la siguiente forma: 

// Función de cálculo del Impuesto de renta de persona física (IRPF) FUNCTION CalcIR(nSalario)


FUNCTION CalcIR(nSalario)
	LOCAL nDesconto := 0
	
	IF nSalario > 5800
		nDesconto := nSalario * 0.275
	ELSEIF nSalario >= 3400
		nDesconto := nSalario * 0.15
	ELSEIF nSalario >= 2300
		nDesconto := nSalario * 0.075
	ELSE
		cCondicao := "EXENTO"
	ENDIF
	
	IF EMPTY(nDesconto)
		MSGALERT(cCondicao)
	ELSE
		MSGALERT("El descuento sobre el sueldo es de R$  " + Str(nDesconto, 9, 2))
	ENDIF
	
RETURN nDesconto
 

 

La cláusula ELSE (si no) es opcional y significa que se ejecutarán las instrucciones que vengan entre esta y el ENDIF (final del desvío múltiple) si no satisfacen  ninguna condición.

  • Sem rótulos