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.