Android DSL operatörü referansı

Operatörler, özellik özelliklerinin değerini belirli değerlere göre kontrol etmenize, bunları birbiriyle karşılaştırmanıza ve condition düğümlerinde kullanılan ifadeleri birleştirmenize olanak tanır.

Operatörler aşağıdaki import ifadeleriyle kullanılabilir:

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

Karşılaştırma operatörleri

arasında

İfade 1'in değeri, İfade 2 ile İfade 3'ün değeri arasında (bu değerler dahil) olduğunda true sonucunu verir. İfadeler, veri türlerine göre farklı şekilde sıralanır. Sayılar ve dizeler gibi basit veri türleri, Kotlin'deki gibi sıralanır.

Örnek
İfade 1 İfade 2 Expression 3 Sonuç
6 1 3 false
2 1 3 true

DSL örneği

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

between() ile tarihleri kullanma

between() operatörünü kullanırken bir tarih aralığı belirtebilirsiniz:

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

Ancak tam tarihlerle sınırlı değilsiniz. Otomasyon DSL'si, tarih aralığını çeşitli şekillerde ifade etmenize de olanak tanır:

  • Yalnızca yıl ve ay kullanma:
val exp2 =
  time.currentDate.yearMonth.between(
    YearMonth.of(2024, Month.OCTOBER),
    YearMonth.of(2026, Month.JANUARY),
  )
  • Yalnızca ay ve günü kullanarak:
val exp2 =
  time.currentDate.monthDay.between(
    MonthDay.of(Month.OCTOBER, 1),
    MonthDay.of(Month.DECEMBER, 15),
  )
  • Yalnızca ayın gününü kullanma:
val exp2 = time.currentDate.day.between(1, 15)

equals

İfade 1, İfade 2'ye eşit olduğunda true sonucunu verir.

Örnek
İfade 1 İfade 2 Sonuç
6 1 false
2 2 true

DSL örneği

washer.operationalState equals STOPPED

greaterThan

İfade 1, İfade 2'den büyük olduğunda true değerini döndürür.

Örnek
İfade 1 İfade 2 Sonuç
6 1 true
1 6 false

DSL örneği

( blindsPosition.currentPositionLift greaterThan 0u )

greaterThanOrEquals

İfade 1, İfade 2'den büyük veya ona eşit olduğunda true sonucunu verir.

Örnek
İfade 1 İfade 2 Sonuç
8 6 true
6 6 true
1 6 false

DSL örneği

( starterNode.measuredValue greaterThanOrEquals 50 )

lessThan

İfade 1, İfade 2'den küçük olduğunda true değerini verir.

Örnek
İfade 1 İfade 2 Sonuç
6 1 false
1 6 true

DSL örneği

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

lessThanOrEquals

İfade 1, İfade 2'den küçük veya ona eşit olduğunda true değerini verir.

Örnek
İfade 1 İfade 2 Sonuç
8 6 false
6 6 true
1 6 true

DSL örneği

( starterNode.measuredValue lessThanOrEquals 25 )

notEquals

İfade 1, İfade 2'ye eşit olmadığında true sonucunu verir.

Örnek
İfade 1 İfade 2 Sonuç
6 1 true
1 6 true
2 2 false

DSL örneği

occupancyStateChange.occupied notEquals 0

Aritmetik operatörler

Ekle

Toplama operatörü ( + ).

DSL örneği

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

Çıkarma

Çıkarma operatörü ( - ).

DSL örneği

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

Çarpma

Çarpma operatörü ( * ).

DSL örneği

val millis = seconds * 1000

Bölme

Bölme operatörü ( / ).

DSL örneği

val rpm = revolutions / minutes

Mantıksal operatörler

ve

İki ifadeyi mantıksal AND ifadesinde birleştirir. İki ifade de true olduğunda true değerini verir.

Örnek
İfade 1 İfade 2 Sonuç
false false false
true false false
false true false
true true true

DSL örneği

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

değil

Bir ifadenin mantıksal değerini olumsuzlar.

Örnek
İfade Sonuç
true false
false true

DSL örneği

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

veya

İki ifadeyi mantıksal BİLEŞİK VEYA ifadesinde birleştirir.

Örnek
İfade 1 İfade 2 Sonuç
false false false
true false true
false true true

DSL örneği

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