مراجعة الكود في Kotlin: ما يجب التحقق منه وكيفية تقديم الملاحظات

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

مراجعة الكود في Kotlin: ما يجب التحقق منه وكيفية تقديم الملاحظات

\n\n

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

\n\n

1. ما يجب التحقق منه: قائمة مرجعية لمطور Kotlin

\n\n

عند البدء في المراجعة، لا تحاول تغطية كل شيء دفعة واحدة. من الأفضل المرور عبر الفئات الرئيسية. إليك قائمة مرجعية منظمة لـ Kotlin.

\n\n

1.1. أمان القيم الفارغة (Null Safety) والعمل مع الأنواع القابلة للفارغية

\n

يحل Kotlin مشكلة NullPointerException (NPE)، ولكن فقط إذا لم يسيء المطور استخدام !! (تأكيد عدم الفارغية). هذه هي العلامة الحمراء الرئيسية.

\n
    \n
  • ما نبحث عنه: استخدام !! في كود الإنتاج. يمكن دائمًا استبداله بـ ?.let أو ?: (elvis) أو التحويل الآمن as?.
  • \n
  • مثال على كود سيء:
  • \n
\n
fun processUser(user: User?) {\n    val name = user!!.name // احتمالية حدوث NPE!\n    println(name)\n}
\n
    \n
  • مثال على كود جيد:
  • \n
\n
fun processUser(user: User?) {\n    user?.let { safeUser ->\n        println(safeUser.name)\n    } ?: run {\n        println("المستخدم فارغ")\n    }\n}
\n\n

1.2. استخدام المجموعات و Stream API

\n

يقدم Kotlin مجموعة غنية من الوظائف للعمل مع المجموعات. تحقق من مدى فعالية وسهولة قراءة استخدامها.

\n
    \n
  • ما نبحث عنه: حلقات for غير ضرورية حيث يمكن استخدام map أو filter أو groupBy. وكذلك المجموعات القابلة للتغيير (MutableList) إذا كان يمكن الاستغناء عنها بمجموعات غير قابلة للتغيير (List).
  • \n
  • مثال على كود سيء:
  • \n
\n
val names = mutableListOf<String>()\nfor (item in items) {\n    if (item.isActive) {\n        names.add(item.name)\n    }\n}
\n
    \n
  • مثال على كود جيد:
  • \n
\n
val names = items\n    .filter { it.isActive }\n    .map { it.name } // قائمة غير قابلة للتغيير
\n\n

1.3. دوال الامتداد (Extension Functions) ونطاق الرؤية

\n

دوال الامتداد هي أداة قوية، ولكن من السهل "توزيعها" عبر المشروع. تحقق من ملاءمة استخدامها.

\n
    \n
  • ما نبحث عنه: دوال الامتداد التي تغير حالة الكائن (خاصة إذا كان ذلك غير واضح). الدوال التي يجب أن تكون طرقًا للفئة ولكن تم إخراجها كامتداد "للجمال".
  • \n
  • سؤال للمؤلف: "لماذا هذا امتداد وليس طريقة للفئة User؟"
  • \n
\n\n

1.4. استخدام when بدلاً من if-else

\n

يشجع Kotlin على استخدام when كبديل أكثر قابلية للقراءة لسلاسل if-else الطويلة.

\n
    \n
  • ما نبحث عنه: سلالم من if-else تتكون من 3 شروط أو أكثر. يجب استبدالها بـ when.
  • \n
\n
// بدلاً من هذا:\nif (status == Status.ACTIVE) { ... } else if (status == Status.PENDING) { ... } else { ... }\n\n// الأفضل هكذا:\nwhen (status) {\n    Status.ACTIVE -> { ... }\n    Status.PENDING -> { ... }\n    else -> { ... }\n}
\n\n

2. كيفية تقديم الملاحظات: من النقد إلى التعاون

\n\n

الجانب التقني هو نصف المهمة فقط. النصف الآخر هو التواصل. الملاحظات السيئة يمكن أن تثبط عزيمة الفريق. الملاحظات الجيدة يمكن أن تعزز الثقة.

\n\n

2.1. قاعدة "لماذا، وليس ماذا"

\n

بدلاً من مجرد قول "هذا سيء"، اشرح لماذا هو سيء وكيف يمكن إصلاحه.

\n
    \n
  • سيء: "هناك !! — أعد كتابته"

المدونات

توصيات الكتب