> ## Documentation Index
> Fetch the complete documentation index at: https://docs.kayanos.com/llms.txt
> Use this file to discover all available pages before exploring further.

# دوال المقارنة والشروط

> جميع دوال المقارنة والشروط المسجلة، مع التواقيع والأمثلة للقواعد والرؤية والقرارات المحسوبة.

## متى تستخدم هذه الدوال؟

فضّل شرطاً قصيراً وصريحاً على تعبير متداخل طويل. قيّم القيم الفارغة وnull بوضوح قبل استخدام النتيجة لتغيير حالة أو قرار توجيه أو مخرج عام.

## طريقة الكتابة

استخدم الدالة بصيغة `between($.requested_amount, 1000, 10000)`. لا تكون كل دالة متاحة في كل مكان: دوال التحقق ودوال النموذج ودوال قالب المستند لها عقود سياق مختلفة. لا تفترض أن اقتراح المحرر يعني أن الدالة مدعومة وقت التشغيل.

## مرجع الدوال الكامل

### `andFn`

تجمع نتيجتين بمنطق «و» وتعيد قيمة منطقية.

**التوقيع:** `andFn(left, right)`

**مثال:**

```txt theme={null}
andFn(true, true) // true
```

**ملاحظة:** يمكن أيضاً كتابتها كتحويل عندما تكون القيمة الأولى هي المدخل: `value | andFn(...)`.

### `between`

تتحقق من وقوع قيمة رقمية أو قابلة للمقارنة ضمن حدين شاملين. هذه هي الدالة الفعالة بعد حل تعارض التسجيل.

**التوقيع:** `between(value, minimum, maximum)`

**مثال:**

```txt theme={null}
between($.requested_amount, 1000, 10000)
```

**التوافر:** دالة عامة in shared builder and document-template runtimes; function and transform forms are available.

**ملاحظة:** يمكن أيضاً كتابتها كتحويل عندما تكون القيمة الأولى هي المدخل: `value | between(...)`.

### `coalesce`

تعيد أول قيمة ليست `null` من القيم المعطاة.

**التوقيع:** `coalesce(first, fallback)`

**مثال:**

```txt theme={null}
coalesce(null, "Unassigned") // "Unassigned"
```

**ملاحظة:** يمكن أيضاً كتابتها كتحويل عندما تكون القيمة الأولى هي المدخل: `value | coalesce(...)`.

### `defaultTo`

تعيد أول قيمة ليست `null` أو `undefined`؛ لا تستبدل النص الفارغ.

**التوقيع:** `defaultTo(...values)`

**مثال:**

```txt theme={null}
defaultTo(null, undefined, "Not provided") // "Not provided"
```

**ملاحظة:** يمكن أيضاً كتابتها كتحويل عندما تكون القيمة الأولى هي المدخل: `value | defaultTo(...)`.

### `eq`

تقارن قيمتين بمساواة غير صارمة تسمح بتحويل النوع.

**التوقيع:** `eq(left, right)`

**مثال:**

```txt theme={null}
eq("4", 4) // true
```

**ملاحظة:** يمكن أيضاً كتابتها كتحويل عندما تكون القيمة الأولى هي المدخل: `value | eq(...)`.

### `equalsAll`

تتحقق من أن كل المرشحين متساوون مع القيمة المرجعية.

**التوقيع:** `equalsAll(value, ...candidates)`

**مثال:**

```txt theme={null}
equalsAll("open", "open", "open") // true
```

**ملاحظة:** يمكن أيضاً كتابتها كتحويل عندما تكون القيمة الأولى هي المدخل: `value | equalsAll(...)`.

### `equalsAny`

تتحقق من تطابق القيمة المرجعية مع أي مرشح معطى.

**التوقيع:** `equalsAny(value, ...candidates)`

**مثال:**

```txt theme={null}
equalsAny("high", "low", "high") // true
```

**ملاحظة:** يمكن أيضاً كتابتها كتحويل عندما تكون القيمة الأولى هي المدخل: `value | equalsAny(...)`.

### `gt`

تتحقق من أن القيمة الأولى أكبر من الثانية.

**التوقيع:** `gt(left, right)`

**مثال:**

```txt theme={null}
gt(8, 5) // true
```

**ملاحظة:** يمكن أيضاً كتابتها كتحويل عندما تكون القيمة الأولى هي المدخل: `value | gt(...)`.

### `gte`

تتحقق من أن القيمة الأولى أكبر من الثانية أو مساوية لها.

**التوقيع:** `gte(left, right)`

**مثال:**

```txt theme={null}
gte(8, 8) // true
```

**ملاحظة:** يمكن أيضاً كتابتها كتحويل عندما تكون القيمة الأولى هي المدخل: `value | gte(...)`.

