سؤال

في معظم الأحيان نمثل المفاهيم التي لا يمكن أن تكون أقل من 0.على سبيل المثال، للإعلان عن الطول، نكتب:

int length;

يعبر الاسم عن غرضه جيدًا ولكن يمكنك تعيين قيم سلبية له.يبدو أنه في بعض المواقف، يمكنك تمثيل نيتك بشكل أكثر وضوحًا عن طريق كتابتها بهذه الطريقة بدلاً من ذلك:

uint length; 

بعض العيوب التي يمكنني التفكير فيها:

  • الأنواع غير الموقعة (uint، ulong، ushort) ليست متوافقة مع CLS لذا لا يمكنك استخدامها مع اللغات الأخرى التي لا تدعم هذا
  • تستخدم فئات .Net الأنواع الموقعة في معظم الأوقات لذا يتعين عليك الإرسال

أفكار؟

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

المحلول

"عندما تكون في روما افعل كما يفعل أهلها."

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

نظرًا لأن الاتساق مهم بشكل عام، فإنني أنصح بسلوك طريق C# واستخدامه intس.

نصائح أخرى

إذا قمت بتقليل رقم موقع بقيمة 0، فإنه يصبح سلبيًا ويمكنك اختبار ذلك بسهولة.إذا قمت بتقليل رقم غير موقّع بقيمة 0، فإنه يتدفق ويصبح الحد الأقصى لقيمة النوع - وهو أمر أكثر صعوبة إلى حد ما في التحقق منه.

نقطتك الثانية هي الأهمعموما يجب عليك فقط استخدام int نظرًا لأن هذا يعد "شاملًا" جيدًا للقيم الصحيحة.وأود أن تستخدم فقط uint إذا كنت في حاجة ماسة إلى القدرة على العد أعلى من int, ولكن دون استخدام الذاكرة الإضافية long يتطلب (ليس هناك الكثير من الذاكرة، لذا لا تكن رخيصًا :-p).

أعتقد أن الاستخدام الدقيق لـ uint مقابل.int سوف يسبب إرباكًا للمطورين ما لم يتم كتابته في إرشادات المطور الخاصة بالشركة.

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

فقط 2 سنتي.

سأشير إلى أنه في C# يمكنك تشغيله /checked للتحقق من التجاوز الحسابي/التجاوز الحسابي، وهي ليست فكرة سيئة على أي حال.إذا كان الأداء مهمًا في قسم حرج، فلا يزال بإمكانك استخدامه unchecked لتجنب هذا.

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

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

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

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