لماذا الكود النظيف ليس رفاهية بل ضرورة
\n\nتخيل أنك تدخل مشروعًا لشخص آخر. الفئات تُسمى Class1، Manager، UltraProcessor. الطرق تفعل كل شيء دفعة واحدة: استعلام قاعدة البيانات، عرض HTML، وإرسال البريد الإلكتروني. والمتغيرات — x، y، temp. مألوف؟ إذا كان الأمر كذلك، فأنت تعرف كيف يحول هذا الكود حياة المطور إلى جحيم بسرعة.
الكود النظيف في Java لا يتعلق بالتحذلق. إنه يتعلق بالاحترام للزملاء، ولنفسك في المستقبل، وللأعمال. الكود المتسخ يبطئ التطوير بمقدار 2-3 مرات، ويجعل الأخطاء غير قابلة للاكتشاف، وإعادة الهيكلة مستحيلة. في هذه المقالة، سنستعرض قواعد محددة ستساعدك على كتابة كود يُقرأ ويُصان بسرور.
\n\nالقاعدة رقم 1: التسمية — 50% من النجاح
\n\nروبرت مارتن (العم بوب) في كتابه "الكود النظيف" يؤكد: الاسم الجيد يغني عن التعليق. مطورو Java غالبًا ما يخطئون بأسماء مجردة. دعنا نصلح هذا.
\n\nالمتغيرات: قل ما تخزنه
\n\nسيء:
\nint d; // elapsed time in days\n\nجيد:
\nint elapsedTimeInDays;\n\nسيء:
\nList<String> list = new ArrayList<>();\n\nجيد:
\nList<String> customerNames = new ArrayList<>();\n\nالطرق: فعل + سياق
\n\nيجب أن تجيب الطريقة على سؤال "ماذا تفعل؟". تجنب الكلمات العامة مثل process، handle، doStuff.
سيء:
\npublic void process(int id) {\n // 50 سطرًا من الكود: تحقق، حساب، إرسال بريد إلكتروني\n}\n\nجيد:
\npublic void sendEmailConfirmation(int orderId) {\n // فقط منطق إرسال البريد الإلكتروني\n}\n\nالفئات: أسماء بدون لواحق طفيلية
\n\nتجنب Manager، Processor، Util إذا لم يكن ذلك مبررًا. يجب أن تعكس الفئة الكيان.
سيء: DataProcessor، UserManager
جيد: UserRepository، InvoiceCalculator، EmailSender
القاعدة رقم 2: الطرق — قصيرة وذات مهمة واحدة
\n\nالقاعدة الذهبية: طريقة واحدة — مسؤولية واحدة. إذا كانت الطريقة تحتوي على أكثر من 15-20 سطرًا، فمن المحتمل أنها تحتاج إلى التقسيم. هذا يعزز قابلية قراءة كود Java ويبسط الاختبار.
\n\nمثال على إعادة الهيكلة
\n\nقبل:
\npublic boolean isValidOrder(Order order) {\n if (order == null) return false;\n if (order.getItems().isEmpty()) return false;\n double total = 0;\n for (Item item : order.getItems()) {\n total += item.getPrice() * item.getQuantity();\n }\n if (total > 10000) {\n // التحقق من الحد الائتماني\n User user = userRepository.findById(order.getUserId());\n return user.getCreditLimit() >= total;\n }\n return true;\n}\n\nبعد:
\npublic boolean isValidOrder(Order order) {\n if (isOrderNullOrEmpty(order)) return false;\n double total = calculateTotal(order);\n if (isHighValueOrder(total)) {\n return hasSufficientCredit(order.getUserId(), total);\n }\n return true;\n}\n\nprivate boolean isOrderNullOrEmpty(Order order) {\n return order == null || order.getItems().isEmpty();\n}\n\nprivate double calculateTotal(Order order) {\n return order.getItems().stream()\n .mapToDouble(item -> item.getPrice() * item.getQuantity())\n .sum();\n}\n\nprivate boolean isHighValueOrder(double total) {\n return total > 10000;\n}\n\nprivate boolean hasSufficientCredit(int userId, double total) {\n User user = userRepository.findById(userId);\n return user.getCreditLimit() >= total;\n}\n\nالقاعدة رقم 3: التعليقات — فقط عندما لا يمكن الاستغناء عنها
\n\nالتعليق غالبًا ما يكون تبريرًا للكود السيء. بدلاً من كتابة "// يحصل