### `hasProperty`

تتحقق من وجود خاصية مسماة في كائن.

**التوقيع:** `hasProperty(value, property)`

**مثال:**

```txt theme={null}
hasProperty({ owner: "A" }, "owner") // true
```

**ملاحظة:** يمكن أيضاً كتابتها كتحويل عندما تكون القيمة الأولى هي المدخل: `value | hasProperty(...)`.

### `ifElse`

تعيد إحدى قيمتين وفق نتيجة شرط.

**التوقيع:** `ifElse(condition, whenTrue, whenFalse)`

**مثال:**

```txt theme={null}
ifElse(true, "open", "closed") // "open"
```

**ملاحظة:** يمكن أيضاً كتابتها كتحويل عندما تكون القيمة الأولى هي المدخل: `value | ifElse(...)`.

### `inOp`

تتحقق من وجود قيمة ضمن نص أو قائمة.

**التوقيع:** `inOp(value, collection)`

**مثال:**

```txt theme={null}
inOp("approved", ["draft", "approved"]) // true
```

**ملاحظة:** يمكن أيضاً كتابتها كتحويل عندما تكون القيمة الأولى هي المدخل: `value | inOp(...)`.

### `inRange`

تتحقق من وقوع قيمة ضمن واحد أو أكثر من النطاقات الشاملة `[minimum, maximum]`.

**التوقيع:** `inRange(value, ...ranges)`

**مثال:**

```txt theme={null}
inRange(25, [0, 100]) // true
```

**ملاحظة:** يمكن أيضاً كتابتها كتحويل عندما تكون القيمة الأولى هي المدخل: `value | inRange(...)`.

### `instanceOf`

تتحقق من كون قيمة مثيلاً لمنشئ يزوده سياق التقييم صراحةً.

**التوقيع:** `instanceOf(value, constructor)`

**مثال:**

```txt theme={null}
instanceOf($.issued_at, Date) // only where Date is explicitly supplied
```

**ملاحظة:** يمكن أيضاً كتابتها كتحويل عندما تكون القيمة الأولى هي المدخل: `value | instanceOf(...)`.

### `isNotNull`

تتحقق من وجود قيمة وعدم كونها `null` أو `undefined`.

**التوقيع:** `isNotNull(value)`

**مثال:**

```txt theme={null}
isNotNull("assigned") // true
```

**ملاحظة:** يمكن أيضاً كتابتها كتحويل عندما تكون القيمة الأولى هي المدخل: `value | isNotNull(...)`.

### `isNull`

تتحقق من كون القيمة `null` أو `undefined`.

**التوقيع:** `isNull(value)`

**مثال:**

```txt theme={null}
isNull(null) // true
```

**ملاحظة:** يمكن أيضاً كتابتها كتحويل عندما تكون القيمة الأولى هي المدخل: `value | isNull(...)`.

### `isType`

تتحقق من نوع JavaScript للقيمة بالاسم المعطى.

**التوقيع:** `isType(value, type)`

**مثال:**

```txt theme={null}
isType("open", "string") // true
```

**ملاحظة:** يمكن أيضاً كتابتها كتحويل عندما تكون القيمة الأولى هي المدخل: `value | isType(...)`.

### `like`

يطابق النص مع نمط يستخدم `%` كحرف بدل، دون حساسية لحالة الأحرف.

**التوقيع:** `like(value, pattern)`

**مثال:**

```txt theme={null}
like("Service request", "Service%") // true
```

**ملاحظة:** يمكن أيضاً كتابتها كتحويل عندما تكون القيمة الأولى هي المدخل: `value | like(...)`.

### `lt`

تتحقق من أن القيمة الأولى أصغر من الثانية.

**التوقيع:** `lt(left, right)`

**مثال:**

```txt theme={null}
lt(5, 8) // true
```

**ملاحظة:** يمكن أيضاً كتابتها كتحويل عندما تكون القيمة الأولى هي المدخل: `value | lt(...)`.

### `lte`

تتحقق من أن القيمة الأولى أصغر من الثانية أو مساوية لها.

**التوقيع:** `lte(left, right)`

**مثال:**

```txt theme={null}
lte(5, 5) // true
```

**ملاحظة:** يمكن أيضاً كتابتها كتحويل عندما تكون القيمة الأولى هي المدخل: `value | lte(...)`.

### `ne`

تتحقق من عدم مساواة قيمتين بمقارنة غير صارمة.

**التوقيع:** `ne(left, right)`

**مثال:**

```txt theme={null}
ne("4", 4) // false
```

**ملاحظة:** يمكن أيضاً كتابتها كتحويل عندما تكون القيمة الأولى هي المدخل: `value | ne(...)`.

