Histórico da Página
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:
Sem Formato |
---|
// 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:
Sem Formato |
---|
// 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:
Sem Formato |
---|
// 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:
Sem Formato |
---|
// 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.