أسلوب البرمجة

أسلوب البرمجة هو عبارة عن مجموعة قواعد أو إرشادات تستخدم عند كتابة كود مصدري برنامج (حاسوب). وغالبا ما يتم الإدعاء بأن إتباع أسلوب معين في البرمجة يساعد مبرمج على قراءة وفهم الشفرة المصدرية المطابقة للأسلوب ومساعدتهم على تجنب تقديم الأخطاء.
ومن الأعمال الكلاسيكية في هذا الموضوع هو كتاب عناصر أسلوب البرمجة والذي كتب في السبعينات وفسر هذه الأساليب بأمثلة من لغات فورتران وبي إل وان التي كانت سائدة في هذا الوقت.
إن لغة البرمجة التي تستخدم لبرنامج معين يمكن اشتقاقها من عادات التشفير الخاصة بشركة أو مؤسسة حاسوبية أخرى بالإضافة إلى مفضلات المؤلف بالنسبة للأكواد. وغالبا ما يتم تصميم أساليب البرمجة لغة برمجة بعينها (أو عائلة لغات): ويعتبر الأسلوب أمرا جيدا للشفرة المصدرية الخاصة بلغة السي وربما لا تكون مناسبة للشفرة المصدرية بيسيك.... الخ. ومع ذلك فيتم تطبيق بعض القواعد للعديد من اللغات.

عناصر الأسلوب الجيد

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

هيئة الشفرة

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

موديوليك ModuLiq

يجتمع أسلوب المسافة البادئة موديوليك زيرو مع عائدات الحوامل بدلا من المسافات البادئة. قارن كل ما سبق بما يلي:
if (hours < 24 && minutes < 60 && seconds < 60)return true;elsereturn false;

البايثون Python

يستخدم بايثون المسافة البادئة للإشارة إلى هياكل التحكم، لذا فالمسافات البادئة الصحيحة مطلوبة. وبفعل ذلك تكون الحاجة لوضع أقواس مع قوس (ترقيم) (مثل {... }) يتم إزالته. على الجانب الآخر، فإن النسخ واللصق اليدوي لشفرة بايثون يمكن أن يؤدي على بعض المشاكل لأن مستوى المسافة البادئة للشفرة الملصوقة يمكن ألا يكون نفس مستوى المسافة البادئة للخط الحالي. مثل هذا التنسيق يمكن أن يكون القيام به يدويا مرهقا ولكن بعض محرر نصوص وبيئة تطوير متكاملة يتمتعون بسمات خاصة للقيام بذلك تلقائيا. كما تتواجد بعض المشاكل أيضا حين يمكن جعل البايثون غير قابلة للاستخدام حين تنشر في أحد المنتديات أو الصفحات الإليكترونية التي تزيل المساحات البيضاء بالرغم من أنه من الممكن تجنب هذه المشكلة حيثما أمكن من أجل إدراج الشفرة في بطاقات تحتفظ بمساحات بيضاء مثل"<pre>... </pre>" (for لغة ترميز النص الفائق), "[code]"... "[/code]" (for bbcode), إلخ.

الهاسكيل Haskel

تتمتع لغة الهاسكيل أيضا بالدور الجانبي الذي يجعل المسافات البادئة تحدد البلوكات، ومع ذلك فعلى عكس البايثون، لا يعد وضع المسافات البادئة أمرا إجباريا في الهاسكيل- غلا أن الأقواس المجعدة والفواصل المنقوطة يمكن استخدامها بدلا منها (من حين لآخر).

المسافات

في تلك المواقف التي تتطلب وجود مسافات بيضاء فإن القواعد النحوية لمعظم لغات التنسيق الحر لا تهتم بالكم الذي يظهر. وعادة ما يستخدم الأسلوب المتعلق بالمساحات البيضاء لتعزيز القابلية للقراءة. ولا يوجد حاليا وقائع صلبة معروفة (استنتاجات من دراسات) حول كيفي يمكن أن تكون المسافات البيضاء مقروءة بصورة سهلة.
على سبيل المثال، قارن الأمثلة التالية المتكافئة في تركيبها والخاصة بشفرة السي.
int i;for(i=0;i<10;++i){
    printf("%d",i*i+i);}
مقابل
int i;for (i=0; i<10; ++i) {
    printf("%d", i*i+i);}
مقابل
int i;for (i = 0; i < 10; ++i) {
    printf ("%d", i * i + i);}
مقابل
int i;for(i = 0; i < 10; ++i) {
    printf("%d", i * i + i);}

الجدولة

استخدام الجدولة لخلق مساحات بيضاء يشير غلى بعض المسائل الخاصة حين لا يتم الانتباه بصورة كافية لأن موضع نقطة الجدولة يمكن أن يختلف تبعا للأدوات التي يتم استخدامها وتبعا لمفضلات المستخدم نفسه.
مثال على ذلك، نجد أن أحد المبرمجين يفضلون وقفات الجدولة المكونة من أربع وقفات وقد تم تثبيت مجموعة أدواته على هذه الوضعية ويستعين بها لتنسيق شفرته.
int ix; // Index to scan arraylong sum; // Accumulator for sum
بينما يفضل مبرمج آخر وقفات الجدولة المكونة من ثماني ويتم تثبيت أدواته على هذه الوضعية. وحين يفحص الشفرة، فربما يجد من الصعب قراءتها.
int ix; // Index to scan arraylong sum; // Accumulator for sum
ومن الحلول التي تستخدم بصورة كبيرة في هذا الموضوع ربما تتضمن منع استخدام الجدولة للمحاذاة أو قواعد حول كيفية وضع وقفات الجدولة. لاحظ أن علامات الجدولة تعمل بصورة أفضل حين يتم استخدامها بشكل ثابت، وتكون مقيدة بالمسافات البادئة المنطقية ولا تستخدم للمحاذاة:
class MyClass {
int foobar(int qux, // first parameter
 int quux); // second parameter
int foobar2(int qux, // first parameter
 int quux, // second parameter
 int quuux); // third parameter};