Android 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

비교 연산자

범위

표현식 1의 값이 표현식 2와 표현식 3 사이에 있으면 (경계값 포함) true로 평가됩니다. 표현식은 데이터 유형에 따라 순위가 다릅니다. 숫자 및 문자열과 같은 단순 데이터 유형은 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)
}

between()으로 날짜 사용

between() 연산자를 사용하면 날짜 범위를 지정할 수 있습니다.

val exp2 =
  time.currentDate.between(
    LocalDate.of(2025, Month.OCTOBER, 1),
    LocalDate.of(2025, Month.DECEMBER, 15),
  )

하지만 전체 날짜로만 제한되지는 않습니다. Automation DSL을 사용하면 다양한 방법으로 날짜 범위를 표현할 수도 있습니다.

  • 연도와 월만 사용:
val exp2 =
  time.currentDate.yearMonth.between(
    YearMonth.of(2024, Month.OCTOBER),
    YearMonth.of(2026, Month.JANUARY),
  )
  • 월과 일만 사용:
val exp2 =
  time.currentDate.monthDay.between(
    MonthDay.of(Month.OCTOBER, 1),
    MonthDay.of(Month.DECEMBER, 15),
  )
  • 월의 일만 사용:
val exp2 = time.currentDate.day.between(1, 15)

같음

표현식 1이 표현식 2와 같으면 true로 평가됩니다.

예
표현식 1 표현식 2 결과
6 1 false
2 2 true

DSL 예시

washer.operationalState equals STOPPED

greaterThan

표현식 1이 표현식 2보다 크면 true로 평가됩니다.

예
표현식 1 표현식 2 결과
6 1 true
1 6 false

DSL 예시

( blindsPosition.currentPositionLift greaterThan 0u )

greaterThanOrEquals

표현식 1이 표현식 2보다 크거나 같으면 true로 평가됩니다.

예
표현식 1 표현식 2 결과
8 6 true
6 6 true
1 6 false

DSL 예시

( starterNode.measuredValue greaterThanOrEquals 50 )

lessThan

표현식 1이 표현식 2보다 작으면 true로 평가됩니다.

예
표현식 1 표현식 2 결과
6 1 false
1 6 true

DSL 예시

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

lessThanOrEquals

표현식 1이 표현식 2보다 작거나 같으면 true로 평가됩니다.

예
표현식 1 표현식 2 결과
8 6 false
6 6 true
1 6 true

DSL 예시

( starterNode.measuredValue lessThanOrEquals 25 )

notEquals

표현식 1이 표현식 2와 같지 않으면 true로 평가됩니다.

예
표현식 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))