Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

الحزم، والـ Crates، والوحدات (Packages, Crates, and Modules)

بينما تكتب برامج كبيرة، سيصبح تنظيم الكود الخاص بك مهماً بشكل متزايد. من خلال تجميع الوظائف ذات الصلة وفصل الكود ذو الميزات المتميزة، ستوضح مكان العثور على الكود الذي ينفذ ميزة معينة ومكان الذهاب لتغيير كيفية عمل الميزة.

البرامج التي كتبناها حتى الآن كانت في “وحدة” (Module) واحدة في ملف واحد. مع نمو المشروع، يجب عليك تنظيم الكود عن طريق تقسيمه إلى عدة Modules ثم إلى عدة ملفات. يمكن أن تحتوي “الحزمة” (Package) على عدة “صناديق ثنائية” (Binary Crates) واختيارياً “صندوق مكتبة” (Library Crate) واحد. مع نمو الـ Package، يمكنك استخراج أجزاء في Crates منفصلة تصبح تبعيات خارجية. يغطي هذا الفصل كل هذه التقنيات. بالنسبة للمشاريع الكبيرة جداً التي تتكون من مجموعة من الـ Packages المترابطة التي تتطور معاً، يوفر Cargo “مساحات عمل” (Workspaces)، والتي سنغطيها في قسم “مساحات عمل Cargo” في الفصل 14.

سنناقش أيضاً تغليف تفاصيل التنفيذ، مما يتيح لك إعادة استخدام الكود على مستوى أعلى: بمجرد تنفيذ عملية ما، يمكن للكود الآخر استدعاء الكود الخاص بك عبر واجهته العامة دون الحاجة إلى معرفة كيفية عمل التنفيذ. تحدد الطريقة التي تكتب بها الكود الأجزاء العامة ليستخدمها الكود الآخر والأجزاء التي تعد تفاصيل تنفيذ خاصة تحتفظ بالحق في تغييرها. هذه طريقة أخرى للحد من كمية التفاصيل التي يجب أن تبقيها في ذهنك.

المفهوم ذو الصلة هو “النطاق” (Scope): السياق المتداخل الذي يتم فيه كتابة الكود يحتوي على مجموعة من الأسماء المعرفة على أنها “داخل النطاق” (In Scope). عند قراءة الكود وكتابته وتجميعه، يحتاج المبرمجون والمترجمون (Compilers) إلى معرفة ما إذا كان اسم معين في بقعة معينة يشير إلى متغير، أو دالة، أو هيكل (Struct)، أو تعداد (Enum)، أو Module، أو ثابت، أو عنصر آخر وماذا يعني ذلك العنصر. يمكنك إنشاء Scopes وتغيير الأسماء الموجودة داخل الـ Scope أو خارجه. لا يمكنك الحصول على عنصرين بنفس الاسم في نفس الـ Scope؛ تتوفر أدوات لحل تعارض الأسماء.

تمتلك Rust عدداً من الميزات التي تتيح لك إدارة تنظيم الكود الخاص بك، بما في ذلك التفاصيل التي يتم كشفها، والتفاصيل الخاصة، والأسماء الموجودة في كل Scope في برامجك. هذه الميزات، التي يشار إليها أحياناً مجتمعة باسم “نظام الوحدات” (Module System)، تشمل:

  • الحزم (Packages): ميزة في Cargo تتيح لك بناء واختبار ومشاركة الـ Crates.
  • الصناديق (Crates): شجرة من الـ Modules تنتج مكتبة أو ملفاً قابلاً للتنفيذ.
  • الوحدات و use (Modules and use): تتيح لك التحكم في التنظيم، والـ Scope، وخصوصية المسارات.
  • المسارات (Paths): طريقة لتسمية عنصر، مثل Struct، أو دالة، أو Module.

في هذا الفصل، سنغطي كل هذه الميزات، ونناقش كيفية تفاعلها، ونشرح كيفية استخدامها لإدارة الـ Scope. بنهاية الفصل، يجب أن يكون لديك فهم قوي للـ Module System وأن تكون قادراً على التعامل مع الـ Scopes كالمحترفين!