Saltar al contenido
Guía de Varlig
Inicio de Varlig

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:

calc
propina(cuenta, porcentaje) = cuenta * porcentaje
propina($48, 15%) da $7.20
propina($120, 12.5%) da $15.00
propina($36 + $12, 15%) da $7.20

La 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:

calc
imc(peso, altura) = peso / altura^2
imc(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:

calc
imc(peso, altura) = (peso / altura^2) in kg/m^2
imc(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:

calc
iva_general() = 21%
120 * iva_general() da €25.20

Una 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_neto o imc2, 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 a propina($48, 15%).
  • Cada parámetro necesita su propio nombre. f(a, a) = a da un error.
  • Una función puede tener hasta 32 parámetros.
  • No puedes reutilizar el nombre de una función integrada. round(x) = … o sqrt(x) = … muestra un error en lugar de sustituirla. Una variable normal sí puede usar uno de esos nombres, como floor = 12 m²; consulta Nombres.
  • Puedes usar libremente como nombres las formas de las hojas de cálculo avg, total y stdev. Si defines tu propia total(pedido), se ejecuta tu versión.
  • Una función y una variable pueden compartir nombre. tasa lee la variable y tasa(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:

calc
propina(cuenta, porcentaje) = cuenta * porcentaje
propina($1,200, 15%) da $180.00
propina($1200,15%) da $180.00

Cuando 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:

calc
iva = 21%
con_iva(precio) = precio * (1 + iva)
con_iva(50 ) da €60.50
iva = 10%
con_iva(50 ) da €55.00

La 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:

calc
precio = 10
doble(precio) = precio * 2
doble(3 ) da €6.00
precio da €10.00

Igual 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:

calc
tarifa_diaria = 400
honorarios(días) = días * tarifa_diaria
factura(días) = honorarios(días) * 1.21
factura(5) da €2,420.00

Una 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:

calc
envío(pedido) = 4.95
total(pedido) = pedido + envío(pedido)
envío(pedido) = 2.95
total(30 ) da €34.95
envío(30 ) da €2.95

Para 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:

calc
pagar(pedido) = pedido + entrega(pedido)
entrega(pedido) = if pedido >= 40 then 0 else 3.50
pagar(25 ) da €28.50
pagar(60 ) da €60.00

Condiciones

Usa if … then … else … para elegir entre resultados. Encadena otro if después de else para más de dos casos:

calc
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.85
franqueo(500 g) da €1.55
franqueo(1.2 kg) da €3.20

Solo 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:

calc
por_persona(total, personas) = if personas > 0 then total / personas else 0
por_persona(90 , 3) da €30.00
por_persona(90 , 0) da €0.00

Recursividad

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:

calc
apretones(personas) = if personas <= 1 then 0 else (personas - 1) + apretones(personas - 1)
apretones(6) da 15
apretones(10) da 45

Cada 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:

calc
amplitud(notas) = max(notas) - min(notas)
amplitud([12, 18, 9, 21]) da 12

El 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 ^. no se acepta dentro de una función. Peor aún, un nombre de parámetro corto puede coincidir con una unidad: en w / h², significa horas al cuadrado, no el parámetro h. Escribe w / 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 propina tiene un error, la línea muestra un error y la propina anterior 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 random o 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:

calc
# Factura de marzo
tarifa_diaria = 450
iva = 21%
honorarios(días) = días * tarifa_diaria
con_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.00
desarrollo = honorarios(4.5) da €2,025.00
subtotal = diseño + desarrollo da €5,625.00
con_iva(subtotal) da €6,806.25
recargo(con_iva(subtotal), 45) da €136.13

Cambia 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.