Tomando decisões em scripts
Tudo o que fazemos envolve a tomada de decisões, e com os scripts não é diferente. Às vezes, você somente quer que um comando seja executado se alguma outra condição for verdadeira, ou você pode querer processar apenas alguns registros em uma tabela, dependendo dos dados contidos nela. O ACLScript fornece vários métodos para a tomada de decisões nos scripts, e todos eles usam expressões condicionais.
O que é uma expressão condicional?
Uma expressão condicional é qualquer expressão avaliada como verdadeira ou falsa. As expressões condicionais ditam quais ações são tomadas em um script e são especificadas pelo autor do script.
Essa é uma definição razoavelmente técnica, mas um simples exemplo real pode ajudar a demonstrar o que ela significa:
Exemplo
Você está andando pela rua e vê alguém que conhece. É educado saudar essa pessoa, mas você diz "Bom dia" ou diz "Boa tarde" quando vocês se encontram?
A resposta depende de uma simples condição: é meio-dia ou mais tarde? Se a resposta for sim, então você diz "Boa tarde". Caso contrário, você diz "Bom dia".
Nesse exemplo, a expressão condicional determina a ação que você executa (qual saudação usar) com base em se ela é avaliada ou não como verdadeira (sim).
A expressão do exemplo anterior poderia ser traduzida no ACLScript como a seguir:
COMMENT verifica se a hora atual é 12:00 PM ou mais tarde
NOW() >= `t120000`
Você pode executar esse exemplo copiando a linha a seguir e, em seguida, colando-a na linha de comando do Analytics. Dependendo da hora e do dia em que fizer isso, a expressão será avaliada como verdadeira ou falsa:
DISPLAY NOW() >= `t120000`
Dica
Se a caixa de texto Linha de comando não estiver visível, selecione Janela > Linha de comando.
Após executar o exemplo, você poderá tentar alterar o valor da hora literal de 12:00 PM na expressão para que ela seja avaliada para o oposto.
Decidindo se um comando deve ser executado
O Analytics fornece o comando IF para que você possa se decidir se um comando deve ser executado ou não. O comando requer duas entradas:
- uma expressão condicional
- um comando a executar se a expressão for verdadeira
Se a expressão condicional for avaliada como falsa, o comando não será executado.
Dizendo "Boa tarde"
Continuando com o exemplo acima, tente colar o seguinte código na linha de comando:
IF NOW() >= `t120000` DISPLAY "Boa tarde"
Se a hora for após 12:00 PM, o comando DISPLAY exibirá "Boa tarde" na guia da saída. Mas, se ainda for de manhã onde você está, nada será exibido. O script não executará o comando DISPLAY.
Dizendo "Bom dia"
Se sua expressão foi avaliada como falsa, você pode estar pensando como fazer o comando exibir "Bom dia". Enquanto algumas linguagens de scripts fornecem uma construção "else" para lidar tanto com casos de verdadeiro como de falso, o ACLScript não faz isso. Em vez disso, você usa um segundo comando IF com a expressão oposta.
Tente colar a expressão a seguir na linha de comando:
IF NOW() < `t120000` DISPLAY "Bom dia"
Esse exemplo funciona como antes, exceto que agora se a hora for anterior a 12:00 PM, o comando DISPLAY exibirá "Bom dia".
Qual é a aparência disso em um script?
Até agora, os exemplos se limitaram ao comando DISPLAY, que somente está disponível a partir da linha de comando. Mas, em um script, os mesmos princípios se aplicam. Em vez de exibir a saudação na guia de exibição, nesse exemplo, o script armazena a saudação em uma variável chamada v_greeting:
COMMENT armazena a saudação correta dependendo da hora do dia
IF NOW() >= `t120000` ASSIGN v_cumprimento = "Boa tarde"
IF NOW() < `t120000` ASSIGN v_cumprimento = "Bom dia"
Se esse script for executado antes das 12:00 PM, o valor armazenado na variável será "Bom dia" e, se ele for executado às 12:00 PM ou mais tarde, o valor armazenado na variável será "Boa tarde". Tente colar isso no seu editor de script e executá-lo. Você pode verificar o valor da variável na guia Variáveis após a execução.
Decidindo quais registros processar
Há momentos em que você quer decidir se o script executará um comando ou não, como mostrado acima, mas também há momentos em que você quer que um comando seja executado somente em certos registros de uma tabela. Esse é outro cenário de tomada de decisões, mas ele difere daquele que usa o comando IF.
Em situações nas quais você quer processar registros de modo seletivo, o ACLScript fornece o parâmetro IF em vários comandos. Quando você usa essa abordagem, o comando requer que você especifique uma expressão condicional como entrada. A expressão é testada em relação a cada registro da tabela e, quando é avaliada como verdadeira, o registro é processado:
COMMENT soma o campo Valor para registros com uma Quantidade maior que 5
TOTAL Valor IF Quantidade > 5
Calculando transações ocorridas à tarde
Você pode usar a mesma expressão condicional NOW( ) >= `t120000` para calcular em uma tabela a soma de todas as transações ocorridas à tarde. Considere a seguinte tabela de dados de transações:
| Montante_da_Transação | Custo_Unidade | Número_Produto | Data_Transação | Quantidade |
|---|---|---|---|---|
| 618,3 | 6,87 | 070104397 | 17-11-2000 12:00 | 90 |
| 6705,12 | 6,87 | 070104677 | 17-11-2000 9:30 | 976 |
| 7955,46 | 6,87 | 070104657 | 17-11-2000 14:45 | 1158 |
| 4870,83 | 6,87 | 070104327 | 17-11-2000 15:00 | 709 |
| 10531,71 | 6,87 | 070104377 | 17-11-2000 9:57 | 1533 |
| 5734 | 47 | 030414313 | 30-10-2000 1:00 | 122 |
| 2196 | 18 | 030414283 | 30-10-2000 18:25 | 122 |
Para calcular a soma do campo Montante_da_Transação, você usa o comando TOTAL:
COMMENT Soma o campo Montante_da_Transação
TOTAL Montante_da_Transação
Esse comando processa todos os registros da tabela e calcula um total de 38.611,42, que é a soma de todas as transações.
Para adicionar um pouco de tomada de decisão ao comando e processar somente as transações ocorridas às 12:00 PM ou mais tarde, você adiciona o parâmetro IF a TOTAL. Você usa a mesma expressão condicional do exemplo no início, mas substitui NOW( ) pela parte da hora da data da transação:
COMMENT Soma o campo Montante_da_Transação para todas as transações ocorridas à tarde
COMMENT usa funções para extrair a parte da hora dos dados no campo Data_Transação
TOTAL Montante_da_Transação IF CTOT(TIME(Data_Transação)) >= `t120000`
No comando, você precisa usar algumas funções para isolar a parte da hora da data da transação, mas, após fazer isso, a decisão é a mesma expressão condicional do exemplo no início: é 12:00 PM ou mais tarde? Se a resposta for sim, o montante será incluído na soma.
Esse comando calcula um total de 15.640,59, que é a soma de todas as transações da tarde na tabela.