Clean Code في Java: مبادئ كتابة الكود النظيف مع أمثلة

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

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

ابدأ الدورة

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

عاجلاً أم آجلاً، يواجه كل مطور "كوداً قذراً": أسماء متغيرات لا معنى لها، دوال بطول مئات الأسطر، كتل متكررة وأرقام سحرية. يصعب قراءة هذا الكود، ومن الصعب صيانته، ويكاد يكون من المستحيل توسيعه دون المخاطرة بتعطيل التطبيق بأكمله. أصبح كتاب روبرت مارتن "Clean Code" بمثابة الكتاب المقدس للمبرمجين الذين يسعون لكتابة كود عالي الجودة. في هذه المقالة، سنحلل المبادئ الأساسية لـ Clean Code بلغة Java مع أمثلة توضيحية ستساعدك على جعل كودك واضحاً وموثوقاً وسهل الصيانة.



1. التسمية: تحدث بلغة العمل

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



مثال سيء

int d; // الوقت منذ الطلب (بالأيام)List<String> lst = new ArrayList<>();void prc() { ... }


مثال جيد

int daysSinceOrder;List<String> customerNames = new ArrayList<>();void processPayment() { ... }


توصيات إضافية

  • الكلاسات — أسماء: Order, CustomerRepository.
  • الدوال — أفعال أو أزواج فعلية: saveOrder(), isValidEmail().
  • تجنب الكلمات "المزعجة": Data, Info, Manager — إذا لم تكن تحمل معنى.


2. الدوال: قصيرة، واضحة، مهمة واحدة

يجب أن تقوم الدالة بعمل واحد فقط وأن تقوم به بشكل جيد. الطول المثالي هو 10-15 سطراً. إذا كانت الدالة لا تتناسب مع الشاشة — قم بتقسيمها.



مثال سيء: دالة سكين الجيش السويسري

public void processOrder(Order order) {    // 1. التحقق    if (order == null || order.getItems().isEmpty()) {        throw new IllegalArgumentException("طلب غير صالح");    }    // 2. حساب الخصم    double discount = 0;    if (order.getTotal() > 1000) discount = 0.1;    // 3. الحفظ في قاعدة البيانات    database.save(order);    // 4. إرسال البريد الإلكتروني    emailService.sendConfirmation(order.getCustomerEmail());}


مثال جيد: فصل المسؤوليات

public void processOrder(Order order) {    validateOrder(order);    applyDiscount(order);    persistOrder(order);    notifyCustomer(order);}

private void validateOrder(Order order) { if (order == null || order.getItems().isEmpty()) { throw new IllegalArgumentException("طلب غير صالح"); }}

private void applyDiscount(Order order) { if (order.getTotal() > 1000) { order.setDiscount(0.1); }}

private void persistOrder(Order order) { database.save(order);}

private void notifyCustomer(Order order) { emailService.sendConfirmation(order.getCustomerEmail());}


3. تجنب التكرار (DRY) والأرقام السحرية

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



المشكلة: الأرقام السحرية

if (age > 18) { ... } // ما هو 18؟ الحد الأدنى للعمر؟ حد الخصم؟


الحل: ثوابت بأسماء

private static final int MINIMUM_DRIVING_AGE = 18;// ...if (age > MINIMUM_DRIVING_AGE) { ... }


مثال على التكرار

// سيءdouble totalForFirst = price1 * quantity1 * 0.95;double totalForSecond = price2 * quantity2 * 0.95;

// جيدdouble calculateLineTotal(double price, int quantity) { return price * quantity * 0.95;}double totalForFirst = calculateLineTotal(price1, quantity1);double totalForSecond = calculateLineTotal(price2, quantity2);


المدونات

توصيات الكتب