Définition et calculs
Magique !
Voici deux exemples simples. Dans les deux cas, tous les attributs peuvent être saisis.
Lorsque vous modifiez le width ou le height, le perimeters et le surfaces sont recalculés. L’inverse est également vrai : modifiez le surface ou le perimeter, et les widths et heights varieront en conséquence.
Où est la magie ?
Dans les deux cas, il n’y a pas de script dans les coulisses ! Tous les calculs sont définis une fois pour toutes dans la classe Rectangle ! Voici donc un grand avantage : si vous avez besoin de plus de formulaires utilisant ces attributs, vous n’aurez pas besoin d’écrire de code (comme ci-dessus).
Voyons comment cela se passe !
Accès aux propriétés COMPUTÉES
GET
The function gets surface est définie à l’intérieur de la classe Rectangle.
Function get surface() -> $surface: Réel
$surface := This.width * this.hauteur
Une fois que la fonction ci-dessus a été écrite, vous pouvez maintenant utiliser la propriété de surface comme une propriété normale !
$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)
// conserve le rapport largeur-hauteur
$ratio :=This.width/This.height
This .height:=Square root($surface/$ratio)
This .
width:=Square root($surface*$ratio)
Une fois les fonctions ci-dessus écrites, vous pouvez maintenant modifier la propriété surface comme une propriété normale ! Les attributs width et height seront ajustés en conséquence.
//Let's create a rectangle who's original width and height are 60x20
$rect:=cs.Rectangle.new(60 ; 20)
$surface :=$rect.surface // obtenir la propriété surface
ALERT ("La surface de ce rectangle est : "+String($surface)) // renvoie 120
// Modifions la surface
$rect .surface:=1000
// Puis affiche la nouvelle largeur et la nouvelle hauteur
$width :=$rect.width
$height:=$rect.height
ALERT ("Le rectangle est maintenant : "+String($width)+" x "+String($height)) // renvoie 54.77 x 18.25
Interroger et trier…
Les collections remplies d’objets de la classe Rectangle peuvent être interrogées et triées à l’aide de propriétés calculées !
Exemple de requête :
myRectangles:=myRectangles.query("périmètre < 200")
Exemple de commande OrderBy :
myRectangles:=myRectangles.orderBy("périmètre desc")
…et JSON
Lorsque vous utilisez un objet avec des propriétés calculées, ces propriétés seront prises en compte lorsque vous le « stringifiez ».
$rect:=cs.Rectangle.new(30 ; 40)
ALERT (JSON Stringify($rect;*))