Tus propias funciones
Si escribes la misma fórmula una y otra vez con números distintos, conviértela en una función. Pones nombre a la fórmula y a sus datos de entrada una sola vez, y luego la llamas donde necesites un resultado: una calculadora de propinas, un cálculo del IMC, una previsión de ahorro o una factura.
Esta página explica cómo definir y llamar funciones, cómo usan los demás nombres de tu nota, las
condiciones y la recursividad, y los límites que se aplican. Para las funciones que incluye Varlig,
como sqrt y round, consulta la Referencia de funciones integradas.
Definir y llamar una función
Escribe el nombre de la función, sus parámetros entre paréntesis, un signo igual y la fórmula. Después, llámala con los valores en el mismo orden:
propina(cuenta, porcentaje) = cuenta * porcentajepropina($48, 15%) da $7.20propina($120, 12.5%) da $15.00propina($36 + $12, 15%) da $7.20La línea de la definición no muestra ningún resultado. Cada llamada pone tus valores en lugar de
cuenta y porcentaje y calcula la fórmula. Un argumento puede ser un cálculo completo, como
$36 + $12 arriba.
Los argumentos son valores completos, no solo números, así que las unidades y las divisas se mantienen a lo largo de la fórmula:
imc(peso, altura) = peso / altura^2imc(81 kg, 1.8 m) da 25 kg/m²Las unidades se conservan tal como las indicas, así que imc(81 kg, 180 cm) responde en kg/cm². Para
obtener siempre la misma unidad, pases lo que pases, convierte dentro de la función:
imc(peso, altura) = (peso / altura^2) in kg/m^2imc(81 kg, 180 cm) da 25 kg/m²imc(80 kg, 5.9 ft) da 24.7375131668 kg/m²Una función también puede no tener parámetros. Escribe paréntesis vacíos tanto al definirla como al llamarla:
iva_general() = 21%120 € * iva_general() da €25.20Una variable normal, como iva_general = 21%, suele hacer lo mismo con menos texto.
Nombres y parámetros
- Los nombres de funciones y parámetros son una sola palabra. Usa letras, cifras y guiones bajos,
como
sueldo_netooimc2, sin espacios. Si escribesárea del círculo(r) = pi * r^2, la línea te sugiere el nombre que debes usar:área_del_círculo. - Los nombres de funciones no distinguen mayúsculas y minúsculas: después de definir
Propina(cuenta, porcentaje), puedes llamar apropina($48, 15%). - Cada parámetro necesita su propio nombre.
f(a, a) = ada un error. - Una función puede tener hasta 32 parámetros.
- No puedes reutilizar el nombre de una función integrada.
round(x) = …osqrt(x) = …muestra un error en lugar de sustituirla. Una variable normal sí puede usar uno de esos nombres, comofloor = 12 m²; consulta Nombres. - Puedes usar libremente como nombres las formas de las hojas de cálculo
avg,totalystdev. Si defines tu propiatotal(pedido), se ejecuta tu versión. - Una función y una variable pueden compartir nombre.
tasalee la variable ytasa(5)llama a la función. - Llama siempre a una función con paréntesis. El nombre de una función sin más, si no hay ninguna variable con ese nombre, muestra un error.
Comas en los argumentos
Una coma seguida de un espacio separa los argumentos, y una coma seguida de exactamente tres dígitos agrupa los miles, así que puedes escribir los importes como lo harías normalmente:
propina(cuenta, porcentaje) = cuenta * porcentajepropina($1,200, 15%) da $180.00propina($1200,15%) da $180.00Cuando una función necesita más valores de los que marcan los espacios, cada coma separa, como en la
segunda llamada. Usa el punto decimal para las fracciones, como en propina($48, 12.5%).
Usar otros nombres de la nota
Una función puede usar variables de tu nota. Lee su valor actual cada vez que la llamas:
iva = 21%con_iva(precio) = precio * (1 + iva)con_iva(50 €) da €60.50iva = 10%con_iva(50 €) da €55.00La variable tiene que existir ya cuando defines la función, así que pon iva = 21% encima de
con_iva. Si todavía no existe, la línea de la definición muestra un error.
Los parámetros son locales de la función. Un parámetro llamado precio no lee ni cambia una
variable llamada precio en otra parte de la nota:
precio = 10 €doble(precio) = precio * 2doble(3 €) da €6.00precio da €10.00Igual que las variables, una función definida en un bloque de cálculo se puede usar en los bloques de cálculo posteriores de la misma nota. Varlig recorre la nota de arriba abajo, así que define una función por encima de la primera línea que la llama. Una llamada situada encima de la definición no muestra ningún resultado.
Funciones que llaman a otras funciones
Las funciones pequeñas se pueden apoyar unas en otras:
tarifa_diaria = 400 €honorarios(días) = días * tarifa_diariafactura(días) = honorarios(días) * 1.21factura(5) da €2,420.00Una función recuerda la versión de una función auxiliar que existía cuando la definiste. Si vuelves a definir esa función auxiliar más abajo, las funciones definidas antes siguen usando la versión antigua:
envío(pedido) = 4.95 €total(pedido) = pedido + envío(pedido)envío(pedido) = 2.95 €total(30 €) da €34.95envío(30 €) da €2.95Para que use el nuevo envío, vuelve a definir total debajo. Esto no ocurre si editas una
definición en su sitio. Varlig vuelve a calcular la nota desde arriba, así que todo lo que hay debajo
usa tu versión editada.
Una función también puede llamar a una función auxiliar que defines más abajo. En ese caso usa lo que sea esa función auxiliar en el momento de la llamada, así que la función auxiliar tiene que existir cuando llames a la función exterior:
pagar(pedido) = pedido + entrega(pedido)entrega(pedido) = if pedido >= 40 € then 0 € else 3.50 €pagar(25 €) da €28.50pagar(60 €) da €60.00Condiciones
Usa if … then … else … para elegir entre resultados. Encadena otro if después de else para más
de dos casos:
franqueo(peso) = if peso <= 100 g then 0.85 € else if peso <= 750 g then 1.55 € else 3.20 €franqueo(90 g) da €0.85franqueo(500 g) da €1.55franqueo(1.2 kg) da €3.20Solo se calcula la rama que corresponde. Así puedes protegerte de un cálculo que de otro modo fallaría, como una división entre cero:
por_persona(total, personas) = if personas > 0 then total / personas else 0 €por_persona(90 €, 3) da €30.00por_persona(90 €, 0) da €0.00Recursividad
Una función puede llamarse a sí misma, siempre que una condición acabe deteniéndola. Esta cuenta los apretones de manos cuando todas las personas de un grupo se dan la mano una vez:
apretones(personas) = if personas <= 1 then 0 else (personas - 1) + apretones(personas - 1)apretones(6) da 15apretones(10) da 45Cada llamada anida un nivel más, y se permiten como máximo 16 llamadas anidadas. apretones(16)
todavía funciona, pero apretones(17) muestra Error: calculation limit. Una función que nunca
llega a su caso de parada se acepta al definirla, y alcanza el mismo límite al llamarla. Dos
funciones también pueden llamarse entre sí, dentro del mismo límite.
Para los recuentos cotidianos, las funciones integradas son más rápidas y no tienen ese límite.
combination(10, 2) también da 45, y factorial(n), o n!, resuelve el ejemplo recursivo
clásico.
Listas, matrices y más
Los argumentos pueden ser listas, matrices o números complejos, y el cuerpo de la función puede usar cualquier función integrada:
amplitud(notas) = max(notas) - min(notas)amplitud([12, 18, 9, 21]) da 12El cuerpo también puede contener un sumatorio o una resolución de ecuaciones con su propia variable local. Consulta Listas y estadística y Sumatorios, resolución de ecuaciones y cálculo.
Errores frecuentes
- Escribe las potencias con
^.x²no se acepta dentro de una función. Peor aún, un nombre de parámetro corto puede coincidir con una unidad: enw / h²,h²significa horas al cuadrado, no el parámetroh. Escribew / h^2. - Comprueba el número de argumentos. Llamar a
propina($48)cuando la función espera dos valores muestra un error. - Una línea, una fórmula. Una definición es una única expresión en una sola línea. Para un cálculo de varios pasos, define una función pequeña para cada paso y combínalas.
- Una redefinición errónea conserva la versión anterior. Si una nueva definición de
propinatiene un error, la línea muestra un error y lapropinaanterior que funcionaba sigue disponible. - Los resultados pueden cambiar al recalcular la nota. Las llamadas se calculan de nuevo cada
vez, así que una función que usa
randomo la fecha de hoy puede dar un resultado nuevo. - Los errores se transmiten. Si un argumento hace que la fórmula falle, por ejemplo al dividir entre cero, la llamada muestra ese error.
Límites
| Qué | Límite |
|---|---|
| Parámetros por función | 32 |
| Llamadas anidadas (una función que se llama a sí misma o a otra) | 16 |
| Llamadas realizadas al calcular una llamada de nivel superior | 16,384 |
| Funciones definidas en una nota | 1,024 |
Al alcanzar un límite se muestra Error: calculation limit. El resto de la nota sigue funcionando.
Consulta Errores, diagnósticos y límites para ver todos los
límites.
Todo junto
Esta es una factura de un trabajo freelance. La tarifa y el IVA están arriba como valores con nombre, y tres funciones pequeñas hacen el trabajo:
# Factura de marzotarifa_diaria = 450 €iva = 21%honorarios(días) = días * tarifa_diariacon_iva(importe) = importe * (1 + iva)recargo(importe, días_retraso) = if días_retraso > 30 then importe * 2% else 0 €diseño = honorarios(8) da €3,600.00desarrollo = honorarios(4.5) da €2,025.00subtotal = diseño + desarrollo da €5,625.00con_iva(subtotal) da €6,806.25recargo(con_iva(subtotal), 45) da €136.13Cambia tarifa_diaria o iva y todas las líneas de abajo se actualizan. Cuando el cliente paga
tarde, una sola llamada añade el recargo.