سؤال

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

شكرا

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

المحلول

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

إذا لم يكن لا عددا ؛ هو سلسلة.

نصائح أخرى

في بعض اللغات يمكنك إنشاء نوع معرف من قبل المستخدم مثل "class HotelPropertyNumber"، :

  • يدعم بالضبط أساليب عليك
  • قد يتم تخزين البيانات داخليا سلسلة
  • يمكن التحقق من صحة (في البناء) أن قيمة عدد جملة مثل
  • لا يمكن الخلط بينه وبين عدد آخر و/أو نوع السلسلة الحالات التي لا HotelPropertyNumber الحالات.

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

وخير مثال على ذلك كان في ستاكوفيرفلوو بودكاست #58, عندما جيف تخزين عنوان HTML في قاعدة البيانات وليس فقط العنوان في حد ذاته.هذا سبب الكثير من المشاكل عندما أراد أن إضافة وظائف في وقت لاحق وعرض هذا العنوان حيث HTML لم يكن هناك حاجة.

ChrisW يجلب أيضا نقطة عظيم أن تفعل هذا يؤكد نوع السلامة.أعتقد أن من المهم يكفي أن نلاحظ.

هذا يعتمد على ما تريد القيام به معهم.

كنت على الارجح لن لأداء العمليات الحسابية عليها, ولكن ماذا عن الفرز?الاعداد الصحيحه سيتم فرز بطريقة مختلفة من السلاسل.هل تريد لها أن تكون 1, 10, 2, إلخ. ؟ إن لم يكن, ثم استخدام الأعداد الصحيحة أو نوع خاص الأسلوب.

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

ايغور Krovokon بالفعل قال ذلك ، ولكن أردت أن تضع قليلا.

لماذا تعتقد محتويات فندق الرقم هو الرقم ؟ "12" ليس عددا.هو سلسلة تحتوي على زوجين من الأرقام.لا يمكنك أن تأخذ الجذر التربيعي غرفة #153, ولكن يمكنك أن تفعل ذلك مع عدد 153.

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

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

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

ليس كل سلسلة صالحة عدد الفندق."14" أمر جيد ، ولكن "البطيخ" لا.

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

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

أنا أتفق مع @اريك.سوف تجد أنه إذا كنت تعلن أنها سلسلة سوف يخطئ إما تحليل أنها int, أو فرض أنها int.مجرد استخدام int.

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

أنا أختلف مع اريك.

لا توجد "دائما" قواعد في التنمية.

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

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

هل يعقل أن تغيير الاسم إلى hotelPropertyIdentifier?التي قد تجنب كل دلالات تتصل به عدد.

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

تقرر اذا كنت حقا لا تحتاج الباحث تحت الأغطية ، HotelPropertyNumber() يمكن العودة فقط سلسلة خاصة.

لن أقول دائما.قد لا دائما تكون ممثلة من قبل أرقام.14 أيار / مايو ، فعلى سبيل المثال ، يمكن تقسيمها إلى 14a و 14b.أو 21 و 22 مايو دمج 21-22.فمن المحتمل أكثر مما تفعل الحساب معهم.

نظرة على عناوين الشوارع ، والتي عادة ما تبدأ مع نية كونه العددية.(قريبة جدا قياسا أيضا.)

انها ليست سيئة العادة في حد ذاتها ، ولكن يمكن أن يؤدي إلى مشاكل في وقت لاحق.

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

ثم قضيت أفضل جزء من اليوم في محاولة لمعرفة لماذا يعيش النظام رمي جميع أنواع مجنون استثناءات.تبين أن "1" كنت أنظر في البيانات كان حقا أقل الحالة "l".

ثم, كما يقولون, لقد أصبح المستنير.

(طبعا هذا يمكن حقا تغيير على أساس اللغة ما كنت في.في شيء مثل Java, بضعة أسطر تستحق من تعريف الفئة حل كل هذه القضايا.في بايثون او بيرل ، السؤال لا يعني أي شيء - اللغة فقط "يحصل على حق".حسنا, بالنسبة لبعض تعريف "الحق" ، على أية حال.)

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