Dokumentacja operatora DSL

Operatory umożliwiają sprawdzanie wartości atrybutów cech w odniesieniu do określonych wartości, porównywanie ich ze sobą oraz łączenie wyrażeń używanych w węzłach condition.

Operatory są dostępne za pomocą tych instrukcji 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

Operatory porównania

pomiędzy

Wynik to true, gdy wartość wyrażenia 1 mieści się między wartościami wyrażeń 2 i 3 (włącznie). Wyrażenia są klasyfikowane w różny sposób w zależności od typu danych. Proste typy danych, takie jak liczby i ciągi znaków, są klasyfikowane w ten sam sposób co w Kotlinie.

Przykład
Wyrażenie 1 Wyrażenie 2 Wyrażenie 3 Wynik
6 1 3 false
2 1 3 true

Przykład DSL

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

równa się

Zwraca wartość true, gdy wyrażenie 1 jest równe wyrażeniu 2.

Przykład
Wyrażenie 1 Wyrażenie 2 Wynik
6 1 false
2 2 true

Przykład DSL

washer.operationalState equals STOPPED

greaterThan

Wynik to true, gdy wyrażenie 1 jest większe niż wyrażenie 2.

Przykład
Wyrażenie 1 Wyrażenie 2 Wynik
6 1 true
1 6 false

Przykład DSL

( blindsPosition.currentPositionLift greaterThan 0u )

greaterThanOrEquals

Zwraca wartość true, gdy wyrażenie 1 jest większe lub równe wyrażeniu 2.

Przykład
Wyrażenie 1 Wyrażenie 2 Wynik
8 6 true
6 6 true
1 6 false

Przykład DSL

( starterNode.measuredValue greaterThanOrEquals 50 )

lessThan

ma wartość true, gdy wyrażenie 1 jest mniejsze niż wyrażenie 2.

Przykład
Wyrażenie 1 Wyrażenie 2 Wynik
6 1 false
1 6 true

Przykład DSL

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

lessThanOrEquals

Zwraca wartość true, gdy wyrażenie 1 jest mniejsze lub równe wyrażeniu 2.

Przykład
Wyrażenie 1 Wyrażenie 2 Wynik
8 6 false
6 6 true
1 6 true

Przykład DSL

( starterNode.measuredValue lessThanOrEquals 25 )

notEquals

Wynik to true, gdy Wyrażenie 1 jest różne od Wyrażenie 2.

Przykład
Wyrażenie 1 Wyrażenie 2 Wynik
6 1 true
1 6 true
2 2 false

Przykład DSL

occupancyStateChange.occupied notEquals 0

Operatory arytmetyczne

Dodaj

Operator dodawania ( +).

Przykład DSL

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

Odejmowanie

Operator odejmowania ( -).

Przykład DSL

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

Mnożenie

Operator mnożenia ( *).

Przykład DSL

val millis = seconds * 1000

Dzielenie

Operator dzielenia ( /).

Przykład DSL

val rpm = revolutions / minutes

Operatory logiczne

i

Łączy 2 wyrażenia w wyrażeniu logicznym OR (LUB), które zwraca wartość true, gdy oba wyrażenia mają wartość true.

Przykład
Wyrażenie 1 Wyrażenie 2 Wynik
false false false
true false false
false true false
true true true

Przykład DSL

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

nie

Neguje wartość logiczną wyrażenia.

Przykład
Wyrażenie Wynik
true false
false true

Przykład DSL

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

lub

Łączy 2 wyrażenia w wyrażenie logiczne LUB.

Przykład
Wyrażenie 1 Wyrażenie 2 Wynik
false false false
true false true
false true true

Przykład DSL

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