อาร์กิวเมนต์สิทธิ์
อืม ... เห็นได้ชัดว่าภาษาส่วนใหญ่รวมถึงภาษาที่เพิ่งผ่านมานั้นไม่มีฐาน เนื่องจากภาษาเหล่านั้นเขียนโดยคนที่มีทักษะค่อนข้างเพื่อนของคุณจะต้องผิด ...
ทำไมหนึ่ง
ทำไม 1 จะเป็นดัชนีเริ่มต้นที่ดีกว่าศูนย์ ทำไมไม่ 2 หรือ 10 คำตอบนั้นน่าสนใจเพราะมันแสดงให้เห็นมากมายเกี่ยวกับกระบวนการคิดของคนที่ปกป้องความคิด
แรกอาร์กิวเมนต์เป็นว่ามันเป็นธรรมชาติมากขึ้นเพราะวันที่ 1มักจะเป็นอย่างใดอย่างหนึ่งก่อนที่คนอื่น ๆ ทั้งหมดอย่างน้อยสำหรับคนส่วนใหญ่ ...
อาร์กิวเมนต์หมายเลขหนึ่งคือดัชนีสุดท้ายยังเป็นขนาดของอาร์เรย์ ...
ฉันยังคงประทับใจใน "คุณภาพ" ของเหตุผลที่ฉันมักจะได้ยินเกี่ยวกับข้อโต้แย้งประเภทนี้ ... และยิ่งกว่านั้นเมื่อฉันนึกถึงว่า ...
ทำไมไม่เป็นศูนย์
... สัญลักษณ์ "One-based" นั้นเหลือจากวัฒนธรรมตะวันตกที่เพิกเฉยต่อการดำรงอยู่ของศูนย์มานานหลายศตวรรษถ้าไม่มาก
เชื่อหรือไม่ว่าปฏิทินเกรกอเรียนดั้งเดิมเริ่มจาก -3, -2, -1, 1, 2, 3 ... ลองนึกภาพปัญหาที่เกิดขึ้นกับวิทยาศาสตร์ตะวันตก (ตัวอย่างเช่นกี่ปีตั้งแต่ 1 มกราคม -2 ถึงวันที่ 1 มกราคม 2 เพื่อดูมากกว่าปฏิทินเกรกอเรียนดั้งเดิมที่ขัดแย้งกับสิ่งที่ง่ายเหมือนการลบ ... )
การรักษาอาร์เรย์หนึ่งให้เป็นเหมือน (เอาล่ะฉันจะถูกลดทอนเพราะเรื่องนั้น ... ^ _ ^ ... ) โดยรักษาระยะทางหลายไมล์ในศตวรรษที่ 21 ...
ทำไมต้องเป็นศูนย์? เพราะมันเป็นคณิตศาสตร์!
ครั้งแรก (OOops ... ขออภัย ... ฉันจะลองอีกครั้ง)
ซีโร่ซีโร่ไม่มีอะไรเลยมีอะไรบางอย่าง และบางตำราทางศาสนาถือได้ว่า "ในตอนแรกไม่มีอะไร" การสนทนาที่เกี่ยวข้องกับคอมพิวเตอร์บางอย่างอาจเป็นการเบิร์นเป็นการโต้วาทีทางศาสนาดังนั้นประเด็นนี้จึงไม่ใช่หัวข้อที่ดูเหมือน ... ^ _ ^
ขั้นแรกให้ทำงานกับอาร์เรย์ zero-based ได้ง่ายขึ้นและละเว้นค่า zero-th ของมันง่ายกว่าทำงานกับ array ที่ใช้หนึ่งและแฮ็คเพื่อค้นหาค่า zero-th เหตุผลนี้เกือบจะโง่เหมือนก่อนหน้านี้ แต่จากนั้นอาร์กิวเมนต์ดั้งเดิมที่สนับสนุนอาเรย์หนึ่งที่ใช้ก็เป็นความผิดพลาดเช่นกัน
ประการที่สองโปรดจำไว้ว่าเมื่อจัดการกับตัวเลขโอกาสสูงที่คุณจะจัดการกับคณิตศาสตร์สักครู่หรืออีกครั้งและเมื่อคุณจัดการกับคณิตศาสตร์โอกาสดีที่คุณไม่ได้อยู่ในอารมณ์สำหรับ hacks โง่ที่จะได้รับการประชุมที่ล้าสมัย สัญกรณ์หนึ่งที่มีปัญหาทางคณิตศาสตร์และวันที่เป็นเวลาหลายศตวรรษเช่นกันและโดยการเรียนรู้จากความผิดพลาดของเราเราควรพยายามหลีกเลี่ยงในวิทยาศาสตร์เชิงอนาคต (รวมถึงภาษาคอมพิวเตอร์)
สามสำหรับอาร์เรย์ภาษาคอมพิวเตอร์ที่เชื่อมโยงกับฮาร์ดแวร์จัดสรรอาร์เรย์ C จำนวนเต็ม 21 ตัวและเลื่อนตัวชี้ 10 ดัชนีไปทางขวาและคุณจะมีอาร์เรย์ [-10 ถึง 10] ตามธรรมชาติ สิ่งนี้ไม่เป็นธรรมชาติสำหรับฮาร์ดแวร์ แต่สำหรับคณิตศาสตร์ แน่นอนคณิตศาสตร์อาจล้าสมัย แต่ครั้งสุดท้ายที่ฉันตรวจสอบคนส่วนใหญ่ในโลกเชื่อว่าไม่ใช่
สี่ , ตามที่ชี้ไปแล้วที่อื่น, แม้สำหรับตำแหน่งที่ไม่ต่อเนื่อง (หรือระยะทางลดลงเป็นค่าไม่ต่อเนื่อง), ดัชนีแรกจะเป็นศูนย์, เช่นพื้นในอาคาร (เริ่มต้นที่ศูนย์), นับถอยหลังลดลง (3, 2, 1, ศูนย์ !) ระดับความสูงของพื้นดินพิกเซลแรกของภาพอุณหภูมิ (ศูนย์เคลวินสำหรับศูนย์สัมบูรณ์หรือองศาเซนติเกรดศูนย์เป็นอุณหภูมิน้ำแช่แข็ง 273 K) ในความเป็นจริงสิ่งเดียวที่มันเริ่มต้นด้วยหนึ่งเป็นวิธีการแบบดั้งเดิมของ " ครั้งแรก , สอง , สาม , ฯลฯ" สัญกรณ์ซ้ำซึ่งทำให้ฉันตามธรรมชาติไปยังจุดต่อไป ...
ห้าต่อไปจุด (ซึ่งตามธรรมชาติต่อไปก่อนหน้านี้ ) คือภาชนะระดับสูงควรได้รับการเข้าถึงไม่ได้โดยดัชนี แต่iteratorsเว้นแต่ดัชนีที่ตัวเองมีคุณค่า ฉันประหลาดใจที่ผู้สนับสนุน "ภาษาระดับสูง" ของคุณไม่ได้พูดถึงเรื่องนั้น ในกรณีที่ดัชนีตัวเองมีความสำคัญคุณสามารถเดิมพันครึ่งเวลาที่คุณมีคำถามที่เกี่ยวข้องกับคณิตศาสตร์ในใจ และคุณต้องการให้ภาชนะของคุณเป็นมิตรกับคณิตศาสตร์และไม่ใช่คณิตศาสตร์พิการเช่น "ปฏิทินเกรกอเรียนเก่าของเจ้า" เริ่มต้นที่ 1 และต้องการแฮ็กที่สำรอกซ้ำ ๆ เพื่อให้ทำงานได้
ข้อสรุป
ข้อโต้แย้งที่เพื่อนร่วมงานเขียนโปรแกรมของคุณเป็นความเข้าใจผิดเพราะมันสัมพันธ์กับนิสัยการพูด / เขียนภาษาโดยไม่จำเป็นซึ่งโดยธรรมชาติพร่ามัวกับภาษาคอมพิวเตอร์ (ที่คุณไม่ต้องการให้คำสั่งของคุณเบลอ) และเนื่องมาจากฮาร์ดแวร์ผิด เหตุผลที่ทำให้เกิดปัญหานี้เขาหวังว่าจะโน้มน้าวใจคุณเนื่องจากภาษามีความเป็นนามธรรมสูงขึ้นเรื่อย ๆ ว่าอาเรย์แบบ zero-based นั้นเป็นอดีตไปแล้ว
zero-based arrays เป็นแบบ zero-based เนื่องจากเหตุผลที่เกี่ยวข้องกับคณิตศาสตร์ ไม่ใช่ด้วยเหตุผลที่เกี่ยวข้องกับฮาร์ดแวร์
ทีนี้ถ้านี่เป็นปัญหากับเพื่อนโปรแกรมเมอร์ของคุณให้เขาเริ่มโปรแกรมด้วยการสร้างระดับสูงจริง ๆ เช่น iterators และ foreach loops