JavaRush /مدونة جافا /Random-AR /IntelliJ IDEA: نمط الكود وتنسيقه
Viacheslav
مستوى

IntelliJ IDEA: نمط الكود وتنسيقه

نشرت في المجموعة
الأدوات الحديثة تجعل عملية التطوير أسهل. على وجه الخصوص، من الأسهل مراقبة نمط التعليمات البرمجية الخاصة بك، ومحاولة تقليل تنسيقها "غير المصرح به". في هذه المراجعة، أقترح أن تتعرف على الأدوات التي يوفرها IntelliJ Idea IDE للمطور لجعل التعليمات البرمجية ممتعة للقراءة وسهلة الفهم.
IntelliJ IDEA: نمط الكود وتنسيقه - 1

مقدمة

لغة البرمجة تشبه إلى حد كبير اللغة التي يتحدث بها الناس. والفرق الوحيد هو أن هذه لغة خاصة تستخدم في البداية للتواصل مع جهاز الكمبيوتر لنشرح له ما نريد منه. ولكن لا يمكن أن يكون هناك اتصال فردي مع جهاز الكمبيوتر. حتى عندما بدأت في تعلم لغة برمجة، كنت تنظر إلى كتاب أو مصدر تعليمي مثل JavaRush. وفي هذا المصدر رأيت كودًا سيفهمه الكمبيوتر. ولكن يجب عليك أيضًا أن تفهمها عندما تكتسب المعرفة بلغة Java. كما هو الحال في أي لغة، البرمجة لديها بعض القواعد لتشكيل التعليمات البرمجية. على سبيل المثال، تعتبر الكتابة بالسياج في المجتمع المهذب سلوكًا سيئًا، وفي جافا يعد استدعاء الطريقة بحرف كبير انتهاكًا صارخًا لأسلوب التعليمات البرمجية. تمت صياغة قواعد تنسيق كود Java في وثيقة Java Code Convention . بالإضافة إلى ذلك، يمكن لنمط التعليمات البرمجية تنظيم التفاصيل الأصغر، مثل المسافة البادئة. وعند استخدام أدوات التحكم في الإصدار، تخيل الكابوس بأكمله عندما يقوم الجميع بحفظ ملف إما بمسافة بادئة كعلامة تبويب أو بمسافة بادئة كمسافة. كيف سيكون الأمر بالنسبة لشخص يحتاج إلى التحقق من التعديل بطريقة واحدة فقط، ولكن سيتم تغيير الملف بأكمله بسبب تصحيح المسافات إلى علامات التبويب أو العكس. وبطبيعة الحال، كما هو الحال مع اللغة العادية، قد يختلف الأسلوب اعتمادًا على مكان استخدامه. على سبيل المثال، يمكنك العثور على Google Java Style Guide أو Twitter Java Style Guide على الإنترنت . بالنسبة لمقالة المراجعة هذه، سنحتاج إلى موضوع اختبار. دعنا نستخدم خدمة نظام بناء مشروع Gradle. سيسمح لنا بإنشاء مشروع جديد باستخدام قالب لبداية سريعة. يحتوي Gradle على مكون إضافي رائع: Build Init Plugin . دعنا نذهب إلى الدليل الجديد وننفذ الأمر هناك: gradle init --type java-application بعد ذلك، قم بتشغيل IntelliJ Idea. إذا رأيت نافذة بها مشروع مفتوح بالفعل (سترى محرر التعليمات البرمجية، وشجرة بنية المشروع)، فأغلق هذا المشروع باستخدام File -< Close Project. الآن في نافذة الترحيب سنقوم بتنفيذ "Import Project"واستيراد مشروعنا الجديد. عند الاستيراد، قم بتعيين العلم "Use autoimport". دعونا نكتشف ما إذا كان من الممكن تبسيط الحياة بطريقة أو بأخرى بمساعدة أدوات التطوير الحديثة.

تنسيق التعليمات البرمجية في الفكرة

بعد استيراد المشروع، اضغط على مجموعة المفاتيح Ctrl+Nوانتقل إلى الفصل الدراسي AppTest. هذه الفئة هي فئة الاختبار الافتراضية. تبدو هكذا:
import org.junit.Test;
import static org.junit.Assert.*;

