Definition und Berechnungen
Zauberei!
Hier sind zwei einfache Beispiele. In beiden Fällen können alle Attribute eingegeben werden.
Wenn Sie die width oder height ändern, werden die perimeters und surfaces neu berechnet. Umgekehrt gilt das Gleiche: Ändern Sie surface oder perimeter,, ändern sich widths und heights entsprechend.
Wo liegt die Magie?
In beiden Fällen gibt es kein Skript hinter den Kulissen! Alle Berechnungen werden einmalig in der Klasse Rectangle definiert! Ein großer Vorteil: Wenn Sie weitere Formulare mit diesen Attributen benötigen, brauchen Sie keinen Code zu schreiben (wie oben).
Schauen wir uns an, wie das gemacht wird!
Zugriff auf COMPUTED-Eigenschaften
GET
The function gets surface ist innerhalb der Klasse Rectangle definiert.
Function get surface() -> $surface: Real
$surface := This.width * this.height
Nachdem die obige Funktion geschrieben wurde, können Sie nun die Oberflächeneigenschaft als reguläre Eigenschaft verwenden!
$rect:=cs.Rectangle.new(60; 20)
$surface :=$rect.surface // get the surface property
ALERT("The surface of this rectangle is: "+String($surface))
SET
// this function will be called when surface is modified
Function set surface($surface)
// Beibehaltung des Breiten-Höhen-Verhältnisses
$ratio :=This.width/This.height
This .height:=Square root($surface/$ratio)
This .
width:=Square root($surface*$ratio)
Wenn Sie die obigen Funktionen geschrieben haben, können Sie nun die Eigenschaft surface wie eine normale Eigenschaft ändern! Die Attribute width und height werden entsprechend angepasst.
//Let's create a rectangle who's original width and height are 60x20
$rect:=cs.Rectangle.new(60; 20)
$surface :=$rect.surface // liefert die Oberflächeneigenschaft
ALERT ("Die Oberfläche dieses Rechtecks ist: "+String($surface)) // gibt 120 zurück
// Ändern wir die Oberfläche
$rect .surface:=1000
// Dann die neue Breite und Höhe anzeigen
$width :=$rect.width
$height:=$rect.height
ALERT ("Das Rechteck ist jetzt: "+String($width)+" x "+String($height)) // ergibt 54,77 x 18,25
Abfragen und Sortieren…
Sammlungen, die mit Objekten der Klasse Rectangle gefüllt sind, können über berechnete Eigenschaften abgefragt und sortiert werden!
Abfrage-Beispiel:
myRectangles:=myRectangles.query("Umfang < 200")
OrderBy-Beispiel:
myRectangles:=myRectangles.orderBy("Umfang absteigend")
…und JSON
Wenn Sie ein Objekt mit berechneten Eigenschaften verwenden, werden diese Eigenschaften berücksichtigt, wenn Sie es „stringifizieren“.
$rect:=cs.Rectangle.new(30; 40)
ALERT (JSON Stringify($rect;*))