كود نظيف بلغة جافا: المبادئ والأمثلة العملية

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

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

ابدأ الدورة

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

\n

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

\n

الكود النظيف لا يتعلق بالصيغة المثالية أو اتباع الموضة. إنه يتعلق بالاحترام للزملاء، ولنفسك في المستقبل، وفي النهاية، للأعمال. الكود القابل للقراءة أسهل في الصيانة والاختبار وإعادة الهيكلة. دعنا نرى كيف نحول كود جافا من "يعمل" إلى "نظيف".

\n\n

1. أسماء ذات معنى: تحدث بلغة مجال المشكلة

\n

القاعدة: يجب أن يجيب الاسم على أسئلة "لماذا؟"، "ماذا؟"، "كيف؟"

\n

التسمية السيئة هي العدو الرئيسي للكود النظيف. المتغيرات مثل int a، String d أو List<Integer> list1 لا تحمل معلومات. الاسم الجيد يجب أن يكشف عن نية المبرمج.

\n\n
// سيء\nint d; // elapsed time in days\nList<Integer> lst;\n\n// جيد\nint daysSinceCreation;\nList<Integer> customerIds;
\n\n

تجنب المعلومات المضللة

\n

لا تستخدم accountList إذا لم تكن List، بل مثلاً Set أو Map. لا تختصر الواضح: usrNm بدلاً من userName.

\n\n

أسماء الفئات والطرق

\n
    \n
  • الفئات: أسماء ( Customer، OrderProcessor ).
  • \n
  • الطرق: أفعال ( calculateTotal()، saveToDatabase() ).
  • \n
  • المتغيرات المنطقية: مسندات ( isActive، hasPermission ).
  • \n
\n\n
// سيء\npublic class Data {\n    public void proc() { ... }\n}\n\n// جيد\npublic class InvoiceCalculator {\n    public BigDecimal calculateTotalAmount() { ... }\n}
\n\n

2. الدوال: قصيرة، ذرية، وبدون آثار جانبية

\n

المبدأ الأول: يجب أن تقوم الدالة بشيء واحد فقط

\n

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

\n\n
// سيء: الدالة تقوم بثلاثة أشياء\npublic void processOrder(Order order) {\n    if (order == null) throw new IllegalArgumentException();\n    // 1. التحقق\n    if (order.getItems().isEmpty()) {\n        logger.warn("Empty order");\n        return;\n    }\n    // 2. حساب التكلفة\n    BigDecimal total = BigDecimal.ZERO;\n    for (Item item : order.getItems()) {\n        total = total.add(item.getPrice().multiply(BigDecimal.valueOf(item.getQuantity())));\n    }\n    // 3. إرسال البريد الإلكتروني\n    emailService.sendConfirmation(order.getCustomerEmail(), total);\n}\n\n// جيد: كل دالة تقوم بشيء واحد\npublic void processOrder(Order order) {\n    validateOrder(order);\n    BigDecimal total = calculateTotal(order);\n    sendConfirmationEmail(order, total);\n}\n\nprivate void validateOrder(Order order) {\n    if (order == null || order.getItems().isEmpty()) {\n        throw new IllegalArgumentException("Invalid order");\n    }\n}\n\nprivate BigDecimal calculateTotal(Order order) {\n    return order.getItems().stream()\n            .map(item -> item.getPrice().multiply(BigDecimal.valueOf(item.getQuantity())))\n            .reduce(BigDecimal.ZERO, BigDecimal::add);\n}
\n\n

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

\n

في كل مرة تقوم فيها بتعديل ملف، قم بتحسينه: أعد تسمية متغير سيء، قسم دالة طويلة. هذا يمنع تدهور الكود.

\n<

المدونات

توصيات الكتب