هل هناك أي أدوات للمساعدة في منطق "إذا" المعقد؟

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

  •  06-07-2019
  •  | 
  •  

سؤال

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

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

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

المحلول

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

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

نصائح أخرى

والجداول الحقيقة هي في الأساس نهج شامل وسوف (أمل) تسليط الضوء على كل الاحتمالات.

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

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

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

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

ومن أبسط لقراءة:

if(broken){
  return false;
}
if (simple){
  doit();
  return true;
}
if(complicated){
  divide();
  conquor();
}
if(extra){
  extra();
}

ومما هو عليه على النحو التالي:

if(!broken && (simple || complicated)){
 ....
}
return false;

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

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

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

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

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

ولأي سبب من الأسباب لا يمكن أن يعالج المنطق مع تصريحات حارس؟

كارنوه خرائط يمكن أن تكون طرق لطيفة لأخذ معلومات من جدول الحقيقة (الذي اقترحه سيماء ) وتحويلها إلى عبارات المدمجة و / أو / لا. وعادة ما يتم تدريس هذه في EE بالطبع المنطق الرقمي.

هل حاولت نمط التصميم؟ كنت قد ننظر إلى ما يعرف نمط الاستراتيجية: http://en.wikipedia.org/wiki/ Strategy_pattern

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

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