Pular para o conteúdo principal

Expressões

Expressão é uma linguagem de expressões que consiste nas funções fornecidas pelo Excel com alguns acréscimos.

Assim como as funções, as expressões podem ser usadas diretamente nos cards.

Sintaxe das expressões

As expressões podem ser referenciadas diretamente no código, mas precisam ser prefixadas com @ quando usadas dentro de strings. Quando usadas dentro de strings, também é possível definir um bloco de expressão @(), dentro do qual as expressões podem ser usadas sem o prefixo @.

Os nomes de funções e variáveis não diferenciam maiúsculas de minúsculas, portanto UPPER é equivalente a upper.

O exemplo a seguir mostra três maneiras diferentes de usar expressões para concatenar strings:

card First, then: Second do
a = "pizza"
b = "cheese"

# Referencia as expressões diretamente
result = concatenate(a, " with ", b)

# Envia "Tonight we have pizza with cheese"
text("Tonight we have @result")
end

card Second, then: Third do
a = "pizza"
b = "cheese"

# Referencia as expressões em um bloco @() dentro de uma string
# Envia "Tonight we have pizza with cheese"
text("Tonight we have @(concatenate(a, \" with \", b))")
end

card Third do
a = "pizza"
b = "cheese"

# Referencia as expressões dentro de uma string
# Envia "Tonight we have pizza with cheese"
text("Tonight we have @a with @b")
end

Respostas dinâmicas

Aqui está um exemplo que usa uma expressão para responder com o nome do contato em forma capitalizada:

card Card do
text("Hello @PROPER(contact.name)")
end

Aqui está um exemplo de Quiz de Matemática que usa expressões para gerar números aleatórios e verificar a resposta.

card Calculator, "try again!", then: Answer do
calculator_number_1 = rand_between(1, 10)
calculator_number_2 = rand_between(1, 10)

ask("What is @calculator_number_1 * @calculator_number_2 ?")
end

card Answer when calculator == calculator_number_1 * calculator_number_2, then: Calculator do
buttons([Calculator]) do
text("That is correct!")
end
end

card Answer, then: Calculator do
buttons([Calculator]) do
text("""
@calculator is incorrect, the correct answer is:
@(calculator_number_1 * calculator_number_2)
""")
end
end

Botões dinâmicos

Voltando ao nosso exemplo de mensagem com botões. Suponha que o conjunto de opções para os botões não seja conhecido antecipadamente; é possível gerar as opções dinamicamente usando expressões conforme este exemplo.

Você notará que o resultado final é o mesmo do exemplo anterior, mas estamos percorrendo uma lista chamada options, que tem o valor ["one", "two", "three"].

O operador & neste exemplo indica uma função anônima e &1 é o primeiro argumento fornecido à função anônima. Consulte a referência para mais detalhes.

card Card do
button_picked = buttons(ButtonPicked, map(options, &[&1, concatenate("Option ", &1)]))
text("pick an option!")
end

card ButtonPicked do
text("You selected @button_picked")
end

Referência

Há uma longa lista de Expressões disponíveis. Você pode encontrar todas aqui

A seguir estão algumas das expressões mais usadas.

abs()

Retorna o valor absoluto de um número.

card MyCard do
# Envia "The absolute value of -1 is 1"
text("The absolute value of -1 is @abs(-1)")
end

and()

Retorna true se e somente se todos os seus argumentos forem avaliados como true.

concatenate()

Une strings de texto em uma única string de texto.

card MyCard do
a = "Hi"
b = "and"
c = "welcome!"
text = concatenate(a, " ", b, " ", c)
# Envia "Hi and welcome!"
text("@text")
end

filter()

Filtra uma lista, isto é, retorna apenas os elementos para os quais a expressão fornecida retorna um valor verdadeiro (truthy).

A expressão deve ser precedida pelo caractere &, e o item atual da lista sendo avaliado pela expressão está disponível com o placeholder &1:

card MyCard do
items = ["apple ", "bank ", "app ", "office ", "appointment "]
# Envia "apple app appointment"
text("@filter(items, &has_beginning(&1, \"app\"))")
end

find()

Encontra o primeiro elemento da lista para o qual a expressão fornecida é verdadeira (truthy).

A expressão deve ser precedida pelo caractere &, e o item atual da lista sendo avaliado pela expressão está disponível com o placeholder &1:

card MyCard do
items = [["Hello", "World"], ["Hi", "World"]]
# O resultado é ["Hi", "World"]
result = find(items, & &1[0] == "Hi")
# Envia "Hi"
text("@result[0]")
end

first_word()

Retorna a primeira palavra de uma string

card MyCard do
input = "One Two Three Four"
# Envia "One"
text("@first_word(input)")
end

fixed()

Formata o número fornecido em formato decimal usando ponto e vírgulas.

card MyCard do
result = 4.209922
# Envia "The result is 4.21"
text("The result is @fixed(4.209922, 2)")
end

has_beginning()

card MyCard do
text = "The Quick Brown Fox"
start = "the quick"
# Envia "true"
text("@has_beginning(text, start)")
end

isbool()

Retorna true se o argumento for um booleano.

card MyCard do
a = "a"
# Envia "false"
text("@isbool(a)")
end

isnumber()

Retorna true se o argumento for um número.

card MyCard do
a = 32
# Envia "true"
text("@isnumber(a)")
end

isstring()

Retorna true se o argumento for uma string.

card MyCard do
a = "Hey!"
# Envia "true"
text("@isstring(a)")
end

left()

Retorna os primeiros caracteres de uma string de texto. É seguro para Unicode.

card MyCard do
text = "The quick brown fox"
# Envia "The q"
text("@left(text, 5)")
end

lower()

Converte uma string de texto para minúsculas.

card MyCard do
text = "HELLO!"
# Envia "hello!"
text("@lower(text)")
end

map()

Retorna uma lista onde cada elemento é o resultado da invocação da expressão fornecida em cada elemento correspondente da lista fornecida.

A expressão deve ser precedida pelo caractere &, e o item atual da lista sendo avaliado pela expressão está disponível com o placeholder &1:

card MyCard do
items = ["a", "b", "c"]
# Envia "ABC"
text("@map(items, &upper(&1))")
end

reduce()

Reduz elementos de uma lista aplicando uma função e coletando os resultados em um acumulador.

A expressão deve ser precedida pelo caractere &. O item atual da lista sendo avaliado pela expressão está disponível com o placeholder &1 e o acumulador está disponível com o placeholder &2:

card MyCard do
# Envia 6
text("@reduce(1..3, 0, & &1 + &2)")
end

reject()

Rejeita itens de uma lista, isto é, retorna apenas os elementos para os quais a expressão fornecida retorna um valor falso.

A expressão deve ser precedida pelo caractere &, e o item atual da lista sendo avaliado pela expressão está disponível com o placeholder &1:

card MyCard do
items = ["apple ", "bank ", "app ", "office ", "appointment "]
# Envia "bank office"
text("@reject(items, &has_beginning(&1, \"app\"))")
end

uniq()

Remove valores duplicados de uma lista.

card MyCard do
items = ["A", "B", "B", "C"]
# O resultado é ["A", "B", "C"]
result = uniq(items)
end

upper()

Converte uma string de texto em MAIÚSCULAS.

card MyCard do
text = "hello!"
# Envia "HELLO!"
text("@upper(text)")
end

with_index()

Envolve cada item da lista em uma nova lista com o item em si e seu índice na lista original.

card MyCard do
items = ["A", "B", "C"]
# O resultado é [["A", 0], ["B", 1], ["C", 1]]
result = with_index(items)
end