public class AppTest {
    @Test public void testAppHasAGreeting() {
        App classUnderTest = new App();
        assertNotNull("app should have a greeting", classUnderTest.getGreeting());
    }
}
ما الذي يلفت انتباهك على الفور هنا؟ تعليق توضيحي مع إعلان الطريقة في سطر واحد يبدو قبيحًا، أوافق على ذلك. كيف يمكن اصلاح هذا؟ يحتوي IntelliJ Idea على قسم قائمة "Code"لمختلف عمليات معالجة التعليمات البرمجية. أحد هذه التلاعبات هو "Reformat Code"مجموعة المفاتيح Ctrl + L. بعد التطبيق، سيكون التعليق التوضيحي على سطر واحد، والطريقة نفسها ستكون على سطر آخر. تجدر الإشارة على الفور إلى أن هذه العملية يتم إجراؤها على قسم محدد من التعليمات البرمجية . وإذا لم يكن هناك شيء من هذا القبيل، سيتم تنفيذ عملية التنسيق على كل المحتوى. دعونا الآن نضيف طريقة اختبار جديدة:
@Test
public void testSummOfOddNumbers() {
	List<Integer> data = Arrays.asList(1, 4, 2, 3, 6, 7, 9);
	Integer result = data.stream().filter(number -> number % 2 == 0).reduce((n1, n2) -> n1 + n2).get();
	assertThat(result, is(12));
}
واثنين من الواردات:
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;
كما ترون، يتم وضع العملية على الدفق على سطر واحد. ولكن ماذا لو أردنا التأكد من أن الأساليب التي يتم تسلسل مكالماتها يتم دائمًا تقسيمها عند نقطة ما إلى أسطر جديدة؟ من ناحية، يمكننا القيام بذلك يدويًا. لكن تذكر أننا نريد أن يعمل كل شيء لصالحنا. بعد كل شيء، من وقت لآخر سوف ننسى، وسيصبح تنسيق التعليمات البرمجية مختلفًا في كل مكان، وهذا ليس جيدًا. اتضح أنك بحاجة إلى تعديل القاعدة التي تقوم بها Idea بالتنسيق. حدد عنصر الفكرة في القائمة File -> Settings(أو انقر فوق Ctrl + Alt + S). في حقل البحث في نافذة الإعدادات، اكتب "نمط الكود". في قسم نمط التعليمات البرمجية، من الممكن تحديد الإعدادات ليس فقط لـ Java. لكننا الآن مهتمون بجافا. كما ترون، يتم تقسيم الإعدادات إلى عدة علامات تبويب. الأمر الأكثر فائدة هو أن نتيجة التغيير ستظهر في مثال على الجانب الأيمن من النافذة:
فكرة IntelliJ: نمط التعليمات البرمجية والتنسيق - 2
كما ترون في لقطة الشاشة، يمكننا تحديد الإعداد لـ "استدعاءات الطريقة المتسلسلة" كـ "التفاف دائمًا"، أي. تقسيم دائمًا لاستدعاءات الطريقة المدمجة. الآن دعونا نضغط على التنسيق مرة أخرى في الاختبار ونرى أنه يعمل بالفعل! ولكن في بعض الأحيان يحدث أن تكون هناك حاجة لتنسيق بعض التعليمات البرمجية خارج قواعد التنسيق العامة. لنقم بإعداد التنسيق على النحو التالي:
فكرة IntelliJ: نمط التعليمات البرمجية والتنسيق - 3
لتمكين تعطيل التنسيق، يجب تمكين دعم علامات التنسيق المعطلة في قسم نمط التعليمات البرمجية:
IntelliJ IDEA: نمط الكود وتنسيقه - 4
يمكننا الآن تغيير كود الاختبار الخاص بنا بحيث يظل تنسيقه بالشكل الذي نكتبه به:
@Test
public void testSummOfOddNumbers() {
	List<Integer> data = Arrays.asList(1, 4, 2, 3, 6, 7, 9);
	// @formatter:off
	Integer result = data.stream().filter(number -> number % 2 == 0)
                             .reduce((n1, n2) -> n1 + n2)
                             .get();
	assertThat(result, is(12));
	// @formatter:on
}
نعم، إذا لاحظت: عندما تضغط على Tab، تفسرها Idea على أنها مسافات لك (السلوك الافتراضي). ولكن يمكنك تغيير هذا هناك في Code Style:
IntelliJ IDEA: نمط الكود وتنسيقه - 5
كما ترون، هناك مجموعة كبيرة ومتنوعة من الإعدادات. يمكنك قراءة المزيد حول إعدادات نمط الكود هنا: " Idea Help: Code Style ". هناك ميزة تنسيق مهمة أخرى - تنسيق الاستيراد. يتم تنفيذه بشكل منفصل ويتم استدعاؤه "Optimize Imports"ويقع في عنصر القائمة Code -> Optimize Imports(Ctrl + Alt + O). يعمل تحسين الاستيراد على إزالة الواردات غير الضرورية ويضعها أيضًا بالترتيب الصحيح وفقًا للإعدادات الموجودة في علامة التبويب "الواردات" في Code Style لإعدادات Java. وأيضًا، إذا كنت تريد أن يتم التنسيق تلقائيًا، فالخبر السار هو أنه يمكنك القيام بذلك باستخدام البرنامج الإضافي Save Actions .

