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),
  )

하지만 전체 날짜로 제한되지는 않습니다. 또한 자동화 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))