Go الفعّالة › التنسيق 2 / 16 السابق التالي

التنسيق

مشاكل التنسيق هي الأكثر إثارةً للجدل، والأقل أثرًا. يستطيع الناس أن يتألفوا مع أنماط تنسيق مختلفة، لكن الأفضل ألا يضطروا إلى ذلك، وأن يُقتطع من وقتهم أقل في هذا الموضوع إذا التزم الجميع بأسلوب واحد. المشكلة هي كيفية بلوغ هذه يوتوبيا دون أن نكتب دليل أسلوب طويلًا ومفصلًا.

في Go اتُّخذ مسار غير معتاد: نترك الآلة تتولّى معظم مشكلات التنسيق. برنامج gofmt — المتاح أيضًا باسم go fmt، وهو يعمل على مستوى الحزمة لا على مستوى ملف المصدر — يقرأ برنامج Go ويخرجه بأسلوب معياري من المسافات البادئة والمحاذاة الرأسية، مع الحفاظ على التعليقات، وإعادة تنسيقها عند الحاجة.

إن أردت أن تعرف كيف يتعامل gofmt مع تنسيق ما جديد، فشغّله؛ وإذا بدا لك الجواب غير صحيح، فأعد ترتيب برنامجك — أو بلّغ عن خلل فيه — بدلًا من الالتفاف حوله.

مثالًا، لا داعي لأن تقضي وقتًا في محاذاة التعليقات فوق حقول بنية (struct). يتولى gofmt ذلك عنك. فتعطى التصريح التالي:

type T struct {
    name string // name of the object
    value int // its value
}

يَخرِج gofmt الأعمدة كما يلي:

type T struct {
    name    string // name of the object
    value   int    // its value
}

كل شيفرة Go في الحزم القياسية مطبَّقة التنسيق بـ gofmt.

وتبقى بعض تفاصيل التنسيق. وبإيجاز شديد:

  • المسافة البادئة. نستخدم Tab للمسافة البادئة، ويُخرجه gofmt كذلك افتراضيًا. لا تستعمل المسافات إلا إذا اضطُررت.
  • طول السطر. لا تضع Go حدًّا لطول السطر، فلا داعي للقلق من تجاوز حدّ بطاقة مثقوبة. إن بدا لك السطر طويلًا، فاطوِه وأضف Tab بادئة.
  • الأقواس. تحتاج Go إلى أقواس أقل بكثير مما تحتاجه C وJava: فبنى التحكم — if وfor وswitch — لا تقواس في صياغتها. كما أن تسلسل أولويات المعاملات أقصر وأوضح، بحيث
x<<8 + y<<16

يعني ما توحي به المسافات، على خلاف اللغات الأخرى.