كود نظيف في Java: قواعد ستنقذ مشروعك

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

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

ابدأ الدورة

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

\n\n

تخيل أنك تدخل مشروعًا لشخص آخر. الفئات تُسمى Class1، Manager، UltraProcessor. الطرق تفعل كل شيء دفعة واحدة: استعلام قاعدة البيانات، عرض HTML، وإرسال البريد الإلكتروني. والمتغيرات — x، y، temp. مألوف؟ إذا كان الأمر كذلك، فأنت تعرف كيف يحول هذا الكود حياة المطور إلى جحيم بسرعة.

\n\n

الكود النظيف في Java لا يتعلق بالتحذلق. إنه يتعلق بالاحترام للزملاء، ولنفسك في المستقبل، وللأعمال. الكود المتسخ يبطئ التطوير بمقدار 2-3 مرات، ويجعل الأخطاء غير قابلة للاكتشاف، وإعادة الهيكلة مستحيلة. في هذه المقالة، سنستعرض قواعد محددة ستساعدك على كتابة كود يُقرأ ويُصان بسرور.

\n\n

القاعدة رقم 1: التسمية — 50% من النجاح

\n\n

روبرت مارتن (العم بوب) في كتابه "الكود النظيف" يؤكد: الاسم الجيد يغني عن التعليق. مطورو Java غالبًا ما يخطئون بأسماء مجردة. دعنا نصلح هذا.

\n\n

المتغيرات: قل ما تخزنه

\n\n

سيء:

\n
int d; // elapsed time in days
\n\n

جيد:

\n
int elapsedTimeInDays;
\n\n

سيء:

\n
List<String> list = new ArrayList<>();
\n\n

جيد:

\n
List<String> customerNames = new ArrayList<>();
\n\n

الطرق: فعل + سياق

\n\n

يجب أن تجيب الطريقة على سؤال "ماذا تفعل؟". تجنب الكلمات العامة مثل process، handle، doStuff.

\n\n

سيء:

\n
public void process(int id) {\n    // 50 سطرًا من الكود: تحقق، حساب، إرسال بريد إلكتروني\n}
\n\n

جيد:

\n
public void sendEmailConfirmation(int orderId) {\n    // فقط منطق إرسال البريد الإلكتروني\n}
\n\n

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

\n\n

تجنب Manager، Processor، Util إذا لم يكن ذلك مبررًا. يجب أن تعكس الفئة الكيان.

\n\n

سيء: DataProcessor، UserManager

\n

جيد: UserRepository، InvoiceCalculator، EmailSender

\n\n

القاعدة رقم 2: الطرق — قصيرة وذات مهمة واحدة

\n\n

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

\n\n

مثال على إعادة الهيكلة

\n\n

قبل:

\n
public 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

بعد:

\n
public 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

التعليق غالبًا ما يكون تبريرًا للكود السيء. بدلاً من كتابة "// يحصل

المدونات

توصيات الكتب