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 <> o NE < o LT <= o LT > o GT >= o GE

igual que distinto a menor que menor o igual que mayor que 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 verdadero AND falso es igual a es igual a verdadero falso

1

falso falso

AND verdadero AND falso

es igual a es igual a

falso falso

verdadero verdadero falso falso

OR verdadero OR falso OR verdadero OR falso

es igual a es igual a es igual a es igual a

verdadero verdadero verdadero 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 ....

5