سؤال

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

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

في أي نقطة تتوقف عن ضغط رمز البرنامج؟

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

المحلول

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

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

نصائح أخرى

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

على سبيل المثال، تغيير

for (int i = 0; i < n; i++)
    foo[i] = ...

ل

int * p = foo, q = foo+n;
while ( *p++ = ... < q );

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

آخر شائع يستخدم BOOL بدلا من العادة.

enum {
    MouseDown,
    MouseUp
};

وجود هذا

bool IsMouseDown;

يترك حقيقة أن هذه آلة حالة، مما يجعل الكود أصعب للحفاظ عليه.

لذلك ستكون حكمي الإبهام، في تنفيذك، لا تحفر إلى مستوى أقل من المفاهيم التي تحاول التعبير عنها.

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

إليكم مقال جيد عن طريق ستيف ماكونيل - أفضل الممارسات http://www.stevemcconnell.com/ieeesoftware/bp06.htm.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

عندما يفشل ذلك ... بالتأكيد، اترك لي تعليقا.

ولا تقل لي "ما" في التعليق (هذا ما هو عليه القانون)، أخبرني "لماذا".

بدلا من الطويل / التجول؟ بالتأكيد!

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

نعم. دائما.

جاف: لا تكرر نفسك. من شأنه أن يمنحك رمز موجز وآمن. كتابة نفس الكود عدة مرات هو وسيلة جيدة لجعل من الصعب الحفاظ عليها.

الآن هذا لا يعني أنك يجب أن تجعل وظيفة من أي كتل من التعليمات البرمجية تبدو على حد سواء عن بعد.

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

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

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

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

المثال أعلاه أمر كاريكاتوري للغاية، ولكن ليس بعيدا عن ما تحصل عليه عند محاولة تحسين حجمه دون اتباع أي مبادئ توجيهية معقولة.

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

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

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

Company.get_by_name("ABC") 
makeHeaderTable()

هو حول terse ونحن نذهب.

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

هناك نقاط زوجين في ذهني تحدد وقت التوقف عن تحسين:

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

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

أعتقد أن النقطة الرئيسية هي أن هناك الاعتدال أن معظم الحلول جيدة سيكون لها.

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

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

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

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

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

سنتى...

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

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

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