### `not`

تعكس القيمة الصادقة أو الكاذبة بمنطق النفي.

**التوقيع:** `not(value)`

**مثال:**

```txt theme={null}
not(true) // false
```

**ملاحظة:** يمكن أيضاً كتابتها كتحويل عندما تكون القيمة الأولى هي المدخل: `value | not(...)`.

### `notEqualsAny`

تتحقق من اختلاف القيمة المرجعية عن كل المرشحين المعطاة.

**التوقيع:** `notEqualsAny(value, ...candidates)`

**مثال:**

```txt theme={null}
notEqualsAny("closed", "draft", "open") // true
```

**ملاحظة:** يمكن أيضاً كتابتها كتحويل عندما تكون القيمة الأولى هي المدخل: `value | notEqualsAny(...)`.

### `notIn`

تتحقق من عدم وجود القيمة ضمن نص أو قائمة.

**التوقيع:** `notIn(value, collection)`

**مثال:**

```txt theme={null}
notIn("closed", ["draft", "approved"]) // true
```

**ملاحظة:** يمكن أيضاً كتابتها كتحويل عندما تكون القيمة الأولى هي المدخل: `value | notIn(...)`.

### `notLike`

تتحقق من عدم مطابقة النص لنمط `%` دون حساسية لحالة الأحرف.

**التوقيع:** `notLike(value, pattern)`

**مثال:**

```txt theme={null}
notLike("Service request", "Permit%") // true
```

**ملاحظة:** يمكن أيضاً كتابتها كتحويل عندما تكون القيمة الأولى هي المدخل: `value | notLike(...)`.

### `orFn`

تجمع نتيجتين بمنطق «أو» وتعيد قيمة منطقية.

**التوقيع:** `orFn(left, right)`

**مثال:**

```txt theme={null}
orFn(false, true) // true
```

**ملاحظة:** يمكن أيضاً كتابتها كتحويل عندما تكون القيمة الأولى هي المدخل: `value | orFn(...)`.

### `regex`

يطابق نصاً مع تعبير نمطي ويمكنه استقبال أعلام التعبير.

**التوقيع:** `regex(value, pattern, flags)`

**مثال:**

```txt theme={null}
regex("REQ-104", "^REQ-[0-9]+$") // true
```

**ملاحظة:** يمكن أيضاً كتابتها كتحويل عندما تكون القيمة الأولى هي المدخل: `value | regex(...)`.

### `safeGet`

يقرأ خاصية متداخلة دون رمي خطأ عند غياب قيمة في المسار.

**التوقيع:** `safeGet(value, path)`

**مثال:**

```txt theme={null}
safeGet({ owner: { name: "A" } }, "owner.name") // "A"
```

**ملاحظة:** يمكن أيضاً كتابتها كتحويل عندما تكون القيمة الأولى هي المدخل: `value | safeGet(...)`.

### `strictEq`

تقارن قيمتين بمساواة صارمة دون تحويل النوع.

**التوقيع:** `strictEq(left, right)`

**مثال:**

```txt theme={null}
strictEq("4", 4) // false
```

**ملاحظة:** يمكن أيضاً كتابتها كتحويل عندما تكون القيمة الأولى هي المدخل: `value | strictEq(...)`.

### `strictNe`

تتحقق من عدم مساواة قيمتين بمقارنة صارمة دون تحويل النوع.

**التوقيع:** `strictNe(left, right)`

**مثال:**

```txt theme={null}
strictNe("4", 4) // true
```

**ملاحظة:** يمكن أيضاً كتابتها كتحويل عندما تكون القيمة الأولى هي المدخل: `value | strictNe(...)`.

### `xorFn`

تعيد `true` عندما تكون واحدة فقط من القيمتين صادقة.

**التوقيع:** `xorFn(left, right)`

**مثال:**

```txt theme={null}
xorFn(true, false) // true
```

**ملاحظة:** يمكن أيضاً كتابتها كتحويل عندما تكون القيمة الأولى هي المدخل: `value | xorFn(...)`.

## قائمة تحقق قبل النشر

* ابدأ بقيمة معروفة وتحقق من النتيجة المتوقعة.
* تعامل صراحةً مع القيم الفارغة وnull والقوائم الفارغة.
* لا تضع أسراراً أو رموز وصول أو بيانات شخصية حساسة داخل تعبير.
* راجع [سياقات وتوافر التعبيرات](/ar/reference/expressions/contexts) قبل نسخ تعبير بين ميزتين.

![دوال المقارنة والشروط في KayanOS](https://kayanos.app/docs-images/ar/reference/expressions-helpers-operators.png)
