# String Functions

---

**String Functions (Dart)**  
- `length`: عدد الأحرف `myString.length`.  
- `isEmpty`/`isNotEmpty`: تحقق إذا السلسلة فاضية.  
- `toLowerCase()`/`toUpperCase()`: تحويل الأحرف.  
- `trim()`/`trimLeft()`/`trimRight()`: إزالة الفراغات من الأطراف.  
- `contains(pattern)`: يشيك إذا النص فيه substring أو RegExp.  
- `startsWith(prefix)`/`endsWith(suffix)`: للبحث عند البداية أو النهاية.  
- `substring(start, [end])`: يقتطع جزء من النص.  
- `split(pattern)`: يحول النص إلى `List<String>` بقطع.
- `replaceAll(from, to)`/`replaceFirst(from, to)`: يستبدل أجزاء من النص.  
- `indexOf(value)`/`lastIndexOf(value)`: يعطي موقع أول/آخر ظهور.  
- `padLeft(width, [padding])`/`padRight(width, [padding])`: يملّأ بالسلاسل.  
- `toString()`/`codeUnits`/`runes`: تحويل أو قراءة الـ Unicode.

- الكود اللي كتبته بيستخدم `indexOf('i')`, وهي عملية (method) على الـ `String` اللي بتبحث عن الحرف أو ال-substring وترجع أول موقع له (أو `-1` لو مش موجود).  
- في المثال `name = "Ali"`, الحرف `'i'` موجود في الموضع رقم `2` (بسبب zero-indexing)، فالناتج `2`.  
**`indexOf` Example**  
- In Dart `String`, `indexOf` finds the first occurrence index of a substring.  
- For `"hello"`, calling `indexOf('l')` returns `2` because indexes start at `0` (`h=0`, `e=1`, `l=2`).  
- If the character isn’t present, it returns `-1`.

**String Properties**

- كل `String` في Dart عنده خصائص (properties) قبل ما نطقّب عليه وظائف:  
  - `length`: يخبرك عدد الأحرف في النص.  
  - `isEmpty` / `isNotEmpty`: بيقولك إذا النص فاضي أو لا.  
  - `codeUnits` و `runes`: يعطيك قائمة القيم الرقمية للـ Unicode للنص.  
- الفارق بين property و function: property زي `title.length` ما بياخدش ()، بينما function زي `title.trim()` ممكن تعدّل النص أو يعيد نسخة.

لو عايز أشرح الفرق عمليًا ونعمل مثال يطبّق الخصائص دي، قولّي عايز إزاي؟

- صح، كل نوع بيانات في Dart (وكتير من اللغات) عنده خصائص (properties) خصوصًا الأنواع المركبة والنصوص، والخصائص دي بتديك معلومات عن القيمة بدون ما تنفّذ دالة.  
- مثال: `String` فيه `length`, `isEmpty`, `codeUnits`; `List` فيه `length`, `isEmpty`, `first`, `last`; `Map` فيه `keys`, `values`; حتى `int` له `bitLength`.  
- في Dart الخصائص تُستخدم بدون `()`, أما الدوال (functions/methods) بتجي بين قوسين.  
- لو عايز نعدّل أو نستعرض خصائص النوع اللي بتشتغل عليه، قولي النوع ونركّز على اللي محتاجه (مثلاً List أو custom class).