Formule
Molti widget disponibili per costruire la dashboard supportano formule personalizzate definite dall'utente.
Ecco la documentazione completa della sintassi supportata.
Sintassi delle espressioni
La sintassi accettata è abbastanza semplice. È simile alle normali espressioni JavaScript, ma più orientata alla matematica. Ad esempio, l'operatore ^ è l'esponenziazione, non xor.
Precedenza degli operatori
| Operatore | Associazione | Descrizione | | :----------------------- | :----------- | :-------------------------------------------------------------------------------------------------- | --------- | | (...) | Nessuna | Raggruppamento | | f(), x.y, a[i] | Sinistra | Chiamata di funzione, accesso a proprietà, indicizzazione di array | | ! | Sinistra | Fattoriale | | ^ | Destra | Esponenziazione | | +, -, not, sqrt, etc. | Destra | Operatori unari prefissi (vedi sotto per l'elenco completo) | | *, /, % | Sinistra | Moltiplicazione, divisione, resto | | +, -, || | Sinistra | Addizione, sottrazione, concatenazione di array/lista | | ==, !=, >=, <=, >, <, in | Sinistra | Uguale, non uguale, ecc. "in" significa "l'operando sinistro è incluso nell'array operando destro?" | | and | Sinistra | AND logico | | or | Sinistra | | OR logico | | x ? y : z | Destra | Condizionale ternario (se x allora y altrimenti z) | | ; | Sinistra | Separatore di espressioni |
Operatori unari
Il parser ha diverse "funzioni" integrate che sono in realtà operatori unari. La differenza principale tra questi e le funzioni è che possono accettare solo un argomento, e le parentesi sono opzionali. Con le parentesi, hanno la stessa precedenza delle chiamate di funzione, ma senza parentesi, mantengono la loro precedenza normale (appena sotto ^). Ad esempio, sin(x)^2 è equivalente a (sin x)^2, e sin x^2 è equivalente a sin(x^2).
Gli operatori unari + e - sono un'eccezione, e hanno sempre la loro precedenza normale.
| Operatore | Descrizione |
|---|---|
| -x | Negazione |
| +x | Più unario. Questo converte il suo operando in un numero, ma non ha altri effetti. |
| x! | Fattoriale (x _ (x-1) _ (x-2) _ … _ 2 * 1). gamma(x + 1) per non interi. |
| abs x | Valore assoluto (magnitudine) di x |
| acos x | Arco coseno di x (in radianti) |
| acosh x | Arco coseno iperbolico di x (in radianti) |
| asin x | Arco seno di x (in radianti) |
| asinh x | Arco seno iperbolico di x (in radianti) |
| atan x | Arco tangente di x (in radianti) |
| atanh x | Arco tangente iperbolico di x (in radianti) |
| cbrt x | Radice cubica di x |
| ceil x | Arrotondamento per eccesso di x — il più piccolo intero che è >= x |
| cos x | Coseno di x (x è in radianti) |
| cosh x | Coseno iperbolico di x (x è in radianti) |
| exp x | e^x (funzione esponenziale/antilogaritmo con base e) |
| expm1 x | e^x - 1 |
| floor x | Arrotondamento per difetto di x — il più grande intero che è <= x |
| length x | Lunghezza di stringa o array di x |
| ln x | Logaritmo naturale di x |
| log x | Logaritmo naturale di x (sinonimo di ln, non logaritmo in base 10) |
| log10 x | Logaritmo in base 10 di x |
| log2 x | Logaritmo in base 2 di x |
| log1p x | Logaritmo naturale di (1 + x) |
| not x | Operatore NOT logico |
| round x | X, arrotondato all'intero più vicino, usando l'arrotondamento "scolastico" (0.5 viene arrotondato al numero pari più vicino) |
| sign x | Segno di x (-1, 0, o 1 per negativo, zero, o positivo rispettivamente) |
| sin x | Seno di x (x è in radianti) |
| sinh x | Seno iperbolico di x (x è in radianti) |
| sqrt x | Radice quadrata di x. Il risultato è NaN (Not a Number) se x è negativo. |
| tan x | Tangente di x (x è in radianti) |
| tanh x | Tangente iperbolica di x (x è in radianti) |
| trunc x | Parte intera di X, sembra floor(x) tranne per i numeri negativi |
Funzioni predefinite
Oltre alle "funzioni" operatore, ci sono diverse altre funzioni.
| Funzione | Descrizione |
|---|---|
| random(n) | Ottiene un numero casuale nell'intervallo [0, n). Se n è zero, o non fornito, assume il valore predefinito di 1. |
| fac(n) | n! (fattoriale di n: "n _ (n-1) _ (n-2) _ … _ 2 * 1") Deprecato. Usa l'operatore ! invece. |
| min(a,b,…) | Ottiene il numero più piccolo (minimo) nella lista. |
| max(a,b,…) | Ottiene il numero più grande (massimo) nella lista. |
| hypot(a,b) | Ipotenusa, cioè la radice quadrata della somma dei quadrati dei suoi argomenti. |
| pyt(a, b) | Alias per hypot. |
| pow(x, y) | Equivalente a x^y. Per coerenza con l'oggetto Math di JavaScript. |
| atan2(y, x) | Arco tangente di x/y. i.e. l'angolo tra (0, 0) e (x, y) in radianti. |
| roundTo(x, n) | Arrotonda x a n cifre dopo il punto decimale. |
| map(f, a) | Mappa di array: Passa ogni elemento di a alla funzione f, e restituisce un array dei risultati. |
| fold(f, y, a) | Fold/reduce di array: Riduce l'array a in un singolo valore, y impostando y = f(y, x, index) per ogni elemento x dell'array. |
| filter(f, a) | Filtro di array: Restituisce un array contenente solo i valori di a dove f(x, index) è true. |
| indexOf(x, a) | Restituisce il primo indice di stringa o array a che corrisponde al valore x, o -1 se non trovato. |
| join(sep, a) | Concatenare gli elementi di a, separati da sep. |
| if(c, a, b) | Forma funzionale di c ? a : b. Nota: Questo valuta sempre sia a che b, indipendentemente dal fatto che c sia true o meno. Usa c ? a : b invece se ci sono effetti collaterali, o se valutare i rami potrebbe essere costoso. |
Letterali di array
Gli array possono essere creati includendo gli elementi all'interno di parentesi quadre [], separati da virgole. Ad esempio:
[ 1, 2, 3, 2+2, 10/2, 3! ]
Costanti
Il parser include anche un certo numero di costanti predefinite che possono essere utilizzate nelle espressioni. Queste sono mostrate nella tabella sottostante:
| Costante | Descrizione |
|---|---|
| E | Numero di Eulero |
| PI | PI (π) |
| true | Valore logico true |
| false | Valore logico false |