سؤال

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

لذا فإن السؤال هو أكثر rethorical الاستطلاع:عندما هو واحد يسمح تجاهل دلالات ما يكتب ؟ أين الحدود الخط ؟

  • operator++ (postfix/بادئة)
  • السلسلة.فارغة() مقابلstring == ""
  • ناقلات.فارغة() مقابلناقلات.حجم() == 0
  • تعداد { ، } مقابلمنطقية على=true;قبالة=false
  • ...

اسم كان.

تحرير -

أنا لم أقصد أن السؤال عن الحاجة إلى (الصغرى)-تحسينات.بل أريد آراء حول كيف يجب أن تكون علم ماذا كنت تكتب على عبارات مثل "لكنه يجمع dword, على أي حال, لذا لماذا يجب أن تجعل من التعداد?" (هذا هو الحالة القصوى...).

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

المحلول

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

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

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

نصائح أخرى

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

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

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

ولكن خلق التعداد منطقية هو مجرد خطأ عادي.

يعتمد على تكلفة وظيفة

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

  • عدد الأحرف
  • عدد العمليات التي تم إنشاؤها
  • وقت التشغيل
  • قابلية
  • الصيانة
  • الوضوح
  • ذكاء
  • الاستقرار (خالية من الحشرات؟)
  • Extendability

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

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

"عندما واحد يسمح تجاهل دلالات ما يكتب ؟ أين الحدود الخط؟"

أعتقد معقول السؤال هو:"عندما يجب أن أحد تجاهل دلالات ما يكتب؟"

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

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

خط الحدود هو من الآثار الجانبية.

إذا مغلفة وظيفة يفعل كل ما تريد مع 0 آثار جانبية غير متوقعة ، رمز للقراءة, هذا هو كل ما يهم.إذا كنت يمكن التنبؤ بها إلى خارج المستخدم " و " أي "غريب" وظائف يقام داخليا, هذا هو كل ما يهم.

فإنه يغير قليلا إذا قمت بإضافة في التحسين ، ولكن بما يجب أن لا قبل الأوان الأمثل ، حيث ينتهي.

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

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

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

مراقبة الأمثلة التي قدمتها -- التالية:

operator++ (postfix/بادئة)

string.empty() مقابل string == ""

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

في المقابل ، فإن الأمثلة التالية:

vector.empty() مقابل vector.size() == 0

enumيسجل { on, off} مقابل boolean on=true; off=false

معقولة تماما.

vector.empty() هو الأفضل إذا كان سياق استخدامه هو فقط لتحديد ما إذا كان ناقل فارغة.في خطر السبر التنازل (التي لا لا أنوي أن أكون):هذا يتلخص في الحس.لماذا تسأل عن ناقلات حجم إذا كنت تريد فقط أن تعرف إذا كانت فارغة ؟ هذا هو كمن يسأل أحد كم من المال لديهم في المحفظة عندما كنت ببساطة ترغب في معرفة ما إذا كان لديهم ما يكفي من النقود من فحم الكوك.

أما بالنسبة enumيسجل { on, off} مقابل boolean on=true; off=false, اسأل نفسك هذا:كيف المرجح هو أنه يمكنك إضافة قيمة أخرى إلى التعداد في المستقبل ؟ فإنه يبدو من المعقول أن واحدة قد تحتاج enumيسجل{on, off, indeterminate}` (أو بعض الاختلاف) ، لذلك قد يكون الجواب نعم.وإلا بسيطة منطقية تكفي.

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

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