Suas próprias funções
Quando você repete uma fórmula com valores diferentes, transforme-a em uma função. Defina uma vez o nome da fórmula e seus parâmetros, depois chame-a onde precisar: para calcular gorjetas, conferir o IMC, projetar investimentos ou montar uma fatura.
Esta página cobre funções de definição e chamada, como elas usam os outros nomes em sua nota, condições e recursão e os limites que se aplicam. Para as funções que vêm com Varlig, como sqrt e round, consulte a referência de função interna.
Definindo e chamando uma função
Escreva o nome da função, seus parâmetros entre parênteses, um sinal de igual e a fórmula. Em seguida, chame-o com valores na mesma ordem:
tip(bill, pct) = bill * pcttip($48, 15%) resulta em $7.20tip($120, 12.5%) resulta em $15.00tip($36 + $12, 15%) resulta em $7.20A linha de definição não mostra resposta. Cada chamada coloca seus valores no lugar de bill e pct e trabalha a fórmula. Um argumento pode ser um cálculo completo, como $36 + $12 acima.
Os argumentos são valores completos, não apenas números; unidades e moedas são preservadas ao longo da fórmula:
bmi(weight, height) = weight / height^2bmi(81 kg, 1.8 m) resulta em 25 kg/m²As unidades são mantidas como você as dá, então bmi(81 kg, 180 cm) responde em kg/cm². Para obter a mesma unidade, o que quer que você passe, converta dentro da função:
bmi(weight, height) = (weight / height^2) in kg/m^2bmi(81 kg, 180 cm) resulta em 25 kg/m²bmi(80 kg, 5.9 ft) resulta em 24.7375131668 kg/m²Uma função também pode não ter parâmetros. Escreva parênteses vazios ao defini-lo e ao chamá-lo:
standard_vat() = 20%£120 * standard_vat() resulta em £24.00Uma variável simples, como standard_vat = 20%, geralmente faz o mesmo trabalho com menos digitação.
Nomes e parâmetros
- Nomes de funções e parâmetros são palavras únicas. Use letras, dígitos e sublinhados, como
net_payoubmi2sem espaços. Se você escreverarea of circle(r) = pi * r^2a linha sugere o nome a ser usado em vez disso:area_of_circle. - Nomes de funções não diferenciam maiúsculas de minúsculas: após definir
Tip(bill, pct), você pode chamartip($48, 15%). - Cada parâmetro precisa de seu próprio nome.
f(a, a) = aé um erro. - Uma função pode ter até 32 parâmetros.
- Não é possível reutilizar o nome de uma função integrada.
round(x) = …ousqrt(x) = …produz erro em vez de substituí-la. Uma variável simples ainda pode usar esses nomes, como emfloor = 12 m²; veja Nomes. - Os nomes comuns em planilhas
avg,totalestdevestão disponíveis para funções próprias. Se você definirtotal(order), será a sua versão que será executada. - Uma função e uma variável podem compartilhar um nome.
ratelê a variável erate(5)chama a função. - Sempre chame uma função com parênteses. Um nome de função sozinho, sem uma variável de mesmo nome, não mostra resultado. As exceções são
sum,total,subtotal,grand total,average,maxemin, que calculam o valor correspondente para as linhas acima; veja Somar as linhas anteriores.
Vírgulas nos argumentos
Uma vírgula seguida por um espaço separa os argumentos, e uma vírgula seguida por exatamente três dígitos agrupa milhares, para que você possa escrever valores da maneira que normalmente faria:
tip(bill, pct) = bill * pcttip($1,200, 15%) resulta em $180.00tip($1200,15%) resulta em $180.00Quando a função precisa de mais valores do que os separados por vírgula e espaço, todas as vírgulas passam a separar argumentos, como na segunda chamada. Use ponto como separador decimal, como em tip($48, 12.5%).
Usando outros nomes em sua nota
Uma função pode usar variáveis da sua nota. Ele lê seu valor atual toda vez que você o chama:
vat = 20%with_vat(price) = price * (1 + vat)with_vat(£50) resulta em £60.00vat = 5%with_vat(£50) resulta em £52.50A variável já deve existir quando você definir a função, então coloque vat = 20% acima de with_vat. Se ainda não existir, a linha de definição mostra um erro.
Os parâmetros são locais para a função. Um parâmetro chamado price não lê ou altera uma variável chamada price em outra parte da nota:
price = £10double(price) = price * 2double(£3) resulta em £6.00price resulta em £10.00Assim como as variáveis, uma função definida em um bloco de cálculo pode ser usada em blocos de cálculo posteriores na mesma nota. Varlig trabalha através da nota de cima para baixo, então defina uma função acima da primeira linha que a chama. Uma chamada acima da definição não mostra resposta.
Funções que chamam outras funções
Pequenas funções podem se basear umas nas outras:
day_rate = £400fee(days) = days * day_rateinvoice(days) = fee(days) * 1.2invoice(5) resulta em £2,400.00Uma função lembra a versão de um auxiliar que existia quando você a definiu. Se você definir o mesmo auxiliar novamente mais abaixo, as funções definidas anteriormente continuarão usando a versão antiga:
shipping(order) = £4.95total(order) = order + shipping(order)shipping(order) = £2.95total(£30) resulta em £34.95shipping(£30) resulta em £2.95Para pegar o novo shipping, defina total novamente abaixo dele. Editar uma definição no lugar não causa isso. Varlig recalcula a nota do topo, então tudo abaixo usa sua versão editada.
Uma função também pode chamar uma função auxiliar definida mais abaixo. Nesse caso, usa a versão da auxiliar disponível no momento da chamada; portanto, a auxiliar precisa existir quando você chamar a função externa:
checkout(order) = order + delivery(order)delivery(order) = if order >= £40 then £0 else £3.50checkout(£25) resulta em £28.50checkout(£60) resulta em £60.00Condições
Use if … then … else … para escolher entre os resultados. Encadear outro if depois de else para mais de dois casos:
postage(weight) = if weight <= 100 g then £0.85 else if weight <= 750 g then £1.55 else £3.20postage(90 g) resulta em £0.85postage(500 g) resulta em £1.55postage(1.2 kg) resulta em £3.20Apenas o ramo que se aplica é trabalhado. Isso permite que você se proteja contra um cálculo que, de outra forma, falharia, como dividir por zero:
per_person(total, people) = if people > 0 then total / people else £0per_person(£90, 3) resulta em £30.00per_person(£90, 0) resulta em £0.00Recursão
Uma função pode se chamar, desde que uma condição eventualmente a pare. Este conta os apertos de mão quando todos em um grupo apertam as mãos uma vez:
handshakes(people) = if people <= 1 then 0 else (people - 1) + handshakes(people - 1)handshakes(6) resulta em 15handshakes(10) resulta em 45Cada chamada fica um nível mais profunda e, no máximo, 12 chamadas aninhadas são permitidas. handshakes(12) ainda funciona, mas handshakes(13) mostra Error: calculation limit. Uma função que nunca atinge seu caso de parada é aceita quando você a define e atinge o mesmo limite quando você a chama. Duas funções também podem se chamar, dentro do mesmo limite.
Para a contagem diária, as funções internas são mais rápidas e não têm esse limite. combination(10, 2) também dá 45, e factorial(n) ou n!, cobre o exemplo recursivo clássico.
Listas, matrizes e mais
Argumentos podem ser listas, matrizes ou números complexos, e um corpo pode usar qualquer função interna:
spread(scores) = max(scores) - min(scores)spread([12, 18, 9, 21]) resulta em 12O corpo da função também pode conter um somatório ou uma função de resolução de equações com sua própria variável local. Veja Listas e estatísticas e Somatórios, resolução de equações e cálculo.
Armadilhas
- Escreva potências com
^.x²não é aceito dentro de uma função. Além disso, um parâmetro curto pode coincidir com uma unidade: emw / h²,h²significa horas ao quadrado, não o parâmetroh. Escrevaw / h^2. - Confira a quantidade de argumentos. Chamar
tip($48)quando a função espera dois valores produz erro. - Um preço sem unidade explícita pode ser interpretado como preço por unidade. Em
oats(amount) = amount / 1 kg * £0.95, £0.95 é um preço por quilograma. Cada chamada avisa isso; passe o ponteiro sobre ela para ver: "£0.95 em oats foi tratado como preço por kg. Escreva £0.95/kg para tornar isso explícito." Informar a unidade do preço na definição remove esse aviso. - Uma linha, uma fórmula. Uma definição é uma única expressão em uma linha. Para um cálculo com várias etapas, defina uma pequena função para cada etapa e combine-as.
- Uma redefinição com erro preserva a versão anterior. Se a nova definição de
tiptiver um erro, a linha o informa e a versão anterior válida detipcontinua disponível. - Os resultados podem mudar quando a nota é recalculada. Cada chamada é calculada novamente. Por isso, uma função que usa
randomou a data de hoje pode retornar outro resultado. - Erros chegam. Se um argumento faz com que a fórmula falhe, como dividir por zero, a chamada mostra esse erro.
Limites
| O que | Limite |
|---|---|
| Parâmetros por função | 32 |
| Chamadas aninhadas (uma função chamando a si mesma ou outra) | 12 |
| Chamadas realizadas durante a avaliação de uma chamada de nível superior | 16,384 |
| Funções definidas em uma nota | 1,024 |
Atingir um limite mostra Error: calculation limit. O resto da nota continua funcionando. Consulte Erros, diagnósticos e limites para cada limite.
Combinando os recursos
Aqui está uma fatura freelance. A taxa e o IVA estão no topo como valores nomeados, e três pequenas funções fazem o trabalho:
# March invoiceday_rate = £450vat = 20%fee(days) = days * day_ratewith_vat(amount) = amount * (1 + vat)late_fee(amount, days_late) = if days_late > 30 then amount * 2% else £0design = fee(8) resulta em £3,600.00build = fee(4.5) resulta em £2,025.00subtotal = design + build resulta em £5,625.00with_vat(subtotal) resulta em £6,750.00late_fee(with_vat(subtotal), 45) resulta em £135.00Altere day_rate ou vat para atualizar todas as linhas abaixo. Se o cliente pagar com atraso, uma chamada de função acrescenta a taxa.