نمط المسافة البادئة

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

ملخص

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

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

تركز هذه المقالة على لغات الأقواس المعقوفة (التي تفصل بين الكتل باستخدام الأقواس المعقوفة، أو ما يُعرف أيضًا بالأقواس المعقوفة أو الأقواس العادية )، وتحديدًا لغات عائلة C ، ولكن يمكن تكييف اصطلاح مُستخدم في لغة ما ليتناسب مع لغة أخرى. على سبيل المثال، يمكن تكييف لغة تستخدم الكلمات المفتاحية BEGIN`and` بدلًا من الأقواس العادية بمعاملة `and` بنفس معاملة القوس المفتوح، وهكذا.ENDBEGIN

لا ينطبق أسلوب المسافة البادئة إلا على اللغات النصية. أما لغات البرمجة المرئية فلا تستخدم المسافة البادئة بنفس الطريقة عموماً.

بحث

على الرغم من شيوع استخدام أنماط المسافة البادئة، إلا أن الأبحاث التي تناولت قيمتها قليلة. لم تُظهر التجارب الأولى، التي أجراها وايزمان عام 1974، أي تأثير. [ 1 ] وفي عام 2023، أظهرت تجربة أجراها مورزيك وآخرون [ 2 ] تأثيرًا إيجابيًا ملحوظًا ifللعبارات المتداخلة، حيث استغرق الكود غير المُزاح وقتًا أطول للقراءة بنسبة 179% في المتوسط ​​مقارنةً بالكود المُزاح. وأكدت تجربة لاحقة أجراها هاننبرغ وآخرون [ 3 ] وجود تأثير كبير (مع أن الكود غير المُزاح في تلك التجربة استغرق وقتًا أطول للقراءة بنسبة 113%)، وكشفت أن الاختلافات في أوقات القراءة يُمكن تفسيرها بالجزء من الكود الذي يُمكن تخطيه (في حالة الكود المُزاح). وفي تجربة أخرى على كائنات JSON [ 4 استغرق الكود غير المُزاح وقتًا أطول للقراءة بنسبة 544%.

أنماط وضع دعامات التقويم

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

مثالاسم
بينما ( س == ص ) { فو (); بار (); }
ألمان
بينما ( س == ص ) { فو (); بار (); }
جنو
بينما ( س == ص ) { فو (); بار (); }
الحدادون البيض
بينما ( س == ص ) { فو (); بار (); }
كي آند آر
بينما ( س == ص ) { فو (); بار (); }
راتليف
بينما ( س == ص ) { فو (); بار (); }
هورستمان
بينما ( س == ص ) { فو (); بار (); }
بيكو
بينما ( س == ص ) { فو (); بار (); }
التلعثم
#define W(c,b) {while(c){b}} W ( x == y , f (); b ();)
APL

أنماط C/C++

تشمل سمات لغة البرمجة C و C++ وغيرها من لغات البرمجة ذات الأقواس المعقوفة ، على سبيل المثال لا الحصر:

  • موضع الأقواس بالنسبة لعناصر الكود الأخرى
  • استخدام علامات الجدولة أو المسافات
  • وضع كتل التعليمات البرمجية ذات العبارة الواحدة بين قوسين معقوفين. يشير المؤيدون إلى ميزة أن الكود الناتج يكون أكثر أمانًا، إذ لا يمكن أن يؤدي إدراج عبارة إلى تغيير في مسار التحكم بما يتعارض مع المسافة البادئة. أما العيب المذكور فهو أن الكود يصبح أطول، حيث يتطلب سطرًا واحدًا للقوس المغلق للكتلة (باستثناء البنية else ifوكتلة أخرى do{}while).

كي آند آر

يُستخدم أسلوب كيرنيغان وريتشي (K&R) بشكل شائع في كتابة أكواد لغتي C وC++، وهو أساس للعديد من الأساليب المشتقة. وقد استُخدم في نواة نظام يونكس الأصلية، وفي كتاب كيرنيغان وريتشي "لغة برمجة C" ، وكذلك في كتاب كيرنيغان وبلاوغر " عناصر أسلوب البرمجة " .

على الرغم من أن لغة البرمجة C لا تُعرّف هذا الأسلوب صراحةً، إلا أنها تتبعه باستمرار. من الكتاب:

لا يُعدّ موضع تقويم الأسنان بالغ الأهمية، على الرغم من وجود آراء راسخة لدى الكثيرين. لقد اخترنا أحد الأنماط الشائعة. اختر النمط الذي يناسبك، ثم التزم به.

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

مثال على الكود:

int main ( int argc , char * argv []) { while ( x == y ) { do_something (); do_something_else (); if ( some_error ) fix_issue (); // كتلة تعليمات واحدة بدون أقواس else continue_as_usual (); } final_thing (); }

دعامات مصرية

تُعرف الأقواس غير المتراصفة في الكتل متعددة الأسطر باسم "الأقواس المصرية" (أو "الأقواس المصرية") لتشابهها مع أذرع المصريين القدماء في بعض الوضعيات الخيالية. [ 5 ] [ 6 ] [ 7 ]

عبارات مفردة

لا تحتوي كتلة التعليمات البرمجية ذات العبارة الواحدة على أقواس، وهو ما يسبب أخطاء يسهل تفويتها مثل خطأ goto fail .

زوج واحد حقيقي

يُعدّ نمط الأقواس الحقيقي الوحيد [ 8 ] ( يُختصر إلى 1TBS أو OTBS [ 9 ] ) أحد أشكال نمط K&R حيث لا تُحذف الأقواس في كتلة جملة واحدة. [ 10 ]

bool is_negative ( int x ) { if ( x < 0 ) { return true ; } else { return false ; } }

على الرغم من أن استخدام الأقواس ليس مطلوبًا في لغات مثل C/C++، إلا أنه يضمن أن إدراج عبارة جديدة لا يؤدي إلى تدفق تحكم يتعارض مع المسافة البادئة، كما هو موضح على سبيل المثال في خطأ goto fail سيئ السمعة في Apple .

تختلف بعض المصادر حول معنى مصطلح "أسلوب الأقواس الحقيقي الواحد" - فقد يكون هناك اختلافات طفيفة بناءً على الأسلوب الأكثر شيوعًا للغة معينة، [ 11 ] [ 12 ] وقد يعلن مؤلفون فرديون عن أسلوب مختلف تمامًا باعتباره أسلوب الأقواس الحقيقي الواحد وفقًا لتفضيلاتهم الشخصية، [ 13 ] بينما يشير آخرون إليه على أنه "مصطلح خاص بالهاكرز" لـ K&R. [ 14 ]

نواة لينكس

تم تصميم شجرة مصدر نواة لينكس وفقًا لنمط K&R. [ 15 ] وينصح لينوس تورفالدز المساهمين باتباعه. تشمل سماته ما يلي:

  • يستخدم علامات الجدولة للمسافة البادئة (وليس المسافات) ويفترض وجود علامات جدولة كل 8 مسافات
  • يتطابق تخطيط الأقواس مع K&R، حيث تكون أقواس تعريفات الدوال على أسطر منفصلة، ​​بينما يكون القوس المفتوح للعبارات المركبة على نفس سطر عبارة التحكم، مفصولة بمسافة.
  • تتم محاذاة التسميات في switchالعبارة مع الكتلة المحيطة بها (يوجد مستوى واحد فقط من المسافات البادئة).
  • يبلغ الحد الأقصى لطول السطر 100 حرف، مع تفضيل الحد السابق لعام 2020 وهو 80 حرفًا. [ 16 ]
  • لا يحتاج جسم العبارة المركبة (مثل if و while و do-while) المكون من جملة واحدة إلى أن يكون محاطًا بأقواس معقوفة. أما إذا if-elseتطلبت جملة فرعية واحدة أو أكثر أقواسًا معقوفة، فيجب وضع كلتا الجملتين الفرعيتين داخل أقواس معقوفة.
دالة القوة ( عدد صحيح س ، عدد صحيح ص ) { عدد صحيح النتيجة ؛إذا كانت قيمة y أقل من الصفر ، فإن النتيجة تساوي صفرًا . وإلا ، فإن النتيجة تساوي واحدًا . طالما أن قيمة y أكبر من الصفر ، فإن النتيجة تساوي x . ثم تُعاد النتيجة .

جافا

يستخدم جزء كبير من كود جافا نمطًا مُعدَّلًا من نمط K&R، حيث يكون القوس المفتوح على نفس السطر ليس فقط للكتل داخل الدالة، بل أيضًا لتصريحات الأصناف أو الدوال. ينتشر هذا النمط على نطاق واسع لأن أدلة أسلوب Sun Microsystems الأصلية [ 17 ] [ 18 ] [ 19 ] استخدمت هذا النمط من K&R، ونتيجة لذلك، كُتبت معظم الشيفرة المصدرية القياسية لواجهة برمجة تطبيقات جافا بهذا النمط. كما أنه نمط شائع للمسافات البادئة في ActionScript و JavaScript ، إلى جانب نمط Allman .

ستروستروب

قام بيارن ستروستروب بتكييف أسلوب K&R للغة C++ في كتبه، مثل البرمجة: المبادئ والممارسة باستخدام C++ ولغة برمجة C++ . [ 20 ]

بخلاف الصيغ المذكورة أعلاه، لا يستخدم ستروستروب عبارة "cuddled else". وبالتالي، سيكتب ستروستروب [ 20 ]

إذا كانت قيمة x أقل من الصفر ، فسيتم طباعة " سالب" وكتابة x كقيمة سالبة . أما إذا كانت قيمة x أقل من الصفر ، فسيتم طباعة " غير سالب" وكتابة x كقيمة غير سالبة .

يقوم ستروستروب بتوسيع أسلوب K&R للفئات، ويكتبها على النحو التالي:

class DoubleVec { public : // إنشاء كائن DoubleVec DoubleVec ( int s ) : elem ( new double [ s ] ), sz ( s ) { } // الوصول إلى العناصر: الفهرسة double & operator []( int i ) { return elem [ i ]; } int size () { return sz ; } private : // مؤشر إلى العناصر double * elem ; // عدد العناصر int sz ; };

لا يقوم ستروبسترب بوضع مسافة بادئة للتسميات public:و private:. كذلك، في هذا النمط، بينما يبدأ القوس المفتوح للدالة في سطر جديد، يكون القوس المفتوح للفئة على نفس سطر اسم الفئة.

يُتيح ستروستروب كتابة الدوال القصيرة في سطر واحد. نمط ستروستروب هو نمط مسافة بادئة مُسمى مُتاح في مُحرر إيماكس . يُشجع ستروستروب على استخدام نمط تخطيط مُشتق من K&R مع لغة C++ كما هو مُبين في إرشاداته الأساسية الحديثة للغة C++ . [ 21 ]

BSD KNF

تستخدم أنظمة تشغيل توزيعة برمجيات بيركلي ( BSD) أسلوبًا يُطلق عليه أحيانًا اسم "النموذج الطبيعي للنواة" (KNF). ورغم أنه مُصمم في الأساس لرمز النواة، إلا أنه يُستخدم على نطاق واسع في رمز المستخدم . وهو في جوهره نسخة موثقة بدقة من أسلوب K&R المستخدم في شفرة مصدر يونكس الإصدارين 6 و7 من مختبرات بيل. [ 22 ]

تستخدم نواة نظام التشغيل SunOS ومساحة المستخدم نمطًا مشابهًا للمسافة البادئة. [ 22 ] ومثل KNF، استند هذا النمط أيضًا إلى وثائق نمط AT&T، ويُطلق عليه أحيانًا اسم نموذج بيل جوي الطبيعي. [ 23 ] نُشر دليل SunOS في عام 1996؛ ونوقشت لغة ANSI C بإيجاز. ويمكن التحقق من صحة المسافة البادئة لقائمة ملفات المصدر باستخدام برنامج cstyle الذي كتبه بيل شانون. [ 22 ] [ 23 ] [ 24 ]

في هذا النمط، يُضبط الفاصل الجدولي الصلب (ts في vi ) على ثمانية أعمدة، بينما يُعرَّف الفاصل الجدولي المرن غالبًا كعامل مساعد أيضًا (sw في vi)، ويُضبط على أربعة. تُستخدم الفواصل الجدولية الصلبة لضبط مسافة بادئة لكتل ​​التعليمات البرمجية، بينما يُستخدم الفاصل الجدولي المرن (أربع مسافات) لإضافة مسافة بادئة لجميع الأسطر المتصلة التي يجب تقسيمها على عدة أسطر.

علاوة على ذلك، لا تستخدم استدعاءات الدوال مسافة قبل الأقواس، على الرغم من أن عبارات لغة C الأصلية مثل if`f` whileو` dof` switchو` returnf` تستخدم مسافة (في حالة returnاستخدام `f` مع الأقواس). يجب على الدوال التي لا تُعلن عن أي متغيرات محلية في كتلتها الرئيسية أن تترك سطرًا فارغًا بعد قوس الفتح الخاص بكتلتها.

أمثلة:

بينما ( س == ص ) { شيء ما (); شيء_آخر (); } الشيء_النهائي ();
إذا كانت البيانات غير فارغة ( data != NULL ) والنتيجة ( res > 0 ) ، فسيتم تنفيذ ما يلي: إذا نجحت عملية تعريف الخاصية ( JS_DefineProperty) للقيمة " data " باستخدام الدالة STRING_TO_JSVAL ، فسيتم نسخها إلى سلسلة JS باستخدام الدالة JS_NewStringCopyN ، وسيتم تحرير الذاكرة المخصصة للقيمة " data " باستخدام الدالة PQfreemem . أما إذا كانت البيانات فارغة ( data ! = NULL ) ، فسيتم تنفيذ ما يلي : إذا نجحت عملية تعريف الخاصية ( JS_DefineProperty ) للقيمة " data " باستخدام الدالة OBJECT_TO_JSVAL ، فسيتم تحرير الذاكرة المخصصة للقيمة " data " باستخدام الدالة PQfreemem .
static JSBool pgresult_constructor ( JSContext * cx , JSObject * obj , uintN argc , jsval * argv , jsval * rval ) {QUEUE_EXCEPTION ( "فئة PGresult غير قابلة للإنشاء بواسطة المستخدم" );return ( JS_FALSE ); }

ألمان

يُطلق على أسلوب ألمان اسم إريك ألمان . ويُطلق عليه أحيانًا أسلوب BSD لأن ألمان كتب العديد من الأدوات المساعدة لنظام BSD Unix (مع أنه لا ينبغي الخلط بين هذا وبين "أسلوب BSD KNF" المختلف؛ انظر أعلاه).

يضع هذا النمط القوس المرتبط بعبارة التحكم في السطر التالي، مع إزاحة إلى نفس مستوى عبارة التحكم. أما العبارات الموجودة داخل الأقواس فتُزاح إلى المستوى التالي. [ 14 ]

بينما ( س == ص ) { شيء ما (); شيء آخر (); }final_thing ();

يشبه هذا الأسلوب المسافة البادئة القياسية المستخدمة في لغات باسكال و Transact-SQL ، حيث تكون الأقواس مكافئة للكلمات الرئيسية beginو end.

(* مثال على نمط مسافة بادئة كود ألمان في باسكال *) الإجراء dosomething ( x , y : عدد صحيح ) ; ابدأ بينما x = y do ابدأ شيء ما () ; شيء_آخر () ; نهاية ; نهاية ;

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

على سبيل المثال، ما يلي لا يزال صحيحًا من الناحية النحوية:

// بينما (س == ص) { شيء ما (); شيء آخر (); }

كما هو الحال مع هذا:

// for (int i=0; i < x; i++) // while (x == y) if ( x == y ) { something (); something_else (); }

حتى مع هذا، مع التجميع المشروط:

int c ; #ifdef HAS_GETCH while (( c = getch ()) != EOF ) #else while (( c = getchar ()) != EOF ) #endif { do_something ( c ); }

النسخة: ألمان-8

يستخدم نمط Allman-8 علامات المسافة البادئة ذات الثماني مسافات والحد الأقصى للأعمدة البالغ 80 عمودًا، كما هو الحال في نسخة نواة لينكس من K&R. يُزعم أن هذا النمط يُحسّن من سهولة القراءة على أجهزة العرض. كما يُساعد حجم المسافة البادئة وتقييد عدد الأعمدة في توفير إشارة بصرية لتحديد التداخل المفرط بين كتل التعليمات البرمجية. تجتمع هذه المزايا لتوفير إرشادات ضمنية للمطورين الجدد والمتعلمين لإدارة تعقيد التعليمات البرمجية.

الحدادون البيض

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

زعم موقع "جارجون فايل" أن أسلوبي "وايتسميث" و "ألمان " كانا الأكثر شيوعًا في مجال التدعيم عام 1991 ، حيث حظيا بشعبية متساوية تقريبًا في ذلك الوقت. [ 14 ] [ 25 ]

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

على غرار أسلوب راتليف، يتم وضع مسافة بادئة للقوس المغلق بنفس طريقة وضع المسافات البادئة للعبارات داخل الأقواس. [ 26 ]

بينما ( س == ص ) { شيء ما (); شيء آخر (); }final_thing ();

تتشابه مزايا هذا الأسلوب مع مزايا أسلوب ألمان . يتم فصل الكتل بوضوح عن عبارات التحكم. ويؤكد محاذاة الأقواس مع الكتلة أن الكتلة بأكملها، من الناحية المفاهيمية والبرمجية، عبارة مركبة واحدة. كما يؤكد ترك مسافة بادئة للأقواس أنها تابعة لعبارة التحكم. ولم يعد القوس الأخير محاذيًا للعبارة، بل أصبح محاذيًا للقوس الأول.

مثال:

إذا كانت البيانات غير فارغة ( data != NULL ) والنتيجة ( res > 0 ) ، فسيتم تنفيذ ما يلي: إذا لم يتم تعريف الخاصية ( data ) باستخدام الدالة JS_DefineProperty ، فسيتم عرض رسالة خطأ " خطأ داخلي ! " ، ثم الانتقال إلى قسم الأخطاء ( err ) . بعد ذلك ، سيتم تحرير الذاكرة المخصصة للبيانات ( data ) باستخدام الدالة PQfreemem . أما إذا لم يتم تعريف الخاصية ( data ) باستخدام الدالة JS_DefineProperty ، فسيتم عرض رسالة خطأ " خطأ داخلي!" ، ثم الانتقال إلى قسم الأخطاء ( err ) .

else ifيتم التعامل معها كبيان، تمامًا مثل #elifبيان المعالج المسبق.

جنو

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

اشتهر هذا النمط بفضل ريتشارد ستالمان ، وقد يكون متأثرًا بخبرته في كتابة أكواد لغة ليسب . [ 28 ] في ليسب، يُعدّ ما يُعادل الكتلة (progn) كيان بيانات من الدرجة الأولى، ويُساعد تخصيص مستوى مسافة بادئة خاص به على التأكيد على ذلك، بينما في لغة سي، تُعتبر الكتلة مجرد بناء جملة. يمكن أيضًا إيجاد هذا النمط في بعض كتب لغات البرمجة ALGOL و XPL من ستينيات وسبعينيات القرن الماضي. [ 29 ] [ 30 ]

على الرغم من أن أسلوب برمجة GNU لا يتضمن مسافة بادئة بحد ذاته، إلا أنه يتضمن أيضًا مسافة بعد اسم الدالة - قبل القوس الأيسر لقائمة الوسائط. [ 27 ]

static char * concat ( char * s1 , char * s2 ) { while ( x == y ) { something (); something_else (); } final_thing (); }

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

توصي معايير ترميز جنو بهذا الأسلوب، ويستخدمه جميع القائمين على صيانة برامج مشروع جنو تقريبًا.

يقوم محرر النصوص GNU Emacs وأمر المسافة البادئة في أنظمة GNU بإعادة تنسيق الكود وفقًا لهذا النمط افتراضيًا. [ 31 ] قد يجد من لا يستخدمون GNU Emacs، أو محررات النصوص القابلة للتوسيع والتخصيص، أن إعدادات المسافة البادئة التلقائية في محرراتهم غير مناسبة لهذا النمط. مع ذلك، تتوافق العديد من المحررات التي تعتمد نمط KNF افتراضيًا مع نمط GNU عند ضبط عرض علامة الجدولة على مسافتين؛ وبالمثل، يتكيف GNU Emacs جيدًا مع نمط KNF بمجرد ضبط عرض علامة الجدولة على ثماني مسافات. في كلتا الحالتين، تؤدي إعادة التنسيق التلقائية إلى فقدان التباعد الأصلي، لكن المسافة البادئة التلقائية للأسطر ستعمل بشكل صحيح.

ينصح ستيف ماكونيل ، في كتابه "Code Complete "، بعدم استخدام هذا الأسلوب: إذ يضع علامة "رعب البرمجة" على نموذج برمجي يستخدمه، رمزًا للبرمجة الخطيرة للغاية، ويذكر أنه يعيق سهولة القراءة. [ 26 ] كما توصي وثائق أسلوب كتابة نواة لينكس بعدم استخدام هذا الأسلوب، وتحث القراء على حرق نسخة من معايير برمجة جنو كـ"لفتة رمزية عظيمة". [ 32 ]

هورستمان

يُطبّق كتاب "مفاهيم الحوسبة باستخدام أساسيات لغة C++" للمؤلف كاي إس. هورستمان، الصادر عام 1997، أسلوب ألمان بوضع أول عبارة في الكتلة على نفس سطر القوس المفتوح. ويُستخدم هذا الأسلوب أيضًا في أمثلة من كتاب "دليل مستخدم باسكال وتقريره" لجنسن وويرث . [ 33 ]

بينما ( س == ص ) { شيء ما (); شيء_آخر (); //... إذا ( س < 0 ) { اطبع ( "سالب" ); سالب ( س ); } وإلا { اطبع ( "غير سالب" ); غير سالب ( س ); } } الشيء_النهائي ();

يجمع هذا النمط بين مزايا نمط ألمان من خلال الحفاظ على المحاذاة الرأسية للأقواس لسهولة القراءة وتحديد الكتل بسهولة، مع توفير سطر من نمط K&R. ومع ذلك، يستخدم إصدار 2003 الآن نمط ألمان بالكامل. [ 34 ]

بيكو

هذا هو الأسلوب الأكثر شيوعًا في لغة بيكو من قِبل مصمميها. تفتقر بيكو إلى عبارات الإرجاع، وتستخدم الفواصل المنقوطة كفواصل بين العبارات بدلًا من علامات الإنهاء. ينتج عنها هذا التركيب: [ 35 ]

stuff(n): { x: 3 * n; y: do_stuff(x); y + x } 

تتشابه مزايا وعيوب هذا الأسلوب مع تلك المتعلقة بتوفير مساحة الشاشة باستخدام أسلوب K&R. ومن المزايا الإضافية أن الأقواس البادئة والختامية متسقة في الاستخدام (إذ تشترك كلتاهما في المساحة مع سطر من التعليمات البرمجية)، مقارنةً بأسلوب K&R، حيث يشترك أحد الأقواس في المساحة مع سطر من التعليمات البرمجية، بينما يكون للقوس الآخر سطر خاص به.

راتليف

في كتاب "المبرمجون في العمل" [ 36 ] ، ناقش سي. واين راتليف، المبرمج الأصلي للغتي البرمجة الشهيرتين من الجيل الرابع dBase -II وdBase-III ، أسلوبًا مشابهًا لأسلوب 1TBS، لكن قوس الإغلاق فيه يتماشى مع مسافة بادئة الكتلة المتداخلة. وأشار إلى أن هذا الأسلوب وُثِّق في الأصل في مواد من شركة Digital Research Inc. وقد أُطلق على هذا الأسلوب أحيانًا اسم "أسلوب اللافتة " [ 37 ] ، ربما لتشابهه مع لافتة معلقة على عمود. في هذا الأسلوب، الذي يُعدّ بالنسبة لأسلوب Whitesmiths بمثابة أسلوب K&R بالنسبة لأسلوب Allman، تكون مسافة بادئة عنصر التحكم في الإغلاق مماثلة لمسافة بادئة العنصر الأخير في القائمة (وبالتالي يفقد بروزه بشكل صحيح) [ 26 ]. قد يُسهّل هذا الأسلوب المسح البصري للبعض، حيث أن عناوين أي كتلة هي الشيء الوحيد الذي يتم إبرازه في ذلك المستوى (وتقوم النظرية على أن عنصر التحكم في الإغلاق للكتلة السابقة يتداخل مع التدفق البصري لعنوان الكتلة التالية في أسلوبي K&R وAllman). يستخدم كيرنيغان وبلاوجر هذا الأسلوب في كود Ratfor في أدوات البرمجيات . [ 38 ]

// في لغة C for ( i = 0 ; i < 10 ; i ++ ) { if ( i % 2 == 0 ) { do_something ( i ); } else { do_something_else ( i ); } }

أسلوب لغة C المشتقة

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

أسلوب التلعثم

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

يفضل النمط التقليدي للغة ليسب استخدام مسافات بادئة ضيقة للغاية (عادةً مسافتين) لأن شيفرة ليسب عادةً ما تكون متداخلة بعمق كبير، إذ لا تحتوي ليسب إلا على تعابير ، دون وجود فئة مميزة من العبارات ؛ وتُزاح وسائط الدوال في الغالب إلى نفس المستوى لتوضيح وضعها المشترك داخل التعبير المُحيط. ويرجع ذلك أيضًا، بغض النظر عن الأقواس، إلى أن ليسب لغة مختصرة جدًا، إذ تحذف حتى الأشكال الشائعة من الشيفرة النمطية البسيطة باعتبارها غير مفيدة، مثل elseالكلمة المفتاحية في كتلة، وتستبدلها بشكل موحد بـ .if : then | else(if expr1 expr2 expr3)

// C for ( i = 0 ; i < 10 ; i ++ ) { if ( i % 2 == 0 ) { do_something ( i );} else { do_something_else ( i ); do_third_thing ( i );}}

 

;; Lisp ( dotimes ( i 10 ) ( if ( = ( rem i 2 ) 0 ) ( do-something i ) ( progn ( do-something-else i ) ( do-third-thing i ))))

ملاحظة: prognهذه عملية لتقييم عدة تعبيرات فرعية بالتسلسل بحثًا عن تأثيراتها ، مع تجاهل جميع القيم المُعادة باستثناء القيمة الأخيرة (الرقم n). في حال الرغبة في الحصول على جميع القيم المُعادة، valuesتُستخدم هذه العملية.

أسلوب هاسكل

يمكن أن يجعل تخطيط لغة هاسكل وضع الأقواس اختياريًا، على الرغم من أن الأقواس والفواصل المنقوطة مسموح بها في اللغة. [ 39 ] المقطعان التاليان مقبولان بنفس القدر للمترجم:

بدون أقواس = do text <- getContents let firstWord = head $ words text bigWord = map toUpper firstWord putStrLn bigWordدالة `braceful` = do { text <- getContents ; let { firstWord = head $ words text ; bigWord = map toUpper firstWord } ; putStrLn bigWord }

في لغة هاسكل، يمكن استبدال الأقواس المعقوفة بنمط التنسيق. عادةً ما تُحذف الأقواس المعقوفة والفاصلة المنقوطة في الأجزاء الإجرائيةdo ونص البرنامج عمومًا، ولكن يُستخدم هذا النمط عادةً للقوائم والسجلات والعناصر النحوية الأخرى المكونة من زوج من الأقواس المعقوفة أو المعقوفة، مفصولة بفواصل أو فواصل منقوطة. [ 40 ] إذا حذف الكود الذي يلي الكلمات المفتاحية ` <code> < ...whereletof

أسلوب APL

كمثال على مدى اختصار لغة APL عادةً، إليك تطبيق دالة الخطوة للعبة الحياة لكونواي :

الحياة { 1 . 3 4 =+ / + ¯1 0 1 ∘. ¯1 0 1 ¨ }

يُشابه أسلوب لغة APL C أسلوب APL المختصر، ويُستخدم بكثرة في تطبيقاتها. [ 42 ] وقد كان آرثر ويتني رائدًا في هذا الأسلوب ، ويُستخدم بكثافة في تطبيق K ، وهو مشروع آرثر الخاص. كما تُطبّق لغة البرمجة J بهذا الأسلوب أيضًا. والجدير بالذكر أن بعض تطبيقات APL لا تستخدم هذا الأسلوب من لغة C، وتحديدًا: GNU APL وDyalog APL.

بالإضافة إلى نمط المسافة البادئة للغة C في لغة APL، عادةً ما يتم اختصار الأسماء إلى حرف واحد أو حرفين: لتقليل مقدار المسافة البادئة، والتعبيرات التي تمتد على عدة أسطر. [ 43 ]

حجم الانبعاج

عادةً، يستخدم المبرمجون نفس عرض المسافة البيضاء لترك مسافة بادئة لكل كتلة من التعليمات البرمجية، وتتراوح العروض الشائعة الاستخدام من 1 إلى 4 مسافات.

أظهرت تجربة أجريت على كود باسكال عام 1983 أن حجم المسافة البادئة يؤثر بشكل كبير على سهولة الفهم. وقد ثبت أن أحجام المسافة البادئة التي تتراوح بين حرفين وأربعة أحرف هي الأمثل. [ 44 ]

على الرغم من أن كليهما يؤثر على التخطيط العام للتعليمات البرمجية، إلا أن حجم المسافة البادئة مستقل عن نمط المسافة البادئة الذي تمت مناقشته هنا.

الجدولة مقابل المسافة

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

قد يؤدي تخزين أحرف الجدولة في التعليمات البرمجية إلى عدم محاذاة مرئية عند عرضها في سياقات مختلفة، مما يتعارض مع قيمة نمط المسافة البادئة.

لا يوجد إجماع بين المبرمجين حول تخزين علامات الجدولة. يستشهد مؤيدو تخزينها بسهولة الكتابة وصغر حجم الملفات النصية، حيث أن علامة الجدولة الواحدة تؤدي وظيفة عدة مسافات. بينما يرى معارضوها، مثل جيمي زاوينسكي ، أن استخدام المسافات بدلاً من علامات الجدولة يزيد من قابلية نقل البرامج عبر المنصات المختلفة . [ 45 ] في المقابل، يرى آخرون، مثل واضعي معايير برمجة ووردبريس ، أن علامات الجدولة الثابتة تزيد من قابلية النقل. [ 46 ] وقد أظهر مسحٌ لأفضل 400,000 مستودع على منصة غيت هاب أن المسافات أكثر شيوعاً. [ 47 ]

يمكن ضبط العديد من محررات النصوص، بما في ذلك Notepad++ و TextEdit و Emacs و vi و nano ، إما لحفظ علامات الجدولة عند إدخالها باستخدام مفتاح الجدولة، أو لتحويلها إلى مسافات (بناءً على عرض الجدولة المُحدد) بحيث لا تُضاف علامات الجدولة إلى الملف عند الضغط على مفتاح الجدولة. بعض المحررات قادرة على تحويل علامات الجدولة إلى مسافات والعكس.

يمكن ضبط بعض برامج تصفح الملفات النصية ، مثل برنامج less ، لعرض علامات التبويب. كما يمكن لبعض الأدوات، مثل أداة التوسيع / التوسيع، التحويل أثناء التشغيل باستخدام المرشحات.

أتمتة الأنماط

يمكن لأداة ما أن تقوم بأتمتة تنسيق التعليمات البرمجية وفقًا لنمط المسافة البادئة، على سبيل المثال أمر Unixindent .

يوفر برنامج Emacs أوامر لتعديل المسافة البادئة، بما في ذلك الضغط Tabعلى زر معين في سطر معين. M-x indent-regionيقوم هذا الأمر بإضافة مسافة بادئة إلى الكود.

تُعدّ علامات الجدولة المرنة نمطًا للجدولة يتطلب دعمًا من محرر النصوص، حيث يتم الحفاظ على محاذاة كتل النص بأكملها تلقائيًا عند تغيير طول سطر واحد في الكتلة.

فقدان السيطرة على المكعبات

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

قد تكون العبارات المركبة الطويلة مؤشراً على التعقيد الزائد في الكود، والذي يمكن حله عن طريق إعادة هيكلة الكود .

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

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

تسمح بعض محررات النصوص للمبرمج بالانتقال بين القوسين المتناظرين في كتلة برمجية. على سبيل المثال، ينتقل محرر vi إلى القوس الذي يحيط بنفس الكتلة التي يوجد أسفل المؤشر عند الضغط على %مفتاح معين. وبما أن مفتاح مؤشر النص next(أي nمفتاح معين) يحتفظ بمعلومات اتجاه الموضع (سواء تم الضغط على المفتاح الآخر upأو المفتاح الأول سابقًا)، فإنه يمكن استخدام ماكرو النقطة ( مفتاح معين) لوضع مؤشر النص على القوس التالي، [ 48 ] مع مراعاة أسلوب كتابة برمجي مناسب. بدلاً من ذلك، يمكن استخدام فحص حدود الكتلة باستخدام المفتاح لفرض معيار برمجي.down.%

هناك طريقة أخرى للحفاظ على وضوح الكتلة البرمجية وهي استخدام التعليقات بعد القوس المغلق. على سبيل المثال:

for ( int i = 0 ; i < total ; i ++ ) { foo (); } //for(i)
إذا كان ( س < 0 ) { } // إذا كان (س < 0)

من عيوب ذلك الحفاظ على نفس الكود في مواقع متعددة - أعلى وأسفل الكتلة.

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

انظر أيضاً

مراجع

  1. وايزمان، لورانس مارك (1974). منهجية لدراسة التعقيد النفسي لبرامج الحاسوب . CSRG-37 (تقرير فني). مجموعة أبحاث أنظمة الحاسوب، جامعة تورنتو . OCLC 1085612768. technicalreportc37univ عبر أرشيف الإنترنت . 
  2. مورزيك، يوهانس؛ هاننبرغ، ستيفان؛ ويرغر، أولي؛ غروهن، فولكر (2023). المسافة البادئة في شفرة المصدر: تجربة تحكم عشوائية حول قابلية قراءة تدفقات التحكم في شفرة جافا ذات التأثيرات الكبيرة . وقائع المؤتمر الدولي الثامن عشر لتقنيات البرمجيات - ICSOFT. روما ، إيطاليا. ص 117-128 . doi : 10.5220/0012087500003538 . ISBN  978-989-758-665-1 عبر ستيفان هاننبرغ على Google Drive (نسخة ما قبل الطباعة).
  3. هاننبرغ، ستيفان؛ مورزيك، يوهانس؛ غروهن، فولكر (9 أغسطس 2024). "المسافة البادئة ووقت القراءة: تجربة عشوائية مضبوطة حول الاختلافات بين عبارات if المُولَّدة بمسافة بادئة وبدونها" . هندسة البرمجيات التجريبية . 29 (5): 134. doi : 10.1007/s10664-024-10531-y . ISSN 1573-7616 . 
  4. هاننبرغ، ستيفان؛ مورزيك، يوهانس؛ فيرغر، أولي؛ غريس، ستيفان؛ غروهن، فولكر (2024). "المسافة البادئة ووقت القراءة: تجربة مضبوطة حول الاختلافات بين كائنات JSON المُنشأة ذات المسافة البادئة وغير المُنشأة" . في: فيل، هانز-جورج؛ دومينغيز مايو، فرانسيسكو خوسيه؛ فان سينديرين، مارتن؛ ماسياسيك، ليزيك أ. (محررون). تقنيات البرمجيات . سلسلة اتصالات في علوم الحاسوب والمعلومات. المجلد 2104. تشام: سبرينغر نيتشر سويسرا. الصفحات 50-75 . doi : 10.1007/978-3-031-61753-9_4 . ISBN   978-3-031-61753-9.
  5. "دليل أسلوب جافا" . مؤرشف من الأصل بتاريخ ١٢ يوليو ٢٠١٨. يُسمح باستخدام الأقواس المعقوفة "المصرية" أو الأقواس المعقوفة على نمط لغة C.
  6. "الأقواس المصرية" . Foldoc . مصطلح فكاهي [ sic ] لأسلوب K&R في كتابة المسافات البادئة، ويشير إلى وضعية "يد واحدة مرفوعة في الأمام، والأخرى منخفضة في الخلف".
  7. "دليل أسلوب جافا سكريبت من جوجل" . تتبع الأقواس المعقوفة أسلوب كيرنيغان وريتشي ("الأقواس المصرية") للكتل غير الفارغة والبنى الشبيهة بالكتل.
  8. داروين، إيان ف. (1988). فحص برامج لغة C باستخدام Lint . كاليفورنيا: أورايلي وشركاؤه. ص 51. ISBN  9780937175309.
  9. "1TBS" .
  10. "الأسلوب الفني" . تم الاطلاع عليه بتاريخ 4 أغسطس 2025 .
  11. "أنماط الأقواس وجافا سكريبت" . 7 يناير 2013. تم الاطلاع عليه بتاريخ 8 نوفمبر 2018 .
  12. "ESLint bracket-style" . تم الاطلاع عليه بتاريخ 24 فبراير 2026 .
  13. "أسلوب التقويم الأمثل - أيلانتو" . 6 أبريل 1998. تم الاطلاع عليه بتاريخ 4 أغسطس 2025 .
  14. 1 2 3 "ملف المصطلحات" . 4.4.7. 29 ديسمبر 2003. تم الاطلاع عليه بتاريخ 18 أغسطس 2014 .
  15. يوجد وصف تفصيلي للأسلوب على موقع kernel.org .
  16. لارابيل، مايكل. "نواة لينكس تُهمل أسلوب كتابة الأسطر المكون من 80 حرفًا" . فورونيكس . فورونيكس ميديا . تم الاطلاع عليه في 1 مايو 2022 .
  17. ريدي، أتشوت (30 مارس 2000). "دليل أسلوب كتابة كود جافا" (ملف PDF) . صن مايكروسيستمز. مؤرشف من النسخة الأصلية (ملف PDF) بتاريخ 28 فبراير 2006. تم الاطلاع عليه بتاريخ 30 مايو 2008 .
  18. "اتفاقيات كتابة كود جافا" (ملف PDF) . شركة صن مايكروسيستمز. ١٢ سبتمبر ١٩٩٧. مؤرشف من النسخة الأصلية (ملف PDF) بتاريخ ١٣ مايو ٢٠٠٨. تم الاطلاع عليه بتاريخ ٣٠ مايو ٢٠٠٨ .
  19. "اتفاقيات كتابة التعليمات البرمجية للغة برمجة جافا" . صن مايكروسيستمز. 20 مارس 1997. تم الاطلاع عليه بتاريخ 30 مايو 2008 .
  20. 1 2 ستروستروب ، بيارن (سبتمبر 2010). "دليل نمط الشراكة بين القطاعين العام والخاص" (PDF) .
  21. ^ ستروستروب، بيارن. "المبادئ التوجيهية الأساسية لـ C++" . جيثب . تم الاسترجاع في 3 نوفمبر 2018 .
  22. 1 2 3 شانون، بيل (19 أغسطس 1996). "أسلوب لغة C ومعايير البرمجة لنظام التشغيل SunOS" (ملف PDF) . 1.8. شركة صن مايكروسيستمز . تم الاطلاع عليه بتاريخ 15 يونيو 2019 .
  23. 1 2 جريج، بريندان. "دليل أسلوب DTraceToolkit" . تم الاطلاع عليه في 6 فبراير 2015 .
  24. شانون، بيل (9 سبتمبر 1998). "cstyle.pl" . illumos-gate . 1.58. شركة صن مايكروسيستمز . تم الاطلاع عليه في 6 فبراير 2015 .
  25. "ملف المصطلحات (الإصدار 2.4.3)" . 2.4.3. 23 يناير 1991. تم الاطلاع عليه بتاريخ 14 مايو 2024 .
  26. 1 2 3 ماكونيل، ستيف (2004). Code Complete: A practical handbook of software building . ريدموند، واشنطن: Microsoft Press. ص 746-747 . ISBN  978-0-7356-1967-8.
  27. 1 2 "تنسيق شفرة المصدر" . معايير ترميز جنو . تم الاطلاع عليه في 6 يونيو 2016 .
  28. ستالمان، ريتشارد (28 أكتوبر 2002). "تجاربي مع لغة ليسب وتطوير برنامج جنو إيماكس (نص كلمة ألقيت في المؤتمر الدولي للغة ليسب)" . تم الاطلاع عليه بتاريخ 6 يونيو 2016 .
  29. باومان، ريتشارد [بالألمانية] ؛ فيليسيانو، مانويل؛ باور، فريدريش لودفيج ؛ ساميلسون، كلاوس (1964). مقدمة إلى لغة ALGOL - مدخل للمبتدئين، مع التركيز على الاستخدامات العملية للغة الخوارزمية . سلسلة في الحوسبة الآلية. إنجلوود كليفس، نيو جيرسي، الولايات المتحدة الأمريكية: برنتيس هول، إنك . ISBN 0-13-477828-6LCCN 64-10740 . ark:/13960/t6qz35p37 . تم الاطلاع عليه بتاريخ 23 أكتوبر 2022 . {{cite book}}عدم توافق رقم ISBN / التاريخ ( مساعدة )
  30. دبليو إم ماكيمان، جيه جيه هورنينج، ودي بي وورتمان، مولد المترجمات ، 1970، https://archive.org/details/compilergenerato00mcke
  31. تم اختباره على نموذج الكود المصدري أعلاه على نظام Ubuntu 18.04 مع GNU indent 2.2.11 و GNU Emacs 25.2.2 تم تشغيله باستخدامemacs --no-init-file.
  32. "أسلوب كتابة كود نواة لينكس" . تم الاطلاع عليه في 1 يناير 2017 .
  33. ^ كاثلين جنسن. ويرث، نيكلاوس (1974). دليل مستخدم وتقرير باسكال . سبرينغر-فيرلاغ.
  34. دليل أسلوب هورستمان
  35. أونو، أساكو (2013). "منهجية لتعليم أسلوب البرمجة المثالي مع مراعاة تقلبات أسلوب البرمجة لدى الطلاب". مؤتمر IEEE Frontiers in Education لعام 2013 (FIE) . الصفحات 1908-1910 . doi : 10.1109/fie.2013.6685167 . ISBN  9781467352611. S2CID 28385526 . 
  36. لامرز، سوزان (1986). المبرمجون في العمل . مطبعة مايكروسوفت. رقم ISBN 978-0-914845-71-3.
  37. باتي، جيم. "توثيق الأسلوب الفني 2.05" . الأسلوب الفني . تم الاطلاع عليه بتاريخ 24 أبريل 2015 .
  38. كيرنيغان، برايان دبليو؛ بلاوجر، بي جيه (1976). أدوات البرمجيات . أديسون-ويسلي. ISBN 9780201036695.
  39. "تقرير هاسكل 98" . haskell.org . تم الاطلاع عليه بتاريخ 3 مارس 2016 .
  40. ليبوفاتشا، ميران. "صنع أنواعنا وفئات الأنواع الخاصة بنا" . learnyouahaskell.com . تم الاطلاع عليه في 3 فبراير 2016 .
  41. تقرير هاسكل 1.2 (1992)، ص 131 ب.4 "التخطيط"
  42. ^ "J Incunabulum" . jsoftware.com . تم الاسترجاع في 19 مايو 2022 .
  43. "شفرة المصدر J" . github.com . تم الاطلاع عليه بتاريخ 12 سبتمبر 2024 .
  44. ميارا، ريتشارد جيه؛ موسلمان، جويس أ؛ نافارو، خوان أ؛ وشنايدرمان، بن (نوفمبر 1983). "مسافة بادئة البرنامج وقابلية الفهم" (ملف PDF) . مجلة اتصالات رابطة مكائن ​​الحوسبة . 26 (11): 861-867 . doi : 10.1145/182.358437 . S2CID 11767796. تاريخ الاسترجاع: 3 أغسطس 2017 . 
  45. زاوينسكي، جيمي (2000). "علامات الجدولة مقابل المسافات: حرب مقدسة أبدية" . تم الاطلاع عليه بتاريخ 6 يونيو 2016 .
  46. "معايير ترميز ووردبريس" . تم الاطلاع عليه بتاريخ 6 يونيو 2016 .
  47. هوفا، فيليبي (26 يوليو 2017). "400,000 مستودع على GitHub، مليار ملف، 14 تيرابايت من التعليمات البرمجية: المسافات أم علامات الجدولة؟" . Medium . تم الاطلاع عليه في 9 يوليو 2019 .
  48. لامب، ليندا (1998). تعلم محرر vi . أورايلي. ISBN 9781565924260.

علامات الجدولة والمسافات