Toma de decisiones en los scripts
Todo lo que hacemos tiene que ver con la toma de decisiones y la creación de scripts no es la excepción. A veces, solo queremos que se ejecute un comando si alguna otra condición es verdadera o solo queremos procesar algunos registros de una tabla, según los datos que contienen. ACLScript ofrece varios métodos para tomar decisiones en los scripts y todos ellos utilizan expresiones condicionales.
¿Qué es una expresión condicional?
Una expresión condicional es una expresión que se evalúa como verdadera o falsa. Las expresiones condicionales indican qué medidas se toman en un script y son especificadas por quien escribe el script.
Esta es una definición bastante técnica, pero veremos lo que significa con un ejemplo sencillo de la vida real:
Ejemplo
Usted está caminando por la calle y ve a alguien a quien conoce. Es amable saludar a esta persona, pero ¿debe decirle "Buenos días" o "Buenas tardes" cuando la ve?
La respuesta depende de una condición sencilla: ¿ya han pasado las 12 del mediodía? Si la respuesta es sí, le dirá "Buenas tardes", de lo contrario, le dirá "Buenos días".
En este ejemplo, la expresión condicional determina la acción (qué saludo usar) según su valor de verdadero (sí) o falso (no).
La expresión del ejemplo anterior se podría traducir de la siguiente manera en ACLScript:
COMMENT comprueba si la hora actual es 12:00 p. m. o más tarde
NOW() >= `t120000`
Puede ejecutar este ejemplo copiando la siguiente línea y pegándola en la línea de comandos de Analytics. Según la hora del día en que lo haga, la expresión se evaluará como verdadera o falsa:
DISPLAY NOW() >= `t120000`
Consejo
Si la línea de comandos no está visible, seleccione Ventana > Línea de comandos.
Una vez que ejecute el ejemplo, puede intentar cambiar el valor de hora literal de 12:00 PM en la expresión, para que evalúe lo opuesto.
Decidir si se debe ejecutar un comando
Analytics ofrece el comando IF para que pueda decidir si ejecutar o no un comando. El comando requiere dos entradas:
- una expresión condicional
- un comando que se debe ejecutar si la expresión es verdadera
Si la expresión condicional se evalúa como falsa, el comando no se ejecuta.
Decir "Buenas tardes"
Si continuamos con el ejemplo anterior, intente pegar el siguiente código en la línea de comandos:
IF NOW() >= `t120000` DISPLAY "Buenas tardes"
Si ya pasaron las 12 del mediodía, entonces el comando DISPLAY imprime "Buenas tardes" en la ficha de salida. Pero si aún es la mañana, no se imprime nada. El script no ejecuta el comando DISPLAY.
Decir "Buenos días"
Si su expresión se evaluó como falsa, es posible que se esté preguntando cómo hacer que el comando imprima "Buenos días". Si bien algunos lenguajes de creación de scripts ofrecen un constructo "de lo contrario" para manejar tanto los casos verdaderos como falsos, ACLScript no lo hace. Por el contrario, debe utilizar un segundo comando IF con la expresión opuesta.
Pruebe pegar esta expresión en la línea de comandos:
IF NOW() < `t120000` DISPLAY "Buenos días"
Este ejemplo funciona como antes, salvo que ahora es antes de las 12 del mediodía y entonces el comando DISPLAY Imprime "Buenos días".
¿Cómo se ve esto en un script?
Hasta ahora, los ejemplos se limitaron al comando DISPLAY, que solo está disponible desde la línea de comandos. Pero en un script, se aplican los mismos principios. En lugar de imprimir un saludo en la ficha pantalla, en este ejemplo, el script almacena el saludo en una variable denominada v_saludo:
COMMENT almacena el saludo adecuado según la hora del día
IF NOW() >= `t120000` ASSIGN v_greeting = "Buenas tardes"
IF NOW() < `t120000` ASSIGN v_greeting = "Buen día"
Si este script se ejecuta antes de las 12 del mediodía, entonces el valor que se almacena en la variable es "Buenos días" y si se ejecuta a las 12 del mediodía o más tarde, el valor que se almacena en la variable es "Buenas tardes". Pruebe pegar esto en su editor de scripts y ejecutarlo. Puede comprobar el valor de la variable en la ficha Variables después de ejecutarlo.
Decidir qué registros procesar
En algunos casos, usted desea decidir si un script ejecuta un comando o no, tal como se mostró más atrás, pero también hay casos en los que desea que un comando se ejecute solo en determinados registros de una tabla. Este es otro caso en el que se debe tomar una decisión, pero es diferente del caso en el que se utiliza el comando IF.
En las situaciones en las que desee procesar registros de forma selectiva, ACLScript ofrece el parámetro IF en muchos comandos. Cuando se utiliza este enfoque, el comando requiere que usted especifique una expresión condicional como entrada. La expresión se prueba contra cada registro de la tabla y cuando se evalúa como verdadera, se procesa el registro:
COMMENT suma el campo Importe para los registros que tienen una Cantidad superior a 5
TOTAL Importe IF Cantidad > 5
Cálculo de las transacciones que ocurren por la tarde
Puede utilizar la misma expresión condicional NOW( ) >= `t120000` para calcular la suma de todas las transacciones de una tabla que ocurrieron por la tarde. Considere la siguiente tabla de datos de transacciones:
| Importe_transacción | Costo_unitario | Núm_producto | Fecha_transacción | Cantidad |
|---|---|---|---|---|
| 618.3 | 6,87 | 070104397 | 2000-11-17 12:00 | 90 |
| 6705,12 | 6,87 | 070104677 | 2000-11-17 9:30 | 976 |
| 7955,46 | 6,87 | 070104657 | 2000-11-17 14:45 | 1158 |
| 4870.83 | 6,87 | 070104327 | 2000-11-17 15:00 | 709 |
| 10531.71 | 6,87 | 070104377 | 2000-11-17 9:57 | 1533 |
| 5734 | 47 | 030414313 | 2000-10-30 1:00 | 122 |
| 2196 | 18 | 030414283 | 2000-10-30 18:25 | 122 |
Para calcular la suma del campo Importe_transacción, utilice el comando TOTAL:
COMMENT Suma el campo Importe_transacción
TOTAL Importe_transacción
Este comando procesa cada registro de la tabla y calcula un total de 38,611.42, que es la suma de todas las transacciones.
Para agregar alguna toma de decisiones al comando y procesar solo aquellas transacciones que ocurrieron a las 12:00 PM o más tarde, agregue el parámetro IF a TOTAL. Utiliza la misma expresión condicional del ejemplo inicial, pero reemplaza NOW( ) por la parte de la hora de la fecha de la transacción:
COMMENT Suma el campo Importe_transacción para todas las transacciones que ocurrieron durante la tarde
COMMENT utiliza las funciones para extraer la parte de la hora de los datos del campo Fecha_transacción
TOTAL Importe_transacción IF CTOT(TIME(Fecha_transacción)) >= `t120000`
En el comando, usted debe usar algunas funciones para aislar la parte de las horas de la fecha de transacción, pero una vez que lo haga, la decisión es la misma expresión condicional del ejemplo inicial: ¿son las 12 del mediodía o más tarde? Si la respuesta es sí, entonces el importe se incluye en la suma.
Este comando calcula un total de 15,640.59, que es la suma de todas las transacciones de la tarde en la tabla.