# property

---

- صح، كل نوع بيانات في Dart (وكتير من اللغات) عنده خصائص (properties) خصوصًا الأنواع المركبة والنصوص، والخصائص دي بتديك معلومات عن القيمة بدون ما تنفّذ دالة.  
- مثال: `String` فيه `length`, `isEmpty`, `codeUnits`; `List` فيه `length`, `isEmpty`, `first`, `last`; `Map` فيه `keys`, `values`; حتى `int` له `bitLength`.  
- في Dart الخصائص تُستخدم بدون `()`, أما الدوال (functions/methods) بتجي بين قوسين.  
- لو عايز نعدّل أو نستعرض خصائص النوع اللي بتشتغل عليه، قولي النوع ونركّز على اللي محتاجه (مثلاً List أو custom class).

[[String Functions]]

**String Properties**

- `length`: number of characters.
- `isEmpty` / `isNotEmpty`: whether the string has no text.
- `codeUnits`: list of UTF-16 code units.  
- `runes`: Unicode code points (good for emojis/Arabic).  
- `hashCode`: machine value for hashing.  
- `runtimeType`: shows the type (`String`).

These are accessed without `()`. Use them when you just need info, not to modify the string.

**length vs index**

- In a Dart `String`, `length` returns how many characters it holds.  
- Since indexing starts at `0`, the highest valid index is always `length - 1`.  
- So when you take any `index` and add `1`, you get the position count from `1` (which matches `length` when you reach the last character).  
- Example: `"Dart"` has `length == 4`, indexes `0..3`, and `index + 1` turns `3` into `4`.

[[Zero‑Indexing System]]