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

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

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

ابدأ الدورة

مقدمة: لماذا الكود النظيف ليس رفاهية بل ضرورة

كل مطور واجه مرة على الأقل كودًا لا يمكن فهمه دون فنجان قهوة وتأمل. المتغيرات بأسماء مثل a و b و temp، والطرق التي يبلغ طولها 500 سطر، والتعليقات مثل "هنا سحر، لا تلمس" — هي علامات أكيدة على أن المشروع يتحول إلى "Legacy". Clean Code (الكود النظيف) هو فلسفة ومجموعة من الممارسات التي تجعل الكود قابلاً للقراءة وسهل الصيانة والتوسيع.

في هذه المقالة، سنحلل المبادئ الأساسية لـ Clean Code بلغة Java مع أمثلة محددة. ستتعلم كيفية كتابة كود ستكون ممتنًا لقراءته أنت وزملاؤك بعد ستة أشهر.



المبدأ 1: الأسماء المعبرة

يجب أن يجيب اسم المتغير أو الطريقة أو الفئة على ثلاثة أسئلة: ما هذا، لماذا هذا، وكيف نستخدمه. الاسم السيء هو المصدر الرئيسي للارتباك.



مثال سيء

public List<Integer> getList(int a) {    List<Integer> list = new ArrayList<>();    for (int i = 0; i < a; i++) {        list.add(i * 2);    }    return list;}

ماذا تفعل هذه الطريقة؟ ما هو a؟ هل تعيد قائمة بالأرقام الزوجية؟ أم فقط تضرب شيئًا ما في اثنين؟



مثال جيد (Clean Code)

public List<Integer> generateEvenNumbers(int count) {    List<Integer> evenNumbers = new ArrayList<>();    for (int i = 0; i < count; i++) {        evenNumbers.add(i * 2);    }    return evenNumbers;}

الآن كل شيء واضح بدون تعليقات: الطريقة تولد قائمة بالأرقام الزوجية بطول محدد.



قواعد التسمية

  • الفئات: أسماء (User, PaymentProcessor)
  • الطرق: أفعال (saveUser(), calculateTotal())
  • المتغيرات: أسماء ذات معنى (userName, totalPrice)
  • تجنب: الاختصارات (usrNm)، الأسماء المكونة من حرف واحد (باستثناء عدادات الحلقات i, j)


المبدأ 2: الطرق الصغيرة ذات المسؤولية الواحدة

يجب أن تفعل الطريقة شيئًا واحدًا فقط وتفعله بشكل جيد. إذا كان يمكن وصف الطريقة بحرف العطف "و" (تفعل أ أولاً، و ب بعد ذلك)، فهذا يعني أنه يجب تقسيمها.



مثال سيء: متجانسة

public void processOrder(Order order) {    // التحقق    if (order.getItems().isEmpty()) {        throw new IllegalArgumentException("Order is empty");    }    // حساب التكلفة    double total = 0;    for (Item item : order.getItems()) {        total += item.getPrice() * item.getQuantity();    }    // إرسال البريد الإلكتروني    EmailService.send(order.getCustomerEmail(), "Your order total: " + total);    // الحفظ في قاعدة البيانات    orderRepository.save(order);}

هذه الطريقة تفعل 4 أشياء: تتحقق، تحسب، ترسل بريدًا إلكترونيًا، وتحفظ. إذا حدث خطأ ما، سيكون البحث عن السبب في الطريقة بأكملها.



مثال جيد: طرق نظيفة

public void processOrder(Order order) {    validateOrder(order);    double total = calculateTotal(order);    sendConfirmationEmail(order, total);    saveOrder(order);}

private void validateOrder(Order order) { if (order.getItems().isEmpty()) { throw new IllegalArgumentException("Order cannot be empty"); }}

private double calculateTotal(Order order) { return order.getItems().stream() .mapToDouble(item -> item.getPrice() * item.getQuantity()) .sum();}

private void sendConfirmationEmail(Order order, double total) { String message = "Your order total: " + total; EmailService.send(order.getCustomerEmail(), message);}

private void saveOrder(Order order) { orderRepository.save(order);}

كل طريقة هي لبنة. ه

المدونات

توصيات الكتب