هل يجب علي * دائمًا * تفضيل المتغيرات المحلية المكتوبة ضمنيًا في C# 3.0؟

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

  •  08-06-2019
  •  | 
  •  

سؤال

ريشاربر من المؤكد أنه يعتقد ذلك، ومن خارج الصندوق سوف يزعجك للتحويل

Dooberry dooberry = new Dooberry();

ل

var dooberry = new Dooberry();

هل يعتبر هذا حقا أفضل أسلوب؟

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

المحلول

إنها بالطبع مسألة أسلوب، لكنني أتفق مع Dare: C# 3.0 إعلانات النوع الضمني:إلى فار أم لا إلى فار؟.أعتقد أن استخدام var بدلاً من النوع الصريح يجعل الكود الخاص بك أقل قابلية للقراءة. في الكود التالي:

var result = GetUserID();

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

كتب جيف تدوينة حول هذا قائلا انه يفضل فار.ولكن هذا الرجل مجنون!

أرى نمطًا لنجاح تدفق المكدس:ابحث عن منشورات CodingHorror القديمة وقم (بأسلوب Jeopardy) بصياغتها في شكل سؤال.

نصائح أخرى

أنا أستخدمه فقط عندما يكون من الواضح ما هو var.

واضح لي:

XmlNodeList itemList = rssNode.SelectNodes("item");
var rssItems = new RssItem[itemList.Count];

غير واضح بالنسبة لي:

var itemList = rssNode.SelectNodes("item");
var rssItems = new RssItem[itemList.Count];

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

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

معظم التوصيات التي ربطها الأشخاص (على سبيل المثال.Dare's one) هي توصيات مقدمة من الأشخاص الذين لم يحاولوا مطلقًا البرمجة باستخدام var بدلاً من النوع المحدد.وهذا يجعل التوصيات عديمة القيمة، لأنها لا تتحدث عن تجربة، بل مجرد استقراء.

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

@jongalloway - لا يجعل var بالضرورة التعليمات البرمجية الخاصة بك غير قابلة للقراءة.

var myvariable = DateTime.Now
DateTime myvariable = DateTime.Now;

الأول سهل القراءة تمامًا مثل الثاني، ويتطلب عملاً أقل

var myvariable = ResultFromMethod();

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

يحرر: مجرد قراءة المقال، وأنا أتفق.مضحك جداً.

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

كان هناك نقاش جيد حول هذا @ رعب الترميز

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

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

تتيح لك الأدوات الجيدة الحصول على أفضل ما في العالمين.

جون.

يكون الأمر منطقيًا فقط، عندما لا تعرف النوع مسبقًا.

"أفضل أسلوب" هو أمر ذاتي ويختلف حسب السياق.

في بعض الأحيان يكون من الأسهل استخدام "var" بدلاً من كتابة اسم فئة طويل جدًا، أو إذا لم تكن متأكدًا من نوع الإرجاع لوظيفة معينة.أجد أنني أستخدم "var" أكثر عند التعامل مع Linq، أو في إعلانات الحلقة.

وفي أحيان أخرى، يكون استخدام اسم الفئة الكامل أكثر فائدة لأنه يوثق الكود بشكل أفضل من 'var'.

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

هتافات!

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

أي عبارة من سطر واحد حيث يمكن تحديد اسم نوع لكل من المتغير وقيمته يجب أن تستخدم بالتأكيد var، خاصة عندما تكون طويلة Generic< OtherGeneric< T,U,V>, Dictionary< X, Y>>>

هناك مقالة MSDN جيدة حقًا في هذا الموضوع يوضح بعض الحالات التي لا يمكنك فيها استخدام var:

تنطبق القيود التالية على إعلانات المتغيرات المكتوبة ضمنيًا:

  • لا يمكن استخدام VAR إلا عند إعلان متغير محلي وتهيئته في نفس البيان ؛لا يمكن تهيئة المتغير إلى NULL ، أو إلى مجموعة طريقة أو وظيفة مجهولة.
  • لا يمكن استخدام var في الحقول الموجودة في نطاق الفئة.
  • لا يمكن استخدام المتغيرات المعلنة باستخدام VAR في تعبير التهيئة.بمعنى آخر ، هذا التعبير قانوني:إنت ط = (ط = 20)؛لكن هذا التعبير ينتج خطأ في وقت الترجمة:فار ط = (ط = 20)؛
  • لا يمكن تهيئة المتغيرات المتعددة المغطاة ضمنيًا في نفس البيان.
  • إذا كان نوعًا مسماً VAR في نطاق ، فسيتم حل الكلمة الرئيسية VAR إلى اسم النوع ولن يتم التعامل معها كجزء من إعلان متغير محلي مكتوب ضمنيًا.

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

أرى نمطًا لنجاح Stackoverflow:حفر منشورات CodingHorror القديمة و (نمط Jeopardy) عبارة من حيث السؤال.

أنا أدافع عن البراءة!لكنك على حق، يبدو أن هذا سؤال صغير شائع نسبيًا.

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