مراجعة الكود في Kotlin: ما يجب التحقق منه وكيفية تقديم الملاحظات
\n\nمراجعة الكود ليست مجرد إجراء شكلي أو طريقة للعثور على الأخطاء. إنها عملية حاسمة لتبادل المعرفة وتحسين جودة الكود. في Kotlin، بفضل تركيبته التعبيرية وميزاته القوية، تتطلب المراجعة اهتمامًا خاصًا بالتفاصيل. في هذه المقالة، سنناقش ما يجب الانتباه إليه عند مراجعة كود Kotlin وكيفية تقديم ملاحظات مفيدة وليست مسيئة.
\n\n1. ما يجب التحقق منه: قائمة مرجعية لمطور Kotlin
\n\nعند البدء في المراجعة، لا تحاول تغطية كل شيء دفعة واحدة. من الأفضل المرور عبر الفئات الرئيسية. إليك قائمة مرجعية منظمة لـ Kotlin.
\n\n1.1. أمان القيم الفارغة (Null Safety) والعمل مع الأنواع القابلة للفارغية
\nيحل Kotlin مشكلة NullPointerException (NPE)، ولكن فقط إذا لم يسيء المطور استخدام !! (تأكيد عدم الفارغية). هذه هي العلامة الحمراء الرئيسية.
- \n
- ما نبحث عنه: استخدام
!!في كود الإنتاج. يمكن دائمًا استبداله بـ?.letأو?:(elvis) أو التحويل الآمنas?. \n - مثال على كود سيء: \n
fun processUser(user: User?) {\n val name = user!!.name // احتمالية حدوث NPE!\n println(name)\n}\n- \n
- مثال على كود جيد: \n
fun processUser(user: User?) {\n user?.let { safeUser ->\n println(safeUser.name)\n } ?: run {\n println("المستخدم فارغ")\n }\n}\n\n1.2. استخدام المجموعات و Stream API
\nيقدم Kotlin مجموعة غنية من الوظائف للعمل مع المجموعات. تحقق من مدى فعالية وسهولة قراءة استخدامها.
\n- \n
- ما نبحث عنه: حلقات
forغير ضرورية حيث يمكن استخدامmapأوfilterأوgroupBy. وكذلك المجموعات القابلة للتغيير (MutableList) إذا كان يمكن الاستغناء عنها بمجموعات غير قابلة للتغيير (List). \n - مثال على كود سيء: \n
val names = mutableListOf<String>()\nfor (item in items) {\n if (item.isActive) {\n names.add(item.name)\n }\n}\n- \n
- مثال على كود جيد: \n
val names = items\n .filter { it.isActive }\n .map { it.name } // قائمة غير قابلة للتغيير\n\n1.3. دوال الامتداد (Extension Functions) ونطاق الرؤية
\nدوال الامتداد هي أداة قوية، ولكن من السهل "توزيعها" عبر المشروع. تحقق من ملاءمة استخدامها.
\n- \n
- ما نبحث عنه: دوال الامتداد التي تغير حالة الكائن (خاصة إذا كان ذلك غير واضح). الدوال التي يجب أن تكون طرقًا للفئة ولكن تم إخراجها كامتداد "للجمال". \n
- سؤال للمؤلف: "لماذا هذا امتداد وليس طريقة للفئة
User؟" \n
1.4. استخدام when بدلاً من if-else
\nيشجع Kotlin على استخدام when كبديل أكثر قابلية للقراءة لسلاسل if-else الطويلة.
- \n
- ما نبحث عنه: سلالم من
if-elseتتكون من 3 شروط أو أكثر. يجب استبدالها بـwhen. \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\n2. كيفية تقديم الملاحظات: من النقد إلى التعاون
\n\nالجانب التقني هو نصف المهمة فقط. النصف الآخر هو التواصل. الملاحظات السيئة يمكن أن تثبط عزيمة الفريق. الملاحظات الجيدة يمكن أن تعزز الثقة.
\n\n2.1. قاعدة "لماذا، وليس ماذا"
\nبدلاً من مجرد قول "هذا سيء"، اشرح لماذا هو سيء وكيف يمكن إصلاحه.
\n- \n
- سيء: "هناك
!!— أعد كتابته"