Vergleiche geben nicht false zurück

Beim Testen von Datumvergleichen ist mir aufgefallen, dass bei unwahren Expressionen nicht 'false' als Rückgabe geliefert wird. 'true' wird für wahre Expressionen jedoch zurückgeben.


Das verwundert mich etwas, da meiner Erwartung nach die Expressionen auch 'false' als Wert zurückliefern. Oder ist das Verhalten so gewünscht?


Anbei ein knappes Beispiel - alle unwahren Expressionen liefern keinen Wert zurück.

<#assign earlierDate = "2019-11-27"?date.xs>
<#assign laterDate = "2019-12-27"?date.xs>

1: ${earlierDate lt laterDate} 
2: ${earlierDate gt laterDate}
3: ${laterDate lt earlierDate} 
4: ${laterDate gt earlierDate} 
5: ${5 < 4}

Meine Ausgabe:

1: true 2: 3: 4: true 5:


Hallo,


versuche bitte einmal deine Expressions in Klammern zusetzten und anschließend ein ?c dran hängen.

<#assign earlierDate = "2019-11-27"?date.xs>
<#assign laterDate = "2019-12-27"?date.xs>

2: ${(earlierDate gt laterDate)?c}


viele Grüße,

Lukas

Das false = "leer" ergibt leider noch eine "Altlast" von Freemarker, die wir versuchen in Zukunft auszubauen.


Kleiner Zusatztip: statt "lt" (less than) und "gt" (greater than) kann man auch normale spitze Klammern verwenden. Nur muss man dann bei Ausdrücken wie

<#if (laterDate > earlierDate)>bla</#if>


aufpassen und den ganzen Ausdruck in Klammern setzen, damit Freemarker das nicht mit seinen eigenen spitzen Klammern verwechselt.

?c am Ende der Expression löst mein Problem. Vielleicht nicht grade die verständliches Lösung, aber auf jeden Fall deutlich kürzer als

<#if ...>
 true
<#else>
 false
</#if>

Ich danke.