Está en la página 1de 5

EXPRESIONES LÓGICAS

• Las expresiones lógicas devuelven como resultado 'verdadero' of


'falso'.

• En una expresión lógica se comparan dos objetos mediante uno de


los siguientes operadores:

= o EQ igual que
<> o NE distinto a
< o LT menor que
<= o LT menor o igual que
> o GT mayor que
>= o GE mayor o igual que

• Al no haber una variable de tipo booleano no podemos usar este


tipo de operadores en instrucciones de asignación. Así lo siguiente
NO sería correcto

x = 2 NE 2.

• El uso de expresiones lógicas en ABAP es sobre todo para


instrucciones de control del tipo

IF a EQ b,
....
ENDIF.

• Para encadenar varias expresiones lógicas usamos los operadores


AND y OR. Recordemos que

verdadero AND verdadero es igual a verdadero


verdadero AND falso es igual a falso

1
falso AND verdadero es igual a falso
falso AND falso es igual a falso

verdadero OR verdadero es igual a verdadero


verdadero OR falso es igual a verdadero
falso OR verdadero es igual a verdadero
falso OR falso es igual a falso

• Asi 2 = 2 OR 3 = 2 es verdadero y 2 = 2 AND 2 = 3 es falso.

• El operador NOT es el operador de negación y tiene precedencia


sobre los demás. Por ejemplo, lo siguiente es falso

2 = 2 AND NOT 2 = 2

• AND tiene precedencia sobre OR.

• ABAP procesa las expresiones lógicas de izquierda a derecha.

• Si detecta que una expresión es falsa (o verdadera) ya no sigue


evaluando más. Así en las siguientes expresiónes sólo evalúa la
primera ya que siendo la primera expresión falsa es imposible que
el conjunto sea verdadero (y al contrario).

2 EQ 3 AND 2 EQ 2
2 < 3 OR 2 = 3

COMPARANDO CARACTERES:

• Los caracteres se comparan según su precedencia alfabética, así 'a'


< 'b' es cierto.

2
• El primer carácter que sea distinto en dos cadenas determina cuál
es mayor, así lo siguiente es cierto: 'abc' < 'abd'.

• Si comparamos fechas la fecha posterior es mayor, así lo siguiente


es cierto

'20100101' > '20090101'

• Si comparamos horas la hora posterior es la mayor, así lo siguiente


es cierto

'200000' > '190000'

• Si comparamos variables con distinta longitud la longitud del


menor se iguala a la del mayor, así lo siguiente es cierto

'abc ' = 'abc'

• Si comparamos una variable de tipo carácter con una variable


numérica, la primera se convierte en la segunda. Así lo siguiente es
cierto

'123' = 123.

• Dos punteros son iguales si apuntan al mismo objeto. Si apuntan a


dos objetos distintos NO son iguales, aunque el contenido de los
objetos sí sea igual.

• Dos estructuras son iguales si todos sun componentes son iguales.


Si no son iguales, el primer componente que difiera determina qué
estructura es la mayor de las dos.

• Al comparar tablas internas el primer criterio es el número de


líneas. La tabla con mayor número de líneas es la mayor de las
dos.

3
• Si dos tablas tienen el mismo número de líneas se comparan los
componentes.

• Si hay tablas anidadas se comparan los componentes de forma


recursiva. La comparación termina en el momento que que dos
componentes difieren. Ese componente es el que determina qué
tabla es la mayor de las dos.

• La instrucción IS sirve para comprobar si algo es cierto o no, por


ejemplo

IF <f> IS ASSIGNED,
WRITE 'El field symbol ha sido asignado',
ENDIF.

• La instrucción BETWEEN sirve para comparar si un valor está entre


un rango, por ejemplo

DATA x TYPE i VALUE 2.


IF x BETWEEN 0 AND 3,
WRITE 'x vale entre 0 y 5',
ENDIF.

TABLAS DE SELECCIÓN (Selection tables):

• Una selection table es una tabla interna que contiene en cada línea
una expresión lógica individual.

• Para crear una selection table llamada s para el campo f usamos la


siguiente expresión

SELECT-OPTIONS s FOR f.

• o bien usando la instucción RANGE OF, por ejemplo

DATA s LIKE RANGE OF f.

4
• Para comprobar si un valor está dentro de una tabla de selección
(selection table) usamos la instrucción IN. Por ejemplo,

IF f IN s ....