مرجع اپراتور اندروید 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

عملگرهای مقایسه‌ای

بین

وقتی مقدار عبارت ۱ بین مقدار عبارت ۲ و عبارت ۳ (شامل) باشد، مقدار true را برمی‌گرداند. عبارات بسته به نوع داده‌شان، رتبه‌بندی متفاوتی دارند. انواع داده‌های ساده مانند اعداد و رشته‌ها به همان روشی که در کاتلین رتبه‌بندی می‌شوند، رتبه‌بندی می‌شوند.

مثال
عبارت ۱ عبارت ۲ عبارت ۳ نتیجه
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)

برابر است

وقتی عبارت ۱ با عبارت ۲ برابر باشد، مقدار true را برمی‌گرداند.

مثال
عبارت ۱ عبارت ۲ نتیجه
6 1 false
2 2 true

مثال DSL

washer.operationalState equals STOPPED

بزرگتر از

وقتی عبارت ۱ بزرگتر از عبارت ۲ باشد، مقدار true را برمی‌گرداند.

مثال
عبارت ۱ عبارت ۲ نتیجه
6 1 true
1 6 false

مثال DSL

( blindsPosition.currentPositionLift greaterThan 0u )

بزرگتر یا مساوی

وقتی عبارت ۱ بزرگتر یا مساوی عبارت ۲ باشد، مقدار true را برمی‌گرداند.

مثال
عبارت ۱ عبارت ۲ نتیجه
8 6 true
6 6 true
1 6 false

مثال DSL

( starterNode.measuredValue greaterThanOrEquals 50 )

کمتر از

زمانی که عبارت ۱ کوچکتر از عبارت ۲ باشد، مقدار آن true ارزیابی می‌شود.

مثال
عبارت ۱ عبارت ۲ نتیجه
6 1 false
1 6 true

مثال DSL

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

کمتر یا مساوی

وقتی عبارت ۱ کوچکتر یا مساوی عبارت ۲ باشد، مقدار true را برمی‌گرداند.

مثال
عبارت ۱ عبارت ۲ نتیجه
8 6 false
6 6 true
1 6 true

مثال DSL

( starterNode.measuredValue lessThanOrEquals 25 )

نابرابرها

وقتی عبارت ۱ با عبارت ۲ برابر نباشد، مقدار true برمی‌گرداند.

مثال
عبارت ۱ عبارت ۲ نتیجه
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 است.

مثال
عبارت ۱ عبارت ۲ نتیجه
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 ترکیب می‌کند.

مثال
عبارت ۱ عبارت ۲ نتیجه
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))