مرجع مشغّل DSL في Android

تتيح لك عوامل التشغيل التحقّق من قيمة سمات السمة مقارنةً بقيم معيّنة، ومقارنتها ببعضها البعض، ودمج التعبيرات المستخدَمة في عُقد 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 عندما تكون قيمة "التعبير 1" بين قيمة "التعبير 2" و"التعبير 3" (شاملةً القيمتَين). يتم ترتيب التعبيرات بشكل مختلف استنادًا إلى نوع بياناتها. يتم ترتيب أنواع البيانات البسيطة، مثل الأرقام والسلاسل، بالطريقة نفسها في لغة 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)

يساوي

يتم تقييم التعبير على أنّه true عندما يكون "التعبير 1" مساويًا لـ "التعبير 2".

مثال
التعبير 1 التعبير 2 النتيجة
6 1 false
2 2 true

مثال على DSL

washer.operationalState equals STOPPED

greaterThan

يتم تقييم التعبير على أنّه true عندما يكون "التعبير 1" أكبر من "التعبير 2".

مثال
التعبير 1 التعبير 2 النتيجة
6 1 true
1 6 false

مثال على DSL

( blindsPosition.currentPositionLift greaterThan 0u )

greaterThanOrEquals

يتم تقييم التعبير على أنّه true عندما يكون "التعبير 1" أكبر من "التعبير 2" أو يساويه.

مثال
التعبير 1 التعبير 2 النتيجة
8 6 true
6 6 true
1 6 false

مثال على DSL

( starterNode.measuredValue greaterThanOrEquals 50 )

lessThan

يتم تقييم التعبير على أنّه true عندما يكون "التعبير 1" أقل من "التعبير 2".

مثال
التعبير 1 التعبير 2 النتيجة
6 1 false
1 6 true

مثال على DSL

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

lessThanOrEquals

يتم تقييم التعبير على أنّه true عندما يكون "التعبير 1" أقل من "التعبير 2" أو يساويه.

مثال
التعبير 1 التعبير 2 النتيجة
8 6 false
6 6 true
1 6 true

مثال على DSL

( starterNode.measuredValue lessThanOrEquals 25 )

notEquals

يتم تقييم التعبير على أنّه true عندما لا يكون "التعبير 1" مساويًا لـ "التعبير 2".

مثال
التعبير 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))