مقدمة: لماذا التوثيق هو مفتاح نجاح مشروع Kotlin؟
في عالم التطوير الحديث بلغة Kotlin، كتابة كود نظيف وفعال ليست سوى نصف المهمة. النصف الثاني، الذي لا يقل أهمية، هو إنشاء توثيق عالي الجودة. المشروع الموثق جيدًا ليس مجرد مجموعة من التعليقات. إنه استثمار في المستقبل: فهو يبسط عملية دمج المطورين الجدد، ويسرّع عملية التصحيح، ويسهّل صيانة قاعدة الكود، ويجعل واجهة API الخاصة بك مفهومة للآخرين. بدون توثيق، حتى أكثر الأكواد عبقرية تخاطر بأن تتحول إلى "صندوق أسود" لا يرغب أحد في لمسه.
في هذه المقالة، سنستعرض العملية الكاملة لكتابة التوثيق لمشاريع Kotlin - من أساسيات بناء جملة KDoc إلى التوليد التلقائي لمواقع جميلة باستخدام Dokka. ستتعلم كيف تجعل التوثيق ليس مفيدًا فحسب، بل وقابلاً للقراءة أيضًا، وستتعرف على أفضل الممارسات التي ستساعدك في الحفاظ على تحديثه.
1. أساسيات KDoc: كيفية كتابة التعليقات في Kotlin
KDoc هي لغة الترميز القياسية لتوثيق كود Kotlin، وهي تشبه إلى حد كبير JavaDoc. تبدأ تعليقات KDoc بـ /** وتنتهي بـ */. في الداخل، يتم استخدام ترميز خاص يسمح بوصف المعاملات والقيم المُرجعة والاستثناءات.
1.1. الهيكل الأساسي لتعليق KDoc
الوسوم الأساسية التي ستستخدمها غالبًا:
@param— يصف معامل دالة أو كلاس.@return— يصف القيمة المُرجعة.@throwsأو@exception— يصف الاستثناءات التي قد تطرحها الدالة.@see— رابط لعنصر كود آخر.@sample— رابط لمثال استخدام.
1.2. مثال لدالة
لننظر إلى دالة بسيطة تحسب المتوسط الحسابي:
/** * يحسب المتوسط الحسابي لعددين. * * تأخذ هذه الدالة عددين صحيحين وتعيد قيمتهما المتوسطة * كرقم عائم. إذا كان كلا الرقمين صفرًا، فإن الدالة * ستعيد 0.0. * * @param a الرقم الصحيح الأول. * @param b الرقم الصحيح الثاني. * @return المتوسط الحسابي للعددين a و b. * @throws IllegalArgumentException إذا كانت كلا المعاملتين صفرًا (اختياري، للمثال). * @see Math#sqrt * @sample com.example.calculator.averageSample */fun average(a: Int, b: Int): Double { if (a == 0 && b == 0) { throw IllegalArgumentException("لا يمكن أن يكون كلا الرقمين صفرًا") } return (a + b) / 2.0}1.3. توثيق الكلاسات والخصائص
يجب توثيق ليس فقط الدوال، بل أيضًا الكلاسات والواجهات وخصائصها. يساعد هذا في فهم الغرض من الوحدة بسرعة.
/** * مستودع للعمل مع المستخدمين. * * يغلف هذا الكلاس منطق الوصول إلى بيانات المستخدمين، * بما في ذلك عمليات البحث والحفظ والحذف. * * @property databaseSource مصدر بيانات قاعدة البيانات. * @property cacheSource مصدر بيانات ذاكرة التخزين المؤقت. * @constructor ينشئ مثيلًا للمستودع بمصادر البيانات المحددة. */class UserRepository( private val databaseSource: UserDatabaseSource, private val cacheSource: UserCacheSource) { /** * معرف المستخدم الحالي. * قد يكون null إذا لم يكن المستخدم مصرحًا له. */ var currentUserId: String? = null}2. أدوات التوليد: Dokka و KDoc
كتابة التعليقات يدويًا هي نصف المهمة. لتحويلها إلى توثيق مناسب (مثل موقع HTML أو PDF)، تحتاج إلى أداة توليد. بالنسبة لـ Kotlin، المعيار هو Dokka - محرك قوي طورته JetBrains.
2.1. ما هو Dokka؟
Dokka هو مولد توثيق يفهم KDoc ويمكنه إنشاء توثيق بتنسيقات مختلفة: