Class JexlService
Grundlagen von Jexl
Allgemeines
- Am Ende jedes Statements (i. d. R. Ende der Zeile) wird ein Semikolon gesetzt, außer wenn dem Statement ein Codeblock mit geschweiften Klammern folgt.
- Rechenoperatoren:
+,-,*,/,%(Zahl 1 % Zahl 2 = Rest von Zahl 1/Zahl 2) - Statt
variable = variable + 3;kannvariable += 3;geschrieben werden. Dies ist für alle Rechenoperatoren möglich. - Um Kommazahlen darzustellen, wird ein Punkt statt eines Kommas verwendet. In den Formeln tauchen Zahlen mit Buchstaben wie
35bauf. Das sind Kommazahlen mit bestimmten Eigenschaften. - Wenn alle Zahlen, die an einer Division beteiligt sind, ganze Zahlen sind, wird das Ergebnis auch zu einer ganzen Zahl werden. Um die Nachkommastellen zu erhalten, muss eine der Zahlen in eine Kommazahl umgewandelt werden.
Variablen
In Variablen werden Werte zwischengespeichert, die bei Bedarf abgerufen werden können. Variablen müssen vor Benutzung deklariert werden und ihnen muss ein Wert zugewiesen werden. Die Deklaration erfolgt mit folgenden Schlüsselwörtern:
Mit let werden die meisten Variablen deklariert:
let variable;
const wird verwendet, wenn sichergestellt werden soll, dass der Wert einer Variablen nicht verändert werden kann. Sollte dies dennoch versucht
werden, wird ein Fehler ausgelöst:
const variable;
Auf diese Weise sind die Variablen Jexl bekannt. Aber solange ihnen noch kein Wert zugewiesen wurde, haben sie kaum einen Nutzen. Die Zuweisung eines
Wertes erfolgt mit =. Wurde die Variable bereits deklariert, muss das Schlüsselwort weggelassen werden.
Variable wurde vorher bereits deklariert:
let variable;
variable = 1 + 2;
Deklaration und Zuweisung können in einer Zeile erfolgen:
let variable = 5;
Externe Variablen
In Jexl gibt es noch externe Variablen, die über den JexlContext zur Verfügung gestellt werden (s. Tabellen in FormulaVariable). Diese Variablen müssen nicht deklariert werden und ihnen muss kein Wert zugewiesen werden. Für die Benutzung müssen sie sich aber im JexlContext (Sammlung der externen Variablen) befinden. Dies geschieht, sobald sie das erste Mal vom System erfasst werden, z. B. durch die Abfrage der Atlas-API oder durch die Berechnung des Wertes über die dazugehörige Formel.
Schreibweise
Die externen Variablen werden komplett mit Kleinbuchstaben geschrieben und aufeinanderfolgende Wörter werden mit einem Unterstrich getrennt, z. B. alter_bei_rentenbeginn. Bei Variablen, die in den Formeln deklariert werden, wird das erste Wort komplett kleingeschrieben und der Anfangsbuchstabe der darauffolgenden Wörter wird großgeschrieben, z. B. alterBeiRentenbeginn.
Listen
Listen sind geordnete Sammlungen von Werten. Jeder Wert in einer Liste ist über seine Positionsnummer, dem Index, erreichbar. Der Index fängt bei
0 an und erhöht sich bei jedem darauffolgenden Wert um je 1. Der erste Wert hat also den Index 0, der zweite Wert den Index
1, usw. Über folgende Syntax wird ein Wert einer Liste mit einem bestimmten Index aufgerufen:
liste[index]
if-Statements
Syntax
if (Bedingung)
{
ausführbarer Code
}
else if (andere Bedingung)
{
ausführbarer Code
}
else
{
ausführbarer Code
}
if-Statements ermöglichen es Bedingungen zu prüfen und je nach Ausgang der Prüfung einen bestimmten Codeblock auszuführen. Ist eine Bedingung
wahr, wird der dazugehörige Code innerhalb der geschweiften Klammern ausgeführt; ist sie falsch, wird der Block übersprungen. Ein if-Statement
besteht immer aus dem if-Block. Optional können beliebig viele else if-Blöcke mit verschiedenen Bedingungen hinzugefügt werden. Ebenfalls
optional kann ein else-Block hinzugefügt werden, der ausgeführt wird, wenn keine Bedingung wahr ist.
Bedingungen
if (Bedingung 1 && (Bedingung 2 || Bedingung 3) && !Bedingung 4)
Die Bedingungen stehen in runden Klammern nach dem entsprechenden Schlüsselwort. Es können beliebig viele Bedingungen miteinander verknüpft werden. Die Bedingungen werden von links nach rechts ausgewertet. Zur Verknüpfung stehen verschiedene Operatoren zur Verfügung:
&&: Nur wenn beide Bedingungen wahr sind, wird die Verknüpfung beider Bedingungen als wahr gewertet.||: Es muss nur eine der beiden Bedingungen wahr sein (es dürfen auch beide wahr sein), damit die Verknüpfung als wahr gewertet wird.(): Mit runden Klammern kann wie in der Mathematik die Reihenfolge der Auswertung beeinflusst werden. Zuerst wird das Innere der Klammern ausgewertet.
Möchte man das Ergebnis umkehren (eine wahre Bedingung wird falsch und umgekehrt), setzt man vor die Bedingung ein !.
Beim obenstehenden Beispiel wird der Code des if-Blocks ausgeführt, wenn Bedingung 1 wahr, Bedingung 2 und/oder Bedingung 3 wahr und Bedingung 4
falsch sind.
Zum Vergleich der Werte von zwei Operanden stehen verschiedene Operatoren zur Verfügung:
==: Wahr, wenn beide Operanden den gleichen Wert haben.
!=: Wahr, wenn beide Operanden nicht den gleichen Wert haben.
<, >, <=, >=: Wahr, wenn der linke Operand kleiner, größer, kleiner gleich, größer gleich ist.
Beispiele
if (Wert 1 == Wert 2)
if (Wert 1 != Wert 2)
if (Wert 1 < Wert 2 || Wert 3 > Wert 4)
if (Wert 1 <= Wert 2 && Wert 3 >= Wert 4)
Ternärer Operator ?:
Bedingung ? wenn wahr : wenn falsch
Mit dem ternären Operator können if-Statements in verkürzter Schreibweise dargestellt werden. Dies empfiehlt sich bei einfachen
if-Statements, da bei komplexeren Statements die Lesbarkeit leidet. Wenn die Bedingung wahr ist, wird der Code nach dem Fragezeichen ausgeführt,
ansonsten der Code nach dem Doppelpunkt.
Hilfsmethoden
Syntax
methoden:nameDerMethode(Argument 1, Argument 2, ...)
In dieser Klasse befinden sich Hilfsmethoden, die in den Formeln aufgerufen werden können, um häufig benötigte Funktionen einfach einzusetzen. Welche Methoden es gibt und welche Parameter eine Methode besitzt, kann der unten stehenden Übersicht entnommen werden.
return-Schlüsselwort
return Wert;
Das return-Schlüsselwort wird in Funktionen und Methoden verwendet, um diese zu beenden und einen Wert zurückzugeben. Wenn eine Formel einen Wert
zurückgibt, wird dieser an den Tarifkostenberechner übergeben. Zwar kann in Jexl das return-Schlüsselwort weggelassen werden, weil Jexl automatisch
den Wert des letzten evaluierten Statements zurückgibt, aber es ist zu empfehlen das return-Schlüsselwort immer zu verwenden, um die Rückgabe von
unerwarteten Werten zu verhindern und kenntlich zu machen, welcher Wert zurückgegeben werden soll.
null-Schlüsselwort
null ist nicht mit der Zahl 0 zu verwechseln. null steht für die Abwesenheit eines Werts. Wenn z. B. einer Variable null
zugewiesen ist, dann hat diese Variable keinen Wert. Man kann null nutzen, um vor der Verwendung einer Variable zu prüfen, ob diese einen Wert
hat, damit keine Fehler ausgelöst werden.
Beispiel
if (variable == null)
{
variable = 0;
}
return variable + 1;
-
Field Summary
Fields -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptiongetGuthabenJahr(List<BigDecimal> monthValues, Number laufzeitJahre, Number jahr) Ermittelt das Guthaben eines JahresbooleanisBeitragsmonat(Number zahlweise, Number monat) Prüft, ob im gegebenen Monat eine Beitragszahlung erfolgtExtrahiert die Jahreszahl aus dem gegebenen DatumErmittelt das Maximum aus zwei gegebenen ZahlenErmittelt das Minimum aus zwei gegebenen ZahlenPrüft, ob eine Zahl einen Wert hatBerechnet eine ExponentialfunktionsummeGesamt(List<BigDecimal> yearValues) Berechnet die Summe aus allen Jahreswerten einer KostenartsummeJahr(List<BigDecimal> monthValues, Number laufzeitMonate, Number jahr) Berechnet die Summe aller Monatswerte eines Jahres für eine Kostenart
-
Field Details
-
nameInJexl
- See Also:
-
-
Constructor Details
-
JexlService
public JexlService()
-
-
Method Details
-
jahr
-
pow
Berechnet eine Exponentialfunktion- Parameters:
base- Basisexponent- Exponent- Returns:
- Ergebnis der Exponentialfunktion
-
min
Ermittelt das Minimum aus zwei gegebenen Zahlen- Parameters:
firstNumber- Erste ZahlsecondNumber- Zweite Zahl- Returns:
- Minimum
-
max
Ermittelt das Maximum aus zwei gegebenen Zahlen- Parameters:
firstNumber- Erste ZahlsecondNumber- Zweite Zahl- Returns:
- Maximum
-
nullCheck
Prüft, ob eine Zahl einen Wert hat- Parameters:
numberToCheck- Zu prüfende ZahldefaultNumber- Standardwert- Returns:
- Es wird die zu prüfende Zahl zurückgegeben, falls sie einen Wert hat, ansonsten der Standardwert. Die zurückgegebene Zahl ist immer eine Kommazahl.
-
summeJahr
Berechnet die Summe aller Monatswerte eines Jahres für eine Kostenart- Parameters:
monthValues- MonatswertelaufzeitMonate- Laufzeit des Tarifs in Monatenjahr- Jahr, für das die Summe berechnet wird- Returns:
- Summe aller Werte eines Jahres
-
getGuthabenJahr
Ermittelt das Guthaben eines Jahres- Parameters:
monthValues- Monatswerte des GuthabenslaufzeitJahre- Laufzeit des Tarifs in Jahrenjahr- Jahr, für das das Guthaben ermittelt wird- Returns:
- Guthaben eines Jahres
-
summeGesamt
Berechnet die Summe aus allen Jahreswerten einer Kostenart- Parameters:
yearValues- Jahreswerte- Returns:
- Gesamtwert
-
isBeitragsmonat
-