Wymagalne wartości logiczne warunków
Mechanizm wyrażeń czasami wymaga, aby wyliczona wartość była wymagalna. Dzieje się tak we wszystkich miejscach, gdzie jest podejmowana decyzja:
- Warunek klasyfikacji rekordów w bloczku
- Warunek wykonania operacji mapowania
- Reguła walidacji
- Itp..
W każdym z tych miejsc system musi podjąć jednoznaczną decyzję TAK lub NIE i odpowiedź "nie wiadomo" jest nieakceptowalna.
Co zrobić, gdy napisaliśmy jakieś złożone wyrażenie posługujące się polami niewymagalnymi a potrzebujemy wartości wymagalnej?
Można rozważyć trzy podejścia - błąd, od góry, od dołu.
Weźmy za przykład takie wyrażenie:
Amount * Rate > ..\config\Threshold
Tu w przypadku niewymagalności któregokolwiek pola warunek będzie niewymagalną wartością logiczną.
Trzy możliwości postępowania:
-
Błąd - w tym podejściu w mapowaniu wymuszamy wymagalność naszych pól jeszcze przed obliczeniem (i dbamy, by operacje wystąpiły przed operacją obliczenia, w razie potrzeby je tam przesuwając). W efekcie nasze wyrażenie, oparte wtedy już na polach wymagalnych, również da w całości wymagalny wynik obliczenia. W przypadku wystąpienia braku wartości wejściowej, cały rekord zostanie odrzucony jako błąd. Zaznaczamy nasze pola i w menu kontekstowym włączamy im opcję Wymagalne.
-
Od góry - w podejściu tym, niezależnie od przyczyny pojawienia się wartości pustych i sposobu ich propagowania do góry, cały wynik będzie w razie czego wymagalną wartością logiczną "true". Przykład rozwiązania:
(Amount * Rate > ..\config\Threshold) ?? true -
Od dołu - tu należy zastanowić się nad możliwą wartością zastępczą dla każdego niewymagalnego pola wchodzącego do obliczeń i w razie potrzeby zastosować obejście. Przykład rozwiązania:
Amount???0 * Rate???1 > ..\config\Threshold???1000000000
Przykład rozwiązania z użyciem operatora ?? i wymaganych w tym przypadku nawiasów (a`la C# / Java):
(Amount ?? 0) * (Rate ?? 1) > (..\config\Threshold ?? 1000000000)
Zachęcamy do zapoznania się z opisem arytmetyki wartości pustych i rodzajów innych specjalnych wartości poszczególnych typów. Patrz: Brak wartości i specjalne wartości puste