هل Dart مناسبة لهياكل البيانات والخوارزميات؟
نعم. فهي لغة ذات أنواع وقائمة على الأصناف، قريبة في شكلها من Java أو C#، لذا فالصنف Node<T> الذي يحمل next قابلاً لأن يكون فارغاً هو بالضبط ما يبدو عليه، وdart:collection تغطي أكثر مما تغطيه معظم المكتبات القياسية. وهناك أمران يستحقان المعرفة: الـ SDK الأساسية لا تحتوي على طابور أولوية، وMap أو Set المكتوبة بصيغة حرفية (literal) هي LinkedHashMap أو LinkedHashSet، التي تتذكر ترتيب الإدراج: وهذا مفيد للمخرجات، لكنه ليس الوعد نفسه الذي تقدمه خريطة مرتبة (sorted map).
أي أصناف Dart تقابل أي هياكل بيانات؟
List مصفوفة ديناميكية ومكدسك؛ وMap وSet جداول تجزئة، مرتبة حسب الإدراج افتراضياً؛ وتضيف dart:collection الصنف Queue (وهو ListQueue، أي مخزن مؤقت حلقي، ما لم تختر DoubleLinkedQueue)، وLinkedList للمُدخلات التي ترث LinkedListEntry، وSplayTreeMap وSplayTreeSet، وهي أشجار مرتبة ذاتية التعديل. وللكومة، توفر package:collection التابعة لفريق Dart الصنف PriorityQueue. أما أشجار البادئات والرسوم البيانية فتكتبها بنفسك.
هل في Dart طابور أولوية؟
ليس في الـ SDK الأساسية. تتوقف dart:collection عند الطوابير والقوائم المترابطة وأشجار splay، أما PriorityQueue فموجودة في package:collection، وهي حزمة يصونها فريق Dart لكنك تضيفها بنفسك. وهذا يجعل الكومة شيئاً من المعقول أن تطلب منك مقابلة Dart كتابته، وفي الخطوة الثانية تكتب واحدة.
ما شجرة splay، ومتى ينبغي أن أستخدم SplayTreeMap؟
شجرة splay شجرة بحث ثنائية ذاتية التعديل: كل وصول ينقل العقدة التي لمسها إلى الجذر، فيسهل الوصول مجدداً إلى المفاتيح المستخدمة مؤخراً، وتكلّف العمليات O(log n) بتكلفة مُطفأة (amortized)، لا مضمونة في كل استدعاء منفرد. استخدم SplayTreeMap حين تحتاج إلى المفاتيح مرتبة، أو إلى أصغر مفتاح أو أكبره، أو إلى أقرب مفتاح على أي من جانبي قيمة ما، عبر firstKeyAfter وlastKeyBefore. أما شجرة AVL التي تبنيها في الخطوة الثانية فتسلك النهج الآخر، إذ تعيد التوازن عند كل تغيير لتُبقي ارتفاعها محدوداً بصرامة.
ما الدورات في هذا المسار التي لا تُدرَّس بلغة Dart؟
ثلاث دورات. البرمجة الديناميكية وسلسلة مقابلات Python تُدرَّسان بلغة Python، وعمليات البتات بلغة C++. وتجدها مُدرجة بعد الخطوات، ولكل منها رابط يفتحها بلغتها. جدول النتائج المحفوظة في Dart يكون List أو Map، وtoRadixString(2) تطبع int بالنظام الثنائي، وهي أسرع طريقة لتتحقق مما يحمله القناع فعلاً.
هل أحتاج إلى معرفة Dart قبل بدء هذا المسار؟
الأصناف والأنواع العامة والقوائم والخرائط (maps) وأمان القيم الفارغة على الأقل. إن كانت هذه جديدة عليك، فدورة Dart من Coddy توصلك إلى ذلك أولاً مجاناً، ويبدأ هذا المسار من حيث تنتهي.