لماذا مصممي كولد فيوجن تقرر صفائف مؤشر من 1 بدلا من 0؟

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

  •  05-07-2019
  •  | 
  •  

سؤال

وأنا مجرد غريبة عن هذا الواقع، لا أحد يعرف لماذا كسروا اتفاقية على هذا واحد؟

وشكرا، سياران

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

المحلول

وCory: هل سأشعر بالدهشة لمعرفة من المندسين على ستاكوفيرفلوو. : -)

وأنت على حق إلى حد كبير. وكان التصميم الأصلي للCFML السماح لغير المبرمجين لبناء تطبيقات الويب المعقدة. كان كولد فيوجن \ CFML اللغة الأولى التي صممت خصيصا لبناء تطبيقات الويب. في عام 1995 كان معظمهم الويب HTML ثابتة والنمطية الخاصة بك "مطور ويب" لا تفعل الكثير من البرمجة. اللغة صمم لنفسها بأن تكون بسيطة بقدر الإمكان وهذا هو السبب انها لا تزال واحدة من أسرع / أسهل لغات لتعلم.

ويمكن أن تؤدي إلى شيء من الارتباك، وخصوصا عندما يتفاعل كود كولد فيوجن مباشرة مع جافا أو .NET. ومع ذلك، فإنه أصبح مجرد واحدة من تلك 'المراوغات. وإعادة النظر في القرار مرة أخرى في 2000/2001 عندما أعيد بناء CF كتطبيق جافا EE، ولكن التوافق منع التغيير.

نصائح أخرى

وهناك اتفاقيتين، واحدة للمشترك إلى معظم لغات البرمجة، واحد مشترك لمعظم nonprogrammers. انهم ربما كانوا يهدفون إلى الناس الذين لا يبدأ العد مع 0.

إذا كان لي أن أخمن، انها لأنه كان يهدف كولد فيوجن لمناشدة المبتدئ، و1 شهادة صفائف قد يكون أكثر منطقية - العنصر الأول هو رقم 1 والثاني هو رقم 2 وغيرها

وانها لنا علماء الكمبيوتر الذين هم غريب!

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

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

وبناء على ذلك، فإنه سيكون من المنطقي أن أوجه الناس لغة بد ان تتعامل مع - مثل المصفوفات - من شأنه أن يجعل أكثر "ودية". بالنسبة لي، ورؤية مجموعة [0] يجعل الشعور بالكمال. ولكن لأشخاص جدد إلى النموذج الذين لم يتعلموا ذلك، فإنه لا تجعل من أي معنى. لماذا يمكنني الوصول إلى كائن في موقف "0"؟

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

وحساب عدد الأصابع لديك على يد واحدة. هل بدء العد مع 0 أو 1؟

والأفكار المجردة التي توازي الحياة اليومية بشكل كبير دائما مفهومة بسهولة أكبر وتطبيقها (مثلا: التفكير في "كومة" المادي وثم بنية بيانات مجردة)

.

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

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

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

arrayBaseAddress + (whichElementItIsInTheArray * sizeOfDataType)

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

وهكذا يستخدم whichElementItIsInTheArray لتعويض عنوان الذاكرة (في وحدات sizeOfDataType).

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

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

وحتى لا يكون هناك <م> كان سبب شرعي لبدء صفائف في مؤشر الصفر في هذه الحالات.

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

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

في C، هناك عنصر من عناصر a[0] مجموعة. هذا هو أولا عنصر من المصفوفة (وليس "الصفري" عنصر)، وإذا كان هذا هو المدى الكامل للمجموعة، انها طول <م> واحدة . لذلك السلوك الفقهي هنا على جزء من لغة البرمجة، وليس على جزء من الطريق تحسب الأشياء / تعداد "في الحياة الحقيقية" (الذي هو فيه معظمنا يقيم). فلماذا تستمر معها؟

واجهوا بعض الناس هنا هذه "أين تبدأ مؤشر" حجة مع "بشكل جيد عندما نقوم ولد، نحن لا احد، ونحن ZERO". وهذا صحيح، ولكن هذا قياس شيء مستمر، وليس هو نفسه. لذلك لا صلة لها محادثة. مجموعة هي مجموعة من discrالبنود مؤسسة التدريب الأوروبية، وعند قياس كمية المواد المنفصلة. (أي: اعدهم)، ونحن نبدأ في واحدة

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

جميع "IMO"، بطبيعة الحال.

وكانت شعبية مفهوم المصفوفات ابتداء من الساعة 0 مع لغة C. بدأت اللغات القديمة مثل FORTRAN وكوبول عد صفائف في 1 (وتسمى في الواقع الجداول في كوبول).

وليس هناك اتفاقية لنقطة البداية من صفيف. تبدأ معظم أساسيات في 1 أيضا على سبيل المثال. بعض اللغات تمكنك من بدء تشغيل مجموعة في أي مكان تريد، أو allowarray المؤشرات لتكون التعدادات الخ (آدا على سبيل المثال). تستخدم C مفهوم اللدغة في 0 واتبعت العديد من اللغات، ولكن ليس كل فعل. أحد الأسباب التي تجعل لم يفعلوا ذلك هو أن صفائف ابتداء من الساعة 1 هي أكثر سهولة بكثير.

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

وربما لم يكن مجرد شيء ليمان ... وأعتقد أن معظم الناس الاقتراب من أي لغة الويب وعبثت على الأقل مع جافا سكريبت (والأمر ينطبق كذلك قبل 10،15 سنة). كانت 0 المستندة إلى المؤشرات ليست واردة الخارجية بذلك.

والشيء الذي أحب عن اللغات التي تبدأ مؤشرات / وظائف (سلاسل) في 1 هو أنك يمكن أن تفعل أشياء مثل

<cfif find("c","cat")>

والذي يقيم إلى true إذا تم العثور ج، وسيكون.

وفي حين أن اللغة المستندة 0 مثل جافا سكريبت

if ("cat".indexOf("c")) { 

وتقييمها إلى false، لذلك أنت بحاجة إلى أن أقول شيئا مثل if ("cat".indexOf("c") >= 0) {

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

وأعتقد، كان Allaire المعروفة حيث شبكة الإنترنت سيكون في نهاية المطاف، وكيف العميل والخادم يمكن أن تعمل حقا معا، سيكون لدينا مؤشرات المستندة إلى 0.

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