Der gene­rier­te Source­code

Der folgende Source­code ist das Ergebnis der Gene­rie­rung des Beispieles. Er beginnt mit einem Kommentar-Header, dann folgen der Prolog, die Ent­schei­dungs­ta­bellen-Regeln (der IF-ELSE-Regelbaum) mit Fehlerbehandlung und zum Schluss Epilog und Abschluss-Kommentar:

D:\Projekte\LF-ET-Demo\Cs\Compare.cs

using System;

namespace LfetDemo

{

public class Compare
{
public const string S1IsLessThanS2 = "String 1 ist kleiner als String 2";
public const string S1IsEqualToS2 = "String 1 ist gleich String 2";
public const string S1IsGreaterThanS2 = "String 1 ist größer als String 2";
public string CompareStrings(string s1, string s2)
{
var result = "";
var compareS1ToS2 = s1 != null && s2 != null
? s1.CompareTo(s2) // liefert immer -1, 0 oder 1
: -2;
// Prolog Decision Table <----
#region Rules
var lfetCompareRuleExecuted = false;
// Condition B01: String 1 kleiner String 2 ?
if (compareS1ToS2 == -1 {vbar}{vbar} s1 == null && s2 != null)
{
// Rule R01 ---->
lfetCompareRuleExecuted = true;
// Action A01: Ergebnis: String 1 ist kleiner als String 2
result = S1IsLessThanS2;
// Rule R01 <----
}
else
{
// Condition B02: String 1 größer String 2 ?
if (compareS1ToS2 == 1 {vbar}{vbar} s1 != null && s2 == null)
{
// Rule R02 ---->
lfetCompareRuleExecuted = true;
// Action A02: Ergebnis: String 1 ist größer als String 2
result = S1IsGreaterThanS2;
// Rule R02 <----
}
else
{
// Rule R03 ---->
lfetCompareRuleExecuted = true;
// Action A03: Ergebnis: String 1 ist gleich String 2
result = S1IsEqualToS2;
// Rule R03 <----
}
}
if (!lfetCompareRuleExecuted)
{
// Error ---->
// profile LFET.CS.Error.ini not found
// used LF-ET 2.1.4 (130731a) build in default
System.Console.WriteLine("No rule executed in decision table 'Compare'");
System.Environment.Exit(-1);
// Error <----
}
#endregion Rules
// Epilog Decision Table ---->
return result;
}
}

}

Betrachten wir die einzelnen Abschnitte des Sourcecodes noch etwas genauer, zuerst den gene­rier­ten Header-Kommentar. Hier finden sich Informationen zum Zeitpunkt der Gene­rie­rung, aus welcher Ent­schei­dungs­ta­belle und mit welcher LF-ET-Version der Source­code ge­ne­riert wurde:

Bei Bedarf kann LF-ET auch einen individuell gestaltbaren Projekt-Header vor diesen LF-ET-Header einbinden, nähere Informationen dazu finden Sie im Kapitel Individueller Header.

Speziell für C# wird ein Standard-Prolog ge­ne­riert (using System), der am Anfang des gene­rier­ten Source­code steht. Weitere Informationen dazu siehe Kapitel Cs/C# Standard Prolog.

using System;

Danach folgt der Ent­schei­dungs­ta­bellen-Prolog, Anfang und Ende sind an den gene­rier­ten Kommentaren gut erkennbar:

namespace LfetDemo

{

public class Compare
{
public const string S1IsLessThanS2 = "String 1 ist kleiner als String 2";
public const string S1IsEqualToS2 = "String 1 ist gleich String 2";
public const string S1IsGreaterThanS2 = "String 1 ist größer als String 2";
public string CompareStrings(string s1, string s2)
{
var result = "";
var compareS1ToS2 = s1 != null && s2 != null
? s1.CompareTo(s2) // liefert immer -1, 0 oder 1
: -2;
// Prolog Decision Table <----

Direkt vor der ersten Bedingung des IF-ELSE-Regelbaumes bindet LF-ET bei C# noch eine boolsche Hilfsvariable 'lfetCompareRuleExecuted' ein. Sie dient dazu zu erkennen, ob eine Regel ausgeführt wurde oder nicht:

Die Elemente des IF-ELSE-Regelbaumes sind durch Leerzeilen voneinander getrennt und ausführlich kommentiert, wobei dazu die fachlichen Texte aus der Ent­schei­dungs­ta­belle verwendet werden. Die Regel-Reihenfolge entspricht grundsätzlich immer der Standardsortierung.

#region Rules
var lfetCompareRuleExecuted = false;
// Condition B01: String 1 kleiner String 2 ?
if (compareS1ToS2 == -1 {vbar}{vbar} s1 == null && s2 != null)
{
// Rule R01 ---->
lfetCompareRuleExecuted = true;
// Action A01: Ergebnis: String 1 ist kleiner als String 2
result = S1IsLessThanS2;
// Rule R01 <----
}
else
{
// Condition B02: String 1 größer String 2 ?
if (compareS1ToS2 == 1 {vbar}{vbar} s1 != null && s2 == null)
{
// Rule R02 ---->
lfetCompareRuleExecuted = true;
// Action A02: Ergebnis: String 1 ist größer als String 2
result = S1IsGreaterThanS2;
// Rule R02 <----
}
else
{

Direkt nach dem IF-ELSE-Regelbaum erfolgt die Auswertung der boolschen Hilfsvariablen 'lfetCompareRuleExecuted'. Sie kann nur 'false' sein, wenn keine Regel ausgeführt wurde, d.h. die Ent­schei­dungs­ta­belle hat versagt (konnte den aktuellen Systemzustand nicht verarbeiten!). Dieses Fehlverhalten kann nur auftreten, wenn erweiterte Bedingungen verwendet werden und ein systemseitig möglicher (und auch aufgetretener) Bedin­gungs-Wert bei der Spezifikation nicht beachtet wurde. Dies wertet LF-ET standardmäßig als schweren (Spezifikations-) Fehler und beendet die Programmausführung mit System.Environment.Exit(-1). Die Behandlung dieses Fehlers kann bei Bedarf individuell angepasst oder auch deaktiviert werden, siehe hierzu Kapitel Fehlerbehandlung (optional).

if (!lfetCompareRuleExecuted)
{
// Error ---->
// profile LFET.CS.Error.ini not found
// used LF-ET 2.1.4 (130731a) build in default
System.Console.WriteLine("No rule executed in decision table 'Compare'");
System.Environment.Exit(-1);
// Error <----
}
#endregion Rules

Den Abschluss bildet der Epilog, in unserem Beispiel wird das im IF-ELSE-Regelbaum ermittelte Ergebnis zurückgegeben, Methode und Klasse beendet:

// Epilog Decision Table ---->
return result;
}
}

}