Tham chiếu toán tử DSL

Toán tử cho phép bạn kiểm tra giá trị của các thuộc tính đặc điểm dựa trên các giá trị cụ thể, so sánh các giá trị đó với nhau và kết hợp các biểu thức được sử dụng trong các nút condition.

Các toán tử được cung cấp thông qua các câu lệnh import sau:

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

Toán tử so sánh

nằm trong khoảng

Đưa ra kết quả là true khi giá trị của Biểu thức 1 nằm trong khoảng giá trị của Biểu thức 2 và Biểu thức 3 (bao gồm cả hai). Biểu thức được xếp hạng theo cách khác nhau tuỳ thuộc vào loại dữ liệu của biểu thức. Các loại dữ liệu đơn giản như số và chuỗi được xếp hạng giống như trong Kotlin.

Ví dụ
Biểu thức 1 Biểu thức 2 Biểu thức 3 Kết quả
6 1 3 false
2 1 3 true

Ví dụ về DSL

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

bằng

Đánh giá thành true khi Biểu thức 1 bằng Biểu thức 2.

Ví dụ
Biểu thức 1 Biểu thức 2 Kết quả
6 1 false
2 2 true

Ví dụ về DSL

washer.operationalState equals STOPPED

greaterThan

Đánh giá thành true khi Biểu thức 1 lớn hơn Biểu thức 2.

Ví dụ
Biểu thức 1 Biểu thức 2 Kết quả
6 1 true
1 6 false

Ví dụ về DSL

( blindsPosition.currentPositionLift greaterThan 0u )

greaterThanOrEquals

Đánh giá thành true khi Biểu thức 1 lớn hơn hoặc bằng Biểu thức 2.

Ví dụ
Biểu thức 1 Biểu thức 2 Kết quả
8 6 true
6 6 true
1 6 false

Ví dụ về DSL

( starterNode.measuredValue greaterThanOrEquals 50 )

lessThan

sẽ có giá trị là true khi Biểu thức 1 nhỏ hơn Biểu thức 2.

Ví dụ
Biểu thức 1 Biểu thức 2 Kết quả
6 1 false
1 6 true

Ví dụ về DSL

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

lessThanOrEquals

Đánh giá thành true khi Biểu thức 1 nhỏ hơn hoặc bằng Biểu thức 2.

Ví dụ
Biểu thức 1 Biểu thức 2 Kết quả
8 6 false
6 6 true
1 6 true

Ví dụ về DSL

( starterNode.measuredValue lessThanOrEquals 25 )

notEquals

Đánh giá thành true khi Biểu thức 1 không bằng Biểu thức 2.

Ví dụ
Biểu thức 1 Biểu thức 2 Kết quả
6 1 true
1 6 true
2 2 false

Ví dụ về DSL

occupancyStateChange.occupied notEquals 0

Toán tử số học

Thêm

Toán tử cộng ( + ).

Ví dụ về DSL

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

Trừ

Toán tử trừ ( - ).

Ví dụ về DSL

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

Nhân

Toán tử nhân ( * ).

Ví dụ về DSL

val millis = seconds * 1000

Chia

Toán tử chia ( / ).

Ví dụ về DSL

val rpm = revolutions / minutes

Toán tử logic

Kết hợp hai biểu thức trong một biểu thức AND logic, đánh giá thành true khi cả hai biểu thức đều là true.

Ví dụ
Biểu thức 1 Biểu thức 2 Kết quả
false false false
true false false
false true false
true true true

Ví dụ về DSL

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

không

Bỏ qua giá trị logic của một biểu thức.

Ví dụ
Cụm từ Kết quả
true false
false true

Ví dụ về DSL

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

hoặc

Kết hợp hai biểu thức thành một biểu thức OR logic.

Ví dụ
Biểu thức 1 Biểu thức 2 Kết quả
false false false
true false true
false true true

Ví dụ về DSL

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