توزيع الإعدادات على الفريق

رائع، لقد رأينا أعلاه أنه يمكننا تخصيص نمط التنسيق ليناسبنا. ولكن كيف يمكن استخدام هذا الأسلوب في الفريق؟ بسيط جدا. هناك عدة خيارات. الأسهل هو حفظ الرسم التخطيطي. افتح إعدادات الفكرة عبر ملف -> الإعدادات (أو اضغط على Ctrl + Alt + S). في قسم نمط الكود يمكننا رؤية مخطط النقش. هذا هو مخطط التنسيق لدينا. افتراضيًا، يتم تحديد مخطط بالاسم Default وبجواره التعليق التوضيحي IDE: وهذا يعني أن هذا الإعداد مخصص فقط لـ IDE الخاص بنا، ولا يؤثر على أي شخص. لإنشاء مخطط "مخصص"، انقر فوق الزر الموجود على اليمين لإنشاء "نسخة مكررة" وإعطائه اسمًا، على سبيل المثال: JavaRush
فكرة IntelliJ: نمط التعليمات البرمجية والتنسيق - 6
بعد ذلك سنكون قادرين على استيراد أو تصدير الإعدادات:
فكرة IntelliJ: نمط التعليمات البرمجية والتنسيق - 7
هناك خيار آخر وهو استيراد إعدادات Idea للاستيراد:
IntelliJ IDEA: نمط الكود وتنسيقه - 8
الخيار الثالث هو مستودع الإعدادات. لمزيد من المعلومات حول استخدام مستودع الإعدادات، راجع الوثائق "مساعدة IntelliJ Idea: مستودع الإعدادات ". فيما يتعلق بموضوع توزيع نمط واحد في الفريق، لا يسعني أيضًا إلا أن أشير إلى الدعم الجيد للأنماط من Eclipse IDE. للقيام بذلك، ستحتاج إلى تثبيت مكون إضافي منفصل: افتح إعدادات الفكرة عبر ملف -> الإعدادات (Ctrl + Alt + S) وانتقل إلى قسم المكونات الإضافية. للبحث عن مكونات إضافية جديدة، انقر فوق الزر "Browse Repositories"، وبعد ذلك سنجد المكون الإضافي Eclipse Code Formatter في نافذة البحث.
IntelliJ IDEA: نمط الكود وتنسيقه - 9
الآن، بعد التثبيت، تحتاج إلى إعادة تشغيل Idea - وهذا إجراء قياسي. بعد ذلك، في نفس المكان، في إعدادات الفكرة، سنجد قسمًا جديدًا: “Eclipse Code Formatter”، ويمكن العثور على مثال لملف تنسيق لـ Eclipse هنا . سيبدو شيئا من هذا القبيل:
IntelliJ IDEA: نمط الكود وتنسيقه - 10

متطلبات التشديد

بالإضافة إلى أدوات الفكرة، يمكنك أيضًا استخدام المكونات الإضافية لنظام البناء لتشديد المتطلبات. لا توجد طريقة للتحقق من أن الشخص استخدم التنسيق. إذا كان هناك 5 أشخاص في الفريق، فلا يزال ذلك ممكنًا. إذا كانت الشركة تضم 100 شخص، فهذا غير واقعي. نعم، حتى خمسة سيكون من الصعب تتبعها. ولماذا نضيع الوقت في هذا؟ من الأسهل بكثير حظر تحصيل المشروع في حالة انتهاك قواعد معينة. في الواقع، هذا موضوع منفصل تمامًا يسمى "فحص الكود". ولأغراض هذه المقالة، أريد فقط أن أوضح كيف يعمل. أحد المكونات الإضافية الأكثر شيوعًا لـ Gradle (نظرًا لأنه يجمع مشروعنا، إذا كنت تتذكر) هو pmd . لتمكينه، ما عليك سوى الانتقال إلى البرنامج النصي للإنشاء الخاص بمشروع gradle الخاص بنا (ملف build.gradle الموجود في جذر مشروعنا) وتحديد PMD فيه بجوار بقية المكونات الإضافية:

plugins {
    // Apply the java plugin to add support for Java
    id 'java'
    // Check source code
    id 'pmd'
    // Apply the application plugin to add support for building an application
    id 'application'
}
يمكننا الآن ضبط إعدادات أكثر تفصيلاً هناك:

pmd {
    ignoreFailures = false
    pmdTest.enabled = true
    ruleSets = [
            'java-basic',
            'java-braces',
            'java-clone',
            'java-codesize',
            'java-comments',
            'java-controversial',
            'java-coupling',
            'java-design',
            'java-empty',
            'java-finalizers',
            'java-imports',
            'java-optimizations',
            'java-strictexception',
            'java-strings',
            'java-typeresolution',
            'java-unnecessary',
            'java-unusedcode'
    ]
}
حتى في مشروعنا، لم يعد كل شيء على ما يرام. لنقم بتشغيل Gradle build ونحصل على خطأ. الجميل هو أنه يتم إنشاء تقرير أثناء التجميع. وفي حالة وجود أخطاء، سوف نتلقى رسالة مثل:

BUILD FAILED in 35s
6 actionable tasks: 6 executed
7 PMD rule violations were found. See the report at: file:///C:/_study/codestyle/build/reports/pmd/main.html
ولو ذهبنا إلى التقرير سنرى ما يلي:
IntelliJ IDEA: نمط الكود وتنسيقه - 11
علاوة على ذلك، يوجد في عمود المشكلة رابط لوصف المشكلة على موقع البرنامج الإضافي PMD. على سبيل المثال، بالنسبة للخطأ "headerCommentRequirement Required"، يظهر الرابط هنا:pmd - CommentRequired . يشير هذا الخطأ إلى أن فصلنا لا يحتوي على JavaDoc. يمكن تكوين وجود JavaDoc على الفئات باستخدام القوالب:
فكرة IntelliJ: نمط التعليمات البرمجية والتنسيق - 12
وحدد محتويات رأس الملف:
IntelliJ IDEA: نمط الكود وتنسيقه - 13
بعد ذلك، يمكننا تحويل التعليق الموجود أعلى فئة التطبيق إلى JavaDoc ونرى من خلال إنشاء جديد أن الخطأ قد اختفى.

الحد الأدنى

يعد أسلوب الكود مهمًا لمشروع منتج. الكود الجميل المكتوب وفقًا للقواعد العامة هو ضمان أن زملائك سوف يفهمونه بسهولة أكبر وبسرعة، ولن يقولوا بعض الأشياء اللطيفة عنك. ونظرًا لأدوات التطوير الحديثة، فإن الالتزام بالقواعد ليس بالأمر الصعب. آمل أن تكون هذه المراجعة قد أظهرت أن هذا هو الحال بالفعل. حسنا، كالعادة، القليل من المواد حول هذا الموضوع: # فياتشيسلاف
تعليقات
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION