Zero‑Indexing System

  • Most programming languages (including Dart) start counting positions from 0.
  • That means the first character of "hello" is at index 0, the second at 1, etc.; so index + 1 gives you the human-friendly position.
  • Because of zero indexing, the last index is always length - 1. For "hello" (length == 5), valid indexes are 0 through 4.
  • When you iterate over a string or list, use for (var i = 0; i < myString.length; i++) so you don’t go past the last element.
dart
void main() {
  String name = "Ali";
  print(name[2]); // prints 'i'
}
  • name[2] مش property، ده أسلوب للوصول (access) لحرف داخل الـ String باستخدام index operator (مِش property).
  • String في Dart فيها properties زي length, isEmpty, runtimeType; أما name[2] فهو index access ياخد الحرف اللي على الموقع رقم 2.
  • تقدر تعتبره شغلة من نوع “operator” مش property، لأنك بتستخدم الأقواس [] مع رقم.

لو حابب أشرح الفرق بالإنجليزي أو أديك ملخص بـ bullet عن properties vs indexing، قولي.

Operation (عملية)

Operation (عملية)

  • عملية هي أي تعبير يمثّل شي بتعمله على قيمة: جمع (+)، مقارنة (==)، الوصول عبر الفهرس (name[2])، أو استدعاء وظيفة (trim()).
  • بالنسبة لـ String في Dart:
    • name.length → property (يعطي عدد الأحرف).
    • name[2] → عملية index operator: بتشتغل على السلسلة وتُرجع الحرف عند الموقع رقم 2.
    • name + "!" → عملية جمع (concatenation) تنتج سلسلة جديدة.
    • name.contains("Ali") → عملية تحقق (method call) ترجع bool.
  • العمليات ممكن تكون من النوع operator (زي [], +, ==) أو method (زي toUpperCase())، والفرق إن الـ operator بيشتغل مباشرة على القيمة بدون اسم وظيفة، بينما الـ method هي دالة.

أمثلة بسيطة تبين الفرق إذا حابب؟