האם Dart טובה למבני נתונים ואלגוריתמים?
כן. היא שפה עם טיפוסים ומבוססת מחלקות, קרובה בצורתה ל־Java או ל־C#, כך שמחלקת Node<T> עם next שיכול להיות null היא בדיוק מה שהיא נראית, ו־dart:collection מכסה יותר מרוב הספריות הסטנדרטיות. כדאי לדעת שני דברים: ב־SDK הליבה אין תור עדיפויות, וליטרל של Map או Set הוא LinkedHashMap או LinkedHashSet, שזוכר את סדר ההכנסה: נוח לפלט, אבל לא אותה הבטחה כמו מפה ממוינת.
איזו מחלקה של Dart מתאימה לאיזה מבנה נתונים?
List הוא מערך דינמי והמחסנית שלכם; Map ו־Set הם טבלאות גיבוב, שמסודרות לפי סדר ההכנסה כברירת מחדל; dart:collection מוסיפה את Queue (ListQueue, מאגר מעגלי, אלא אם בוחרים DoubleLinkedQueue), את LinkedList לרשומות שיורשות מ־LinkedListEntry, ואת SplayTreeMap ו־SplayTreeSet, עצים מסודרים שמתאימים את עצמם. לערימה, package:collection של צוות Dart מספקת את PriorityQueue. עצי trie וגרפים כותבים בעצמכם.
האם יש ב־Dart תור עדיפויות?
לא ב־SDK הליבה. dart:collection נעצרת בתורים, ברשימות מקושרות ובעצי splay, ו־PriorityQueue נמצאת ב־package:collection, חבילה שצוות Dart מתחזק אבל אתם מוסיפים בעצמכם. זה הופך ערימה לשאלה הוגנת בראיון Dart, ובשלב השני אתם כותבים אחת.
מה זה עץ splay, ומתי כדאי להשתמש ב־SplayTreeMap?
עץ splay הוא עץ חיפוש בינארי שמתאים את עצמו: כל גישה מזיזה את הצומת שבו נגעה לשורש, כך שמפתחות שהשתמשתם בהם לאחרונה מהירים להשגה שוב, והפעולות עולות O(log n) בממוצע לאורך זמן, בלי הבטחה לכל קריאה בודדת. השתמשו ב־SplayTreeMap כשאתם צריכים מפתחות בסדר ממוין, את המפתח הקטן או הגדול ביותר, או את המפתח הקרוב ביותר מכל צד של ערך, דרך firstKeyAfter ו־lastKeyBefore. עץ ה־AVL שאתם בונים בשלב השני נוקט בגישה ההפוכה, ומאזן את עצמו בכל שינוי כדי לשמור על גובה חסום בקפידה.
אילו קורסים במסלול הזה לא נלמדים ב־Dart?
שלושה: תכנות דינמי וסדרת הראיונות של Python, שנלמדים ב־Python, ומניפולציית ביטים, שנלמדת ב־C++. הם מופיעים אחרי השלבים, כל אחד עם קישור שפותח אותו בשפה שלו. memo ב־Dart הוא List או Map, ו־toRadixString(2) מדפיס int בבינארי, הדרך המהירה ביותר לבדוק מה מסכה מכילה באמת.
האם צריך לדעת Dart לפני שמתחילים את המסלול?
מחלקות, גנריות, רשימות, מפות ו־null safety, לכל הפחות. אם הם חדשים לכם, קורס Dart של Coddy מביא אתכם לשם קודם, בחינם, והמסלול הזה ממשיך מהמקום שבו הוא מסתיים.