Referência do operador de DSL do Android

Os operadores permitem verificar o valor dos atributos de traço em relação a valores específicos, comparar um com o outro e combinar expressões usadas em nós condition.

Os operadores são disponibilizados pelas seguintes instruções 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

Operadores de comparação

entre

Avalia para true quando o valor da Expressão 1 está entre o da Expressão 2 e a Expressão 3 (inclusive). As expressões são classificadas de maneira diferente, dependendo do tipo de dados. Os tipos de dados simples, como números e strings, são classificados da mesma forma que no Kotlin.

Exemplo
Expressão 1 Expressão 2 Expressão 3 Resultado
6 1 3 false
2 1 3 true

Exemplo de DSL

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

Usar datas com between()

Ao usar o operador between(), é possível especificar um intervalo de datas:

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

No entanto, você não está limitado a datas completas. O Automation DSL também permite expressar um intervalo de datas de várias maneiras:

  • Usando apenas ano e mês:
val exp2 =
  time.currentDate.yearMonth.between(
    YearMonth.of(2024, Month.OCTOBER),
    YearMonth.of(2026, Month.JANUARY),
  )
  • Usando apenas mês e dia:
val exp2 =
  time.currentDate.monthDay.between(
    MonthDay.of(Month.OCTOBER, 1),
    MonthDay.of(Month.DECEMBER, 15),
  )
  • Usando apenas o dia do mês:
val exp2 = time.currentDate.day.between(1, 15)

igual a

Ele muda para true quando a Expressão 1 é igual à Expressão 2.

Exemplo
Expressão 1 Expressão 2 Resultado
6 1 false
2 2 true

Exemplo de DSL

washer.operationalState equals STOPPED

greaterThan

Será avaliado como true quando a Expressão 1 for maior que a Expressão 2.

Exemplo
Expressão 1 Expressão 2 Resultado
6 1 true
1 6 false

Exemplo de DSL

( blindsPosition.currentPositionLift greaterThan 0u )

greaterThanOrEquals

Avalia como true quando a Expressão 1 é maior ou igual à Expressão 2.

Exemplo
Expressão 1 Expressão 2 Resultado
8 6 true
6 6 true
1 6 false

Exemplo de DSL

( starterNode.measuredValue greaterThanOrEquals 50 )

lessThan

avalia como true quando a Expressão 1 é menor que a Expressão 2.

Exemplo
Expressão 1 Expressão 2 Resultado
6 1 false
1 6 true

Exemplo de DSL

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

lessThanOrEquals

Avalia como true quando a Expressão 1 é menor ou igual à Expressão 2.

Exemplo
Expressão 1 Expressão 2 Resultado
8 6 false
6 6 true
1 6 true

Exemplo de DSL

( starterNode.measuredValue lessThanOrEquals 25 )

notEquals

Ele muda para true quando a Expressão 1 não é igual à Expressão 2.

Exemplo
Expressão 1 Expressão 2 Resultado
6 1 true
1 6 true
2 2 false

Exemplo de DSL

occupancyStateChange.occupied notEquals 0

Operadores aritméticos

Adicionar

O operador de adição ( +).

Exemplo de DSL

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

Subtração

O operador de subtração ( -).

Exemplo de DSL

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

Multiplicar

O operador de multiplicação ( *).

Exemplo de DSL

val millis = seconds * 1000

Dividir

O operador de divisão ( /).

Exemplo de DSL

val rpm = revolutions / minutes

Operadores lógicos

e

Combina duas expressões em uma expressão lógica AND, avaliando true quando ambas as expressões são true.

Exemplo
Expressão 1 Expressão 2 Resultado
false false false
true false false
false true false
true true true

Exemplo de DSL

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

não

Nega o valor lógico de uma expressão.

Exemplo
Expressão Resultado
true false
false true

Exemplo de DSL

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

ou

Combina duas expressões em uma expressão lógica OR.

Exemplo
Expressão 1 Expressão 2 Resultado
false false false
true false true
false true true

Exemplo de DSL

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