ما هي بعض الأمثلة على المكان الذي يستخدم فيه الأقواس في برنامج يقلل من قابلية القراءة؟

StackOverflow https://stackoverflow.com/questions/2442088

سؤال

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

هل كانت مفيدة؟

المحلول

يمكنني أن أجد الكثير من المقابلات التي قلة خفضت الأقواس قابلية القراءة، ولكن المثال الوحيد الذي يمكنني التفكير فيه لما قد يكون له مؤلف هو شيء مثل هذا:

if(((a == null) || (!(a.isSomething()))) && ((b == null) || (!(b.isSomething()))))
{
   // do some stuff
}

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

boolean aIsNotSomething = (a == null) || !a.isSomething();  // parens for readability
boolean bIsNotSomething = (b == null) || !b.isSomething();  // ditto
if(aIsNotSomething && bIsNotSomething)
{
   // do some stuff
}

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

بعض الاستخدامات جيدة من الشجاعة:

  • للتمييز بين أمر التشغيل عند تغيير السلوك دون الشجاعة
  • للتمييز بين ترتيب التشغيل عندما لا يتأثر السلوك، ولكن شخص لا يعرف قواعد الربط جيدا بما فيه الكفاية سيكون قراءة التعليمات البرمجية الخاصة بك. حكم المواطن الجيد.
  • للإشارة إلى أن التعبير داخل الكفاءات يجب تقييمه قبل استخدامه في تعبير أكبر: System.out.println("The answer is " + (a + b));

ربما مربكة استخدام الشجاعة:

  • في الأماكن التي لا يمكن أن يكون لها معنى آخر، مثل أمام a.isSomething() في الاعلى. في جاوة، إذا a هو Object, !a بحد ذاتها خطأ، بوضوح !a.isSomething() يجب أن ينفي قيمة العودة لاستكشاف الطريقة.
  • لربط عدد كبير من الشروط أو التعبيرات التي ستكون أكثر وضوحا إذا انقطعت. كما هو الحال في مثال التعليمات البرمجية أعلاه، فإن تفكك العبارة النارية الكبيرة في قطع أصغر يمكن أن تسمح بإرادة الكود في مصحح أخطاء أكثر صرامة، وإذا كانت هناك حاجة إلى الشروط / القيم لاحقا في التعليمات البرمجية، فأنت لا تنتهي ما يصل التعبيرات المتكررة والقيام بالعمل مرتين. هذا هو شخصي، على الرغم من ذلك، ومن الواضح أنه لا معنى له إذا استخدمت التعبيرات فقط في مكان واحد ويوضح لك المصحح الخاص بك التعبيرات المتوسطة تقييمها على أي حال.

نصائح أخرى

على ما يبدو، كتابك المدرسي كتبه شخص يكره Lisp.

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

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

حسنا، اعتبر شيئا مثل هذا:

Result = (x * y + p * q - 1) % t و

Result = (((x * y) + (p * q)) - 1) % t

أنا شخصيا افضل السابق (ولكن هذا فقط)، لأن هذا الأخير يجعلني أعتقد أن النظارات موجودة لتغيير النظام الفعلي للعمليات، عندما لا يفعلون ذلك. قد يشير كتابك المدرسي أيضا عندما يمكنك تقسيم العمليات الحسابية الخاصة بك في متغيرات متعددة. على سبيل المثال، ربما لديك شيء من هذا القبيل عند حل رباعي ax^2+bx+c=0:

x1 = (-b + sqrt(b*b - 4*a*c)) / (2*a)

التي تبدو نوعا من القبيح. هذا يبدو أفضل في رأيي:

SqrtDelta = sqrt(b*b - 4*a*c);
x1 = (-b + SqrtDelta) / (2*a);

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

أقواس تقلل من قابلية القراءة عندما تكون من الواضح الزائدة. وبعد يتوقع القارئ أن يكون هناك لسبب ما، ولكن لا يوجد سبب. وبالتالي، الفناء المعرفي.

ماذا أعني ب "من الواضح" زائدة عن الحاجة؟

  • الأقواس زائدة عن الحاجة عندما يمكن إزالتها دون تغيير معنى البرنامج.

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

  • من الواضح أن جميع الأقواس الزائدة الأخرى زائدة عن الحاجة.

غالبا ما يتم العثور على أقواس زائدة من الزائدة في التعليمات البرمجية التي كتبها شخص يتعلم لغة جديدة؛ ربما يؤدي عدم اليقين بشأن بناء الجملة الجديد إلى تقويس دفاعية. exclunge لهم!


طلبت أمثلة. فيما يلي ثلاثة أمثلة أرى مرارا وتكرارا في رمز مللي أميل وكود Haskell كتبها المبتدئين:

  • الأقواس بين ذلك if (...) then دائما زائدة عن الحاجة والتشتت. أنها تجعل المؤلف يشبه مبرمج C. اكتب فقط if ... then.

  • الأقواس حول متغير سخيفة، كما هو الحال في print(x). وبعد الأقواس ليست ضرورية أبدا حول متغير؛ يجب كتابة تطبيق الوظيفة print x.

  • الأقواس حول تطبيق الدالة زائدة عن الحاجة إذا كان هذا التطبيق هو معامل في تعبير infix. علي سبيل المثال،

    (length xs) + 1
    

    يجب أن تكون دائما مكتوبة

    length xs + 1
    

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

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

return (x + 1);

ومتشابهة في رمز C و C ++ لتكون مزعجة للغاية.

إذا كانت الطريقة لا تأخذ المعلمات لماذا تتطلب فارغة () للإتصال method()ب أعتقد في Groovy أنك لا تحتاج إلى القيام بذلك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top