מסמך עזר של אופרטור DSL

אופרטורים מאפשרים לבדוק את הערך של מאפייני המאפיינים לעומת ערכים ספציפיים, להשוות ביניהם ולשלב ביטויים שמשמשים בצמתים מסוג condition.

אפשר להשתמש באופרטורים באמצעות הצהרות import הבאות:

import com.google.home.automation.and
import com.google.home.automation.between
import com.google.home.automation.contains
import com.google.home.automation.equals
import com.google.home.automation.greaterThan
import com.google.home.automation.greaterThanOrEquals
import com.google.home.automation.lessThan
import com.google.home.automation.not
import com.google.home.automation.notEquals
import com.google.home.automation.or

אופרטורים להשוואה

בין

הפונקציה מקבלת את הערך true כשהערך של ביטוי 1 הוא בין הערך של ביטוי 2 לבין הערך של ביטוי 3 (כולל). הביטויים מדורגים באופן שונה בהתאם לסוג הנתונים שלהם. סוגי נתונים פשוטים כמו מספרים ומחרוזות מדורגים באותו אופן כמו ב-Kotlin.

דוגמה
ביטוי 1 ביטוי 2 ביטוי 3 תוצאה
6 1 3 false
2 1 3 true

דוגמה ל-DSL

val time = stateReader<_>(structure, Time)
condition() {
  expression = time.currentTime
     .between(
      time.sunsetTime,
      time.sunriseTime)
}

שווה ל-

הפונקציה מחזירה את הערך true כאשר ביטוי 1 שווה לביטוי 2.

דוגמה
ביטוי 1 ביטוי 2 תוצאה
6 1 false
2 2 true

דוגמה ל-DSL

washer.operationalState equals STOPPED

greaterThan

הפונקציה מחזירה את הערך true כאשר ביטוי 1 גדול מביטוי 2.

דוגמה
ביטוי 1 ביטוי 2 תוצאה
6 1 true
1 6 false

דוגמה ל-DSL

( blindsPosition.currentPositionLift greaterThan 0u )

greaterThanOrEquals

הפונקציה מחזירה את הערך true כאשר ביטוי 1 גדול מביטוי 2 או שווה לו.

דוגמה
ביטוי 1 ביטוי 2 תוצאה
8 6 true
6 6 true
1 6 false

דוגמה ל-DSL

( starterNode.measuredValue greaterThanOrEquals 50 )

lessThan

מקבל את הערך true כשביטוי 1 קטן מביטוי 2.

דוגמה
ביטוי 1 ביטוי 2 תוצאה
6 1 false
1 6 true

דוגמה ל-DSL

time.currentTime lessThan LocalTime.of(22,0,0,0)

lessThanOrEquals

הפונקציה מקבלת את הערך true כאשר ביטוי 1 קטן מביטוי 2 או שווה לו.

דוגמה
ביטוי 1 ביטוי 2 תוצאה
8 6 false
6 6 true
1 6 true

דוגמה ל-DSL

( starterNode.measuredValue lessThanOrEquals 25 )

notEquals

הפונקציה מקבלת את הערך true כאשר ביטוי 1 לא שווה לביטוי 2.

דוגמה
ביטוי 1 ביטוי 2 תוצאה
6 1 true
1 6 true
2 2 false

דוגמה ל-DSL

occupancyStateChange.occupied notEquals 0

אופרטורים חשבוניים

הוספה

אופרטור החיבור ( + ).

דוגמה ל-DSL

var totalCount = 0
...
totalCount = totalCount + 1

הפחתה

אופרטור החיסור ( - ).

דוגמה ל-DSL

var countdown = 10
...
countdown = countdown - 1

הכפלה

אופרטור הכפלה ( * ).

דוגמה ל-DSL

val millis = seconds * 1000

חילוק

אופרטור החילוק ( / ).

דוגמה ל-DSL

val rpm = revolutions / minutes

אופרטורים לוגיים

וגם

ביטוי שמשלב שני ביטויים בביטוי לוגי מסוג AND, והערך שלו הוא true כששני הביטויים הם true.

דוגמה
ביטוי 1 ביטוי 2 תוצאה
false false false
true false false
false true false
true true true

דוגמה ל-DSL

((device.occupied notEquals 0) and
   time.currentTime.between(time.sunriseTime, time.sunsetTime))

לא

הפונקציה מבטלת את הערך הלוגי של ביטוי.

דוגמה
ביטוי תוצאה
true false
false true

דוגמה ל-DSL

time.currentTime not (between(time.sunriseTime, time.sunsetTime))

או

פונקציה שמשלבת שני ביטויים לביטוי לוגי מסוג OR.

דוגמה
ביטוי 1 ביטוי 2 תוצאה
false false false
true false true
false true true

דוגמה ל-DSL

(time.currentTime equals LocalTime.of(10,0,0,0)) or
  (time.currentTime equals LocalTime.of(22,0,0,0))