كود نظيف في Kotlin: المبادئ والأمثلة للمبتدئين

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

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

ابدأ الدورة

كود نظيف في Kotlin: المبادئ والأمثلة للمبتدئين

\n\n

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

\n\n

1. تسمية المتغيرات والدوال والفئات

\n\n

التسمية الصحيحة هي أساس الكود النظيف. يجب أن يجيب الاسم على الأسئلة: "ما هذا؟" و"لماذا هو مطلوب؟". في Kotlin، يُستخدم camelCase للمتغيرات والدوال، و PascalCase للفئات والكائنات.

\n\n

مثال سيء:

\n
val x = 5\nfun calc(a: Int, b: Int): Int {\n    return a * b + 10\n}
\n\n

مثال جيد:

\n
val maxRetryCount = 5\nfun calculateTotalPrice(basePrice: Int, tax: Int): Int {\n    return basePrice + tax\n}
\n\n

القواعد الأساسية:

\n
    \n
  • تجنب الاختصارات — من الأفضل استبدال usr بـ user، و calc بـ calculate.
  • \n
  • استخدم الأفعال للدوال — getUser()، sendEmail()، validateInput().
  • \n
  • المتغيرات المنطقية سمها بالبادئات is، has، can — isActive، hasPermission.
  • \n
  • تجنب المعلومات الزائدة — userList أفضل من listOfUsersFromDatabase.
  • \n
\n\n

2. مبادئ SOLID في Kotlin

\n\n

SOLID هي خمسة مبادئ للبرمجة كائنية التوجه تساعد في إنشاء أنظمة مرنة وسهلة الصيانة. دعنا نستعرضها مع أمثلة في Kotlin.

\n\n

Single Responsibility (المسؤولية الواحدة)

\n

يجب أن يكون للفئة سبب واحد فقط للتغيير. قسم المنطق إلى فئات صغيرة ومتخصصة.

\n\n

مثال سيء:

\n
class UserManager {\n    fun saveUser(user: User) { /* حفظ في قاعدة البيانات */ }\n    fun sendEmail(user: User) { /* إرسال بريد إلكتروني */ }\n    fun printReport(user: User) { /* طباعة تقرير */ }\n}
\n\n

مثال جيد:

\n
class UserRepository {\n    fun save(user: User) { /* حفظ في قاعدة البيانات */ }\n}\n\nclass EmailService {\n    fun send(user: User) { /* إرسال بريد إلكتروني */ }\n}\n\nclass ReportPrinter {\n    fun print(user: User) { /* طباعة تقرير */ }\n}
\n\n

Open/Closed (الانفتاح/الإغلاق)

\n

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

\n\n
interface Shape {\n    fun area(): Double\n}\n\nclass Circle(val radius: Double) : Shape {\n    override fun area() = Math.PI * radius * radius\n}\n\nclass Rectangle(val width: Double, val height: Double) : Shape {\n    override fun area() = width * height\n}\n\n// الآن يمكن إضافة أشكال جديدة دون تغيير الكود الموجود\n
\n\n

Liskov Substitution (استبدال ليسكوف)

\n

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

\n\n
open class Bird {\n    open fun fly() = "يطير"\n}\n\nclass Penguin : Bird() {\n    override fun fly() = throw UnsupportedOperationException("طيور البطريق لا تطير")\n}\n// هذا انتهاك للمبدأ - من الأفضل نقل "القدرة على الطيران" إلى واجهة منفصلة\n
\n\n

3. العمل مع الدوال: الإيجاز والنقاء

\n\n

تقدم Kotlin أدوات قوية لكتابة دوال نظيفة. القواعد الأساسية:

\n\n