بيت / نظرة عامة على ويندوز / أسلوب البرمجة هو مسافات أو علامات التبويب. أنماط المسافة البادئة عند البرمجة بلغة C. الاختلافات في سلوك المسافات وعلامات التبويب

أسلوب البرمجة هو مسافات أو علامات التبويب. أنماط المسافة البادئة عند البرمجة بلغة C. الاختلافات في سلوك المسافات وعلامات التبويب

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

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

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

الاختلافات في سلوك المسافات وعلامات التبويب

خذ بعين الاعتبار الجزء التوضيحي التالي من التعليمات البرمجية:

إذا (mStatus != Status.PENDING) (التبديل (mStatus) (الحالة RUNNING: طرح IllegalStateException جديد ("لا يمكن تنفيذ المهمة: " + "المهمة قيد التشغيل بالفعل.")؛ انتهت الحالة: طرح IllegalStateException الجديد ("لا يمكن تنفيذ المهمة.") : " + "تم تنفيذ المهمة بالفعل " + "(يمكن تنفيذ المهمة مرة واحدة فقط)"); ) )

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

إذا لم نقم بالمحاذاة مع المسافات، ولكن مع علامات التبويب، فسنحصل على نفس المظهر بأنفسنا، ولكن بالنسبة لمبرمج آخر تم تكوين محرره لنسبة جدولة مختلفة، على سبيل المثال، ليس 4، مثلنا، ولكن 8، ستتحول الخطوط إلى حد كبير إلى اليمين، ومع نسبة علامة تبويب 2 - إلى اليسار. في الوقت نفسه، ستزحف حتما الأسطر الثانية من الرسالة النصية. سيحدث نفس الشيء مع محاذاة التعليقات في نهاية أسطر التعليمات البرمجية. لن يتم محاذاة هذه العناصر إلى اليسار بشكل جيد بعد الآن عبر الكتلة التي تحتوي على مستويات مختلفة من التداخل.

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

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

إذًا ما هي الطريقة الصحيحة لتنسيق التعليمات البرمجية الخاصة بك – باستخدام مسافات أو علامات تبويب؟ أو ربما كلاهما؟ دعونا نحاول معرفة ذلك.

تاريخ الجدولة - حقائق مثيرة للاهتمام

رحلة قصيرة في التاريخ. تم تقديم الجدولة (التبويب الأفقي) في الأصل في الآلات الكاتبة الميكانيكية لتسهيل إنشاء الجداول، كما تم استخدامها أيضًا لإنشاء مسافة بادئة للفقرة. لم يكن لها حجم جامد. قبل العمل، يقوم المستخدم بنفسه بتعيين علامات الجدولة التي يحتاجها باستخدام آلية خاصة. بنفس الطريقة التي يمكن القيام بها الآن في برنامج MS Word. ونتيجة لذلك، مع الضغط المتتالي على مفتاح tab (المشار إليه بـ ←)، يتحرك النقل تلقائيًا إلى اليسار على طول جميع المواضع المحددة مسبقًا، وبالتالي يتحرك منطقة الإدخال إلى اليمين.

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

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

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

وفقًا للشرط الأخير، كان لدى المطورين خيار من بين الخيارات الخمسة الحقيقية التالية: 4، 5، 8، 10 و16. لم يكن الخياران الأولان مناسبين للغاية، نظرًا لأن الاختلاف في أطوال الكلمات الإنجليزية غالبًا ما يتجاوز هذه القيم . بدت المسافة البادئة المكونة من 16 حرفًا كبيرة جدًا، مما أدى إلى تقليل إمكانية استخدام الأداة والحد بشكل كبير من عدد الأعمدة في الجداول. كان هناك خيار بين 8 و 10 أحرف.

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

بضع كلمات حول المسافة البادئة للفقرة، لأنها تقترب أيضًا من موضوعنا. وفقًا لـ OST 29.115-88، عند الطباعة على الآلات الكاتبة، يجب أن تكون المسافة البادئة للفقرة مساوية لثلاث حدود، ولكن يُسمح باستخدام مسافة بادئة مكونة من خمس حدود. بالإضافة إلى ذلك، يُنصح بوضع 29 سطرًا (+-1) في الصفحة الواحدة (وهو ما يعادل تقريبًا مسافة ونصف على الآلة الكاتبة). إن شرط وجود مسافة بادئة قدرها 3 نبضات بفاصل زمني واحد ونصف أمر غريب جدًا، وسأشرح أدناه السبب.

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

من المحتمل أن مترجمي OST 29.115-88، دون الخوض في تفاصيل الطباعة، أخذوا هذه القيمة كقيمة ثابتة للخطوط الثابتة أحادية المسافة للآلات الكاتبة، وفي الوقت نفسه أنشأوا تباعد سطر ونصف كمعيار، لأنه مع مسافة أحادية الخط وجودة طباعة منخفضة، بدا التباعد المفرد سيئًا للغاية.

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

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

النظرة الإستراتيجية لحل المشكلات

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

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

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

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

قضايا الفضاء

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

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

بالإضافة إلى ذلك، لإزالة المسافة البادئة الزائدة، بدلاً من الضغط المعتاد على Backspace، عليك الضغط على مجموعة المفاتيح Shift+Tab. لكن هذه بالطبع مسألة عادة.

مشاكل علامة التبويب

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

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

الاستنتاجات

أولاً، سأقول بضع كلمات عن حجم المسافات البادئة في حد ذاتها. بالنسبة لمعظم لغات البرمجة الشائعة، يبلغ حجم المسافة البادئة المثالي 4 أحرف بالضبط. لماذا بالضبط؟ لأنه اتضح بالفعل أن معظم المصادر يتم تنسيقها بهذه الطريقة، والتعديل الدقيق على "المثالي" الذاتي المكون من 3 أو 5 أحرف يفقد معناه.

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

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

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

  1. استخدم المسافات البادئة ذات الحجم الفعلي القياسي. لجافا، باسكال، C، C ++، الخ. المعيار الفعلي هو 4 أحرف من المسافة البادئة، بغض النظر عن مدى رغبتنا في استخدام حجم مختلف.
  2. إذا تم اتباع النقطة 1، فلا يهم مطلقًا ما تستخدمه لوضع مسافة بادئة. إذا قمت بإدراجها بمسافات، فسيكون ذلك جيدًا - سيبدو الكود الخاص بك قابلاً للقراءة في كل مكان، ولن يتم الزحف إلى أي شيء على الإطلاق. سوف يعتاد المبرمجون الآخرون على التنسيق الصحيح عند قراءة التعليمات البرمجية الخاصة بك. إذا قمت بوضع مسافة بادئة لها بعلامات التبويب، فسيكون ذلك أفضل - ستعطي المبرمجين الآخرين خيارًا - قم بتشغيل حجم علامة التبويب الصحيح في المحرر وقراءة التعليمات البرمجية المنسقة بشكل صحيح، أو قراءتها بالمسافات البادئة المعتادة، ولكن التعليقات الزاحفة والفردية الخطوط التي تم تطبيق المحاذاة فيها.
  3. يمكن الاختيار في النقطة 2 اعتمادًا على كيفية استخدام الكود الخاص بك في المستقبل. إذا تم إدراج كتلها في كود شخص آخر، فمن المؤكد أنه من المنطقي تحديد الجدولة لتسهيل قيام المُدخل بضبط التنسيق. إذا كان المصدر مخصصًا للنشر على الإنترنت، حيث يتم تناول علامة التبويب أو تثبيتها على 8 أحرف، فيمكنك تحديد مسافات للتخلص من الخطوة الإضافية لإعداد المصدر للنشر. إذا كانت مؤسستك قد أنشأت بالفعل قواعد تنسيق معينة، فلن يكون لديك خيار بعد الآن :)

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

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

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

إذا كان لديك واحدة ولكنك بحاجة إلى أخرى

يوجد محرر رائع - Notepad ++. في ذلك، يتم استبدال علامات التبويب بمسافات والعكس بنقرة واحدة، يتم إجراؤها في القسم الموجود في القائمة "تحرير → العمليات باستخدام المسافات". أستخدم هذا المحرر لاستخلاص أجزاء مبوبة من التعليمات البرمجية المخصصة للنشر على إحدى المدونات، نظرًا لأن الأخير يقوم تلقائيًا بتغيير حرف علامة تبويب واحد إلى مسافة واحدة، وهو أمر غير مقبول.

خاتمة

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

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

العمل في المفكرة ليس بالأمر الرائع. من الرائع العمل في محرر سداسي عشري :)

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

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

قام فريق من المطورين من Google بفحص المشاريع الموجودة في مستودع Github. وقاموا بتحليل التعليمات البرمجية المكتوبة بـ 14 لغة برمجة. كان الغرض من الدراسة هو تحديد نسبة علامات التبويب والمسافات - وهي الطريقة الأكثر شيوعًا لتنسيق النص لكل لغة.

تطبيق

للتحليل، استخدمنا جدولًا موجودًا يتم فيه تسجيل أسماء مستودعات Github.

دعونا نتذكر أنه منذ حوالي شهرين، أصبحت جميع أكواد Github مفتوحة المصدر متاحة في شكل جداول BigQuery.

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

ومن هذا الجدول تم استخراج الملفات التي تحتوي على أكواد برمجية في أشهر 14 لغة برمجة. للقيام بذلك، تم تحديد امتدادات الملفات المقابلة كمعلمات لاستعلام SQL - .java، .h، .js، .c، .php، .html، .cs، .json، .py، .cpp، . xml، .rb، .cc، .go.

حدد معرف a.id، الحجم، المحتوى، الثنائي، النسخ، Sample_repo_name، Sample_path FROM (SELECT id، FIRST(path) Sample_path، FIRST(repo_name) Sample_repo_name FROM WHERE REGEXP_EXTRACT(path, r"\.([^\.]* )$") IN ("java"، "h"، "js"، "c"، "php"، "html"، "cs"، "json"، "py"، "cpp"، "xml"، "rb"، "cc"، "go") المجموعة حسب المعرف) انضم إلى b ON a.id = b.id

انقضت 864.6 ثانية، وتمت معالجة 1.60 تيرابايت

استغرق الطلب وقتًا طويلاً لإكماله. وهذا ليس مفاجئًا، لأنه كان من الضروري إجراء عملية ربط على جدول مكون من 190 مليون صف مع جدول مكون من 70 مليون صف. تمت معالجة إجمالي 1.6 تيرابايت من البيانات. نتائج الاستعلام متاحة على هذا العنوان.

يحتوي الجدول على ملفات بدون التكرارات. يوجد أدناه إجمالي عدد الملفات الفريدة وحجمها الإجمالي. لم يتم تضمين الملفات المكررة في التحليل.

بعد ذلك، كل ما تبقى هو إنشاء الطلب النهائي وتشغيله.

SELECT ext، tabs، spaces، countext، LOG((spaces+1)/(tabs+1)) lratio FROM (SELECT REGEXP_EXTRACT(sample_path, r"\.([^\.]*)$") ext, SUM( علامات التبويب best = "tab")، مسافات SUM(best = "space")، COUNT(*) countext FROM (SELECT Sample_path, Sample_repo_name, IF(SUM(line=" ")>SUM(line="\t"), "مسافة"، "علامة تبويب") ضمن السجل الأفضل، COUNT(line) داخل السجل c FROM (SELECT LEFT(SPLIT(content, "\n"), 1) سطر، Sample_path، Sample_repo_name FROM HAVING REGEXP_MATCH(line, r"[ \t]")) HAVING c>10 # 10 أسطر على الأقل تبدأ بمسافة أو علامة تبويب) GROUP BY ext) ORDER BY countext DESC LIMIT 100

انقضت 16.0 ثانية، وتمت معالجة 133 جيجابايت

استغرق تحليل كل سطر مكون من 133 جيجابايت من التعليمات البرمجية 16 ثانية. ساعد BigQuery نفسه في تحقيق هذه السرعة.


في أغلب الأحيان، توجد علامات التبويب في لغة C، وغالبًا ما توجد المسافات في لغة Java.

على الرغم من أن نسبة بعض رموز التحكم لا تهم بالنسبة للبعض، ويبدو أن المناقشات حول هذا الموضوع بعيدة المنال. وهذا لا يهم أيضًا بالنسبة لبعض بيئات التطوير المتكاملة (IDEs)، التي تخزن علامات التبويب على شكل عدد من المسافات. هناك أيضًا IDEs يمكن من خلالها تكوين هذا الرقم يدويًا.

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

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

وضوح الكود

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

المساحات والتنسيق

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

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

المسافة الفارغة

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

إذا (صحيح) (// كتلة التعليمات البرمجية)

أنماط القوس

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

إذا (صحيح) (// كتلة التعليمات البرمجية)

هناك أنماط أخرى:

إذا (صحيح) (// كتلة التعليمات البرمجية)

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

عرض المسافة البادئة

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

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

علامات التبويب والمسافات

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

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

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

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

إذا (long_term_one && long_term_two) ( // الكود )

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

إذا (long_term_one && long_term_two) ( // الكود في نص بيان التحديد)

إذا تم استخدام المسافات للتنسيق، فسيتم عرض الكود بشكل صحيح:

إذا (long_term_one && long_term_two) (// رمز بيان if)

الاستخدام الخاطئ للمساحات

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

إذا(صحيح)++i; ++ي;

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

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

مساحة HTML غير منقسمة

في الحالات التي لا تحتاج فيها إلى فصل أجزاء النص عن بعضها البعض، سيساعد ذلك مسافة غير منقسمة، والذي يبدو رمزه كما يلي:

هذا هو ما يسمى "المساحة غير المتقطعة".

أمثلة على استخدام مسافة غير منقسمة:

إلخ. لأن E. Veltistov 11 ألف روبل

مساحة رقيقة

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

ويستخدم في أغلب الأحيان لتقسيم أرقام الأرقام، على سبيل المثال، يجب كتابة "15,000,000$" على النحو التالي:

15,000,000 دولار

ملحوظة:قد لا يتم عرض المساحة الرقيقة بشكل صحيح في الإصدارات القديمة من بعض المتصفحات، ولكن في جميع المتصفحات أحدث الإصداراتيعمل بشكل رائع.

أنواع أخرى من المسافات في HTML

بالإضافة إلى الأنواع الأكثر صلة التي ناقشناها أعلاه، هناك أنواع أخرى.

  •   - مسافة بطول حرف N؛
  •   - مسافة بطول حرف M؛
  • ‌ - حرف غير متصل بطول صفري؛
  • ‍ هو حرف ربط ذو طول صفري.

ملحوظة:إذا كنت بحاجة إلى وضع مسافات متعددة في صف واحد، فقم بإحاطة النص بعلامة

:

منشئ المواقع "Nubex"

الفضاء باستخدام CSS

يمكن حل خيار إنشاء علامات التبويب (المسافة البادئة) باستخدام CSS باستخدام التقنية التالية:

منشئ المواقع "Nubex"

".
كنت أرغب في الرد على التعليقات، لكن بسبب الحجم والرغبة في الاستقلال عن الموضوع الأصلي، قررت إنشاء موضوع جديد.

لذلك، تحت القطع - لماذا علامات التبويب أفضل من المسافات، وأهم المفاهيم الخاطئة حول علامات التبويب وكيفية استخدامها بشكل صحيح.

لنبدأ بحقيقة أن معظم الأشخاص (على الأقل في حبري) يفضلون علامات التبويب.

وفي الواقع، الغريب أن الكثيرين ما زالوا لا يميزون بين المسافة البادئة والمحاذاة. حسنًا، هذه مسافة بادئة:
ل(int i = 0; i< 10; i++) { if (a[i] == 0) do_something(i); }

وهذه هي المحاذاة:
int some_variable = 0; كثافة العمليات v1 = 0;

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

يحتوي IDE على خيار علامات التبويب الذكية لهذا:

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

مسافتان لكل علامة تبويب:

5 مسافات لكل علامة تبويب:

9 مسافات لكل علامة تبويب:

إذن ما هي المشاكل التي نفتقدها؟

1. يمكن لكل مبرمج تعديل طول علامة التبويب بما يناسب ذوقه. دائماًيعمل في الممارسة العملية. عندما تكون التعليمات البرمجية متداخلة للغاية، يمكنك ضبط عرض علامة التبويب على مسافتين، وإلا - إلى أربعة.
2. من الأسهل العمل مع مكتبات الطرف الثالث. تدعم بعض المكتبات نمطًا بعرض علامة تبويب يبلغ مسافتين، وبعضها بعرض أربع مسافات. فقط استخدام علامات التبويب لا يفرض قيودًا على النمط.

سأقتبس بعض الأفكار من الموضوع السابق:

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

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

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

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

كما تمت مناقشته أعلاه، توجد هذه المشكلة على وجه التحديد مع المشكلات، وليس مع علامات التبويب.

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

خاتمة

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

رئيسي

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

محدث: ملاحظة حسب التعليقات

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