سؤال

لدي هذه القطع اثنين من الكود اللي تبونه واحد هو أكثر قابلية للقراءة ؟

  1. foreach

    decimal technicalPremium = 0;
    foreach (Risk risk in risks)
    {
         technicalPremium = technicalPremium + risk.TechnicalPremium;
    }
    return technicalPremium;
    
  2. linq

    return risks.Sum(risk => risk.TechnicalPremium);
    
هل كانت مفيدة؟

المحلول

إذا كان الفريق الذي يعمل على رمز يعلم ما ينق النسخة لا يعرف أعماله الداخلية ، ثم هو أكثر قابلية للقراءة.

نصائح أخرى

استخدام أيهما تفضل ولكن تخفي ذلك في الأسلوب:

return risks.SumTechnicalPremium();

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

أود أن أقول لك أن قاعدة اختيارك على البيئة في.

شخص يمكن قراءة LINQ ، LINQ واحد.

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

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

ينق رمز على حد سواء جدا للقراءة الذاتية توثيق.

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

أعتقد أن الخيار الثاني هو الأفضل في أنه ينبغي أن تكون أكثر كفاءة.غير أنه أقل وضوحا ما يحدث (على الأقل بالنسبة لي).

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

إذا قمت بتوفير تعليق شرح الغرض ، ثم أود الذهاب Linq الخيار.

الأولى إذا كان لديك أي معرفة Linq.أي شخص يمكن للمطور قراءة وفهم أول واحد.

لا يوجد قراءة المشكلة هنا.انقر على مبلغ وضرب F1.

Linq من أجل الفوز.

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

أنا لا أعرف c# ولكن البديل الثاني تبدو أكثر نظافة لي أنا يمكن أن نفهم ما يفعله (موافق ، مع بعض التخمين و التحقق من النسخة الأولى).Probabably بسبب بعض وظيفية الخلفية.ولكن في البداية عليك أن تبحث عن technicalPremium في 4(!) الأماكن.والثاني هو أقصر من ذلك بكثير و أسهل للفهم إذا كنت مجرد القراءة أكثر من رمز.

أو

عشري technicalPremium = 0;

foreach (خطر خطر في المخاطر) technicalPremium = technicalPremium + المخاطر.TechnicalPremium;

عودة technicalPremium;

أرى الناس يقولون أنها مثل الأولى "إذا كنت لا تعرف Linq".نعم أول واحد غير قابل للقراءة إذا كنت لا تعلم C#.هذه ليست مسألة "الذي هو أكثر قابلية للقراءة" ، ولكن "اللغة التي هي الميزات لدينا مريحة تستخدمه؟"

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

طالما ينق على "استبعاد" قائمة المثال الثاني هو الآن أكثر قابلية للقراءة من الأولى.لماذا ؟ لأنه يعلن نية رمز بدلا من مجرد تقديم آلية القارئ إلى فك.

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

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

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

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

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

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

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

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

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