الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

ماهو سبب وجود Case Sensitive في السي شارب ؟

بدأه سنان محمد صالح في 21 سبتمبر 2011 · 27 رد · 2,766 مشاهدة · في الأخبار والنقاشات التقنية
مشاركة: واتساب X فيسبوك تيليجرام
#26

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

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

الخطأ هو التحويل الآلي أو الضمني (implicit) في حالة مثل:

"2" + 2

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

و لكن في حالة أخرى مثل المثال الخاص بـjoin، النتيجة دائمًا نص، أيًا كانت المدخلات، لذا من غير الضار أبدًا التحويل الضمني هنا، لأن هذا لن يسبب أي نتائج خاطئة أو غير متوقعة!

أخيرًا، أشكرك على الرد سريعًا علي، و أريد أن أوضح فقط أني لم أقل أن البساطة = السهولة، بل و وضحت أني أتحدث عن البساطة لا السهولة، و وضحت مقصدي بالبساطة في ردي السابق بقولي:

اقتباس

لا أرى هذا يتعارض مع التبسيط، فالبساطة أن تكون الأمور مبسوطة مباشرة، و طالما أننا نحافظ على المرونة، فيكون هذا في رأيي هو الأنسب.

شكرًا.

#27
"2" + 2

لماذا ليس منطقيا ؟ فناتج معامل الجمع مع عدد هو "عدد" فنحول ال "2" تلقائيا وتجمع على ال2 و ربما يدعم + الجمع للنصوص فيكون الناتج هو تحويل 2 إلى نص وجمعهما

اقتباس

و لكن في حالة أخرى مثل المثال الخاص بـjoin، النتيجة دائمًا نص، أيًا كانت المدخلات، لذا من غير الضار أبدًا التحويل الضمني هنا، لأن هذا لن يسبب أي نتائج خاطئة أو غير متوقعة!

المشكلة التعميم على حالة خاصة، فلنفترض وجود مصفوفة من المستخدمين users وتشمل كل منها كائن من الصف User (يشمل اسم أول واسم أخير واسم وبريد إلكتروني) فالمفترض عندما نستدعي join عليهم ان نأخذ التمثيل النصي لهم وهو الموجود من خلال وظيفة مثل __str__ او toString او ايا كانت تلك الوظيفة وكان ناتجها مثلا الإسم كاملا بالإضافة للبريد الإلكتروني ولكنك تحتاج فقط عرض الإسم الاول فقط في سطر جديد فوقتها تقوم أنت بزيادة في التفصيل مثلا

",".join(u.first_name for u in users)

فسنجد ان المنطقي هو إلقاء مهمة التوضيح التام على المبرمج بدلا من التخمينات التي تقوم بها اللغة

تم تعديل هذه المشاركة بواسطة ahmed_youssef في 24 سبتمبر 2011 في 09:28

1
(map share people)

فضلا لاتقم بمراسلتي من أجل أسئلة لها أقسامها في المنتدى حتى تعم الفائدة على الجميع وللحصول على إجابات أفضل من أعضاء أكثر خبرة.
Weblog
@bitbucket
@xmonader

#28
ahmed_youssef كتب:

"2" + 2

لماذا ليس منطقيا ؟ فناتج معامل الجمع مع عدد هو "عدد" فنحول ال "2" تلقائيا وتجمع على ال2 و ربما يدعم + الجمع للنصوص فيكون الناتج هو تحويل 2 إلى نص وجمعهما

أنت على حق إذا كانت "+" للجمع بين الأرقام فقط، و لكن إذا لم تكن للأرقام فقط فيكون الأمر فعلًا غير منطقي.

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

ahmed_youssef كتب:

المشكلة التعميم على حالة خاصة، فلنفترض وجود مصفوفة من المستخدمين users وتشمل كل منها كائن من الصف User (يشمل اسم أول واسم أخير واسم وبريد إلكتروني) فالمفترض عندما نستدعي join عليهم ان نأخذ التمثيل النصي لهم وهو الموجود من خلال وظيفة مثل __str__ او toString او ايا كانت تلك الوظيفة وكان ناتجها مثلا الإسم كاملا بالإضافة للبريد الإلكتروني ولكنك تحتاج فقط عرض الإسم الاول فقط في سطر جديد فوقتها تقوم أنت بزيادة في التفصيل مثلا

",".join(u.first_name for u in users)

فسنجد ان المنطقي هو إلقاء مهمة التوضيح التام على المبرمج بدلا من التخمينات التي تقوم بها اللغة

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

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

أخيرًا، أؤكد مرة أخرى أني استفدت كثيرًا من جميع الاخوة، و خصوصًا أخي أحمد.. فبارك الله فيكم جميعًا.

أعتذر لأخي سنان على الخروج عن نقطة الموضوع الأساسية.

شكرًا.

1

مواضيع مشابهة