Validator-Regeln

Das Flag Validator stellt spezielle Verhaltensweisen bereit.

Wenn sowohl eine Regel Rule1 als auch eine mit dem Flag Validator markierte Regel Rule1 vorhanden ist, dann stellt die Prüfung (der Validator) die Validierung und/oder Filterung der Ergebnisse von Rule1 bereit.

Die Regel mit dem Flag Validator gilt als Validator-Regel. Die andere Regel mit demselben Namen ist die Zielregel. Wenn die Zielregel referenziert wird, falls sie nicht bereits gebunden ist, wird stattdessen der Validator ausgewertet. Während der Auswertung des Validators würde dieser (in der Regel, erforderlich ist es jedoch nicht) den vorgeprüften Wert der Zielregel abrufen, ihn auf die gewünschte Art und Weise verarbeiten und das Ergebnis als Wert der Zielregel zurückgeben. Die Prüfungsregel wird nie im Cache gespeichert und nie direkt referenziert. Wenn der Name der Zielregel Rule1 lautet, wird die Prüfungsregel intern so überarbeitet, dass sie zu einer Methode mit Rule1_%%vtor wird.

Jede externe Referenz auf Rule1 erhält den Wert, der von Rule1_%%vtor zurückgegeben wird. In Rule1_%%vtor erhält jede Referenz auf Rule1 den Wert, den sie ohne einen Validator erhalten hätte (den raw-Wert). Damit kann der Ersteller der Prüfungsregel den unformatierten (raw) Wert prüfen und ändern, ersetzen oder eine auf ihm basierende Fehlermeldung erzeugen.

Die Zielregel und die Prüfungsregel müssen vom gleichen Datentyp sein. Sonst wird eine Ausnahme ausgelöst.

Sonstige Flags und Einschränkungen

Zielregeln können alle normalen Regel-Flags haben, sie können jedoch keine speziellen Regeltypen sein, wie z. B. Child, Group oder Method. In Bezug auf Lookup und andere Vorgaben ist das Verhalten so, dass der Validator zuletzt ausgeführt wird, wenn alle anderen Verhaltensweisen angewendet wurden. Dadurch wird ein abgerufener Lookup-Wert validiert.

Prüfungsregeln ignorieren alle Flags außer Validator.

Vorhandene Validatoren, die über keine entsprechende Basisregel verfügen, werden nicht ausgewertet. Während der Kompilierung können Warnungen ausgegeben werden.

Prüfungsregeln dürfen keine dynamischen Regeln sein. Die Zielregel kann jedoch dynamisch sein.

Prüfungs- und Zielregeln müssen im gleichen Design (oder bei dynamischen Regeln im gleichen Bauteil) vorhanden sein. Sie suchen nicht nach Übereinstimmungen.

Beispiel

Betrachten Sie den folgenden Intent-Quellcode:

'! Intent Language(tm) 3.0
Design Validator : BasePart
	Parameter Rule Ex1 As Integer = 42
	Validator Rule Ex1 As Integer
		If (Ex1 < 0) Then
			Return 0
		Else If (Ex1 > 100) Then
			Return 100
		End If
		Return Ex1
End Rule
End Design

Unabhängig davon, welche Ganzzahl Ex1 angegeben wird, wird ein Wert zwischen 0 und 100 einschließlich zurückgegeben.

Zum Testen ist es zulässig, als Methode Ex1_%%vtor aufzurufen. Das einzige Argument wird als validiert zurückgegeben.

Es ist zur Referenz Ex1 in Validator Ex1 indirekt kreisförmig. Beispiel: Wenn Ex2 Ex1 referenziert und Ex1_validator Ex2 referenziert, wird eine Kreisreferenz erkannt. Dies ist darauf zurückzuführen, dass Ex2 auf Ex1 erst nach der Prüfung zugreifen kann. Doch die Validierung wird zum Zeitpunkt des Aufrufs ausgewertet.