Mengapa indeks di XPath dimulai dengan 1 dan bukan 0?


117

Beberapa kolega dan saya membandingkan bahasa masa lalu yang telah kami programkan dan berbicara tentang pengalaman kami dengan VBScript dengan fitur-fiturnya yang aneh seperti indeks berbasis 1, bukan indeks berbasis 0 seperti yang dimiliki hampir setiap bahasa lain, alasannya adalah bahwa itu adalah a bahasa untuk pengguna (misalnya Excel VBA), bukan bahasa untuk pengembang.

Kemudian seseorang berkata, " XPath juga memiliki indeks berbasis 1 " yang tidak dapat saya percayai sampai saya menemukan artikel ini yang memuat banyak alasan yang mendukung pendekatan berbasis 0 termasuk beberapa dari Michael Kay sendiri:

  • "... pengindeksan berbasis nol cenderung membuat rumus indeks lebih sederhana saat mengakses array multi-dimensi dengan ekspresi akses array satu dimensi"
  • "ketika menangani tabel, atau berlangganan ke string, pengalamatan berbasis nol seringkali jauh lebih nyaman"
  • "... pengalamatan perangkat keras bukan satu-satunya keuntungan dari pengalamatan berbasis 0 ... ini juga membuat komputasi lebih mudah ..."

tapi kemudian Michael Kay dikutip sebagai kesimpulan:

... Logika berbasis 1 adalah pilihan yang tepat untuk XPath dan XSLT ... karena bahasanya dirancang untuk pengguna, bukan untuk pemrogram, dan pengguna masih memiliki kebiasaan kuno yang merujuk ke bab pertama dalam buku sebagai Bab Satu...

Bisakah seseorang menjelaskan itu padaku? (1) Bagaimana XPath dirancang untuk pengguna? Saya tidak bisa membayangkan siapa pun yang bukan pengembang yang bertengkar dengan kekakuan sintaksis XPath atau aspek deklaratif / fungsional-pemrograman XSLT. dan (2) Mengapa benar-benar pencipta XPath bertentangan dengan norma bahasa pemrograman modern dengan memilih indeks berbasis 1?


7
Dalam artikel yang sama Michael juga dikutip dengan kata-kata berikut: "Saya tidak dapat memberi tahu Anda apa sejarah sebenarnya dari keputusan itu; saya hanya dapat merasionalisasikannya setelah itu". Bahkan jika dia tidak tahu maka mungkin tidak ada jawaban yang memuaskan.
Dirk Vollmar

5
Saya telah memilih untuk MENUTUP pertanyaan ini sebagai subjektif dan argumentatif. Pengindeksan berbasis 0 sama sekali tidak lebih baik daripada pengindeksan berbasis-1 dan kebalikannya juga benar: pengindeksan berbasis-1 sama sekali tidak lebih baik daripada pengindeksan berbasis-0. Keduanya memiliki kelebihan dan kekurangan. Pengindeksan berbasis 1 lebih alami untuk non-programmer. Ini juga memungkinkan untuk menentukan batas atas rentang sebagai n, bukan yang sangat tidak wajar dan sering menyebabkan kesalahan n - 1. Bagi siapa pun yang menyimpang karena logika "pemrograman modern", mulai menggunakan pengindeksan berbasis 1 akan menjadi pengalaman yang menyenangkan dan menyegarkan :)
Dimitre Novatchev

3
jawaban atas pertanyaan stackoverflow ini menunjukkan bahwa indeks berbasis 0 lebih disukai karena berbagai alasan: stackoverflow.com/questions/393462/defend-zero-based-arrays
Edward Tanguay

9
Pertanyaan saya sebenarnya adalah pertanyaan nyata, karena saya mengajar pemrograman dan ingin memiliki jawaban untuk pertanyaan ini tentang indeks xpath jika muncul. Saya pikir jawaban terbaik adalah bahwa indeks berbasis 1 memetakan ke posisi () yang banyak digunakan di xpath.
Edward Tanguay

64
Saya pikir ini adalah pertanyaan yang sah dan seharusnya tidak ditutup. Ini meminta fakta sejarah yang bukan masalah opini dan jawabannya akan mencerahkan.
Ben Flynn

Jawaban:


30

Array dan indeks koleksi lainnya mewakili offset memori, jadi cukup logis mereka mulai dari nol. Indeks XML dan XPATH mewakili posisi dan hitungan, jadi secara logis indeks dimulai dari satu (dan oleh karena itu nol mewakili "kosong")


8

Untuk menjawab pertanyaan ini, kita harus memeriksa sejarah beberapa teknologi.

RSS XML XSLT dan XPath History

Versi 0.9 dari RSS awalnya dirilis sebagai Ringkasan Situs RDF pada tahun 1999 oleh beberapa orang di Netscape untuk portal my.netscape.com Netscape. Belakangan tahun itu, namanya diubah menjadi RSS (Rich Site Summary) dengan pembaruan v0.91. Pengembangan proyek berpindah tangan beberapa kali, tetapi RSS versi 1.0 dirilis pada Desember 2000. Dengan pembaruan v1.0, RSS menyertakan dukungan untuk XML.

Selama tahun 2002 v2.0 dirilis pada bulan September sebagai RSS (Really Simple Syndication) dan mulai berkembang menjadi teknologi internet utama. Dalam sejarah awalnya, RSS feed (dan data XML yang ada di dalamnya) dibaca oleh manusia dalam format mentah. Blog dan sumber berita lainnya menggunakan RSS feed dan XML untuk menghasilkan informasi yang terus diperbarui. Karena XML dibaca oleh manusia biasa (bukan pemrogram), XPath dan XSLT juga harus mudah dipahami, sehingga manusia biasa ini tidak akan kewalahan oleh kerumitan saat berinteraksi dengannya. Itulah mengapa XPath meniru gaya URI, yang sudah dikenal oleh pengguna akhir. Salah satu konsesi yang dibuat agar dapat dibaca oleh pengguna, adalah dengan menggunakan teknik penomoran model lama, yaitu indeks berbasis-1, bukan indeks berbasis-0.

Meskipun RSS feed dan XML dibuat agar dapat dibaca oleh kebanyakan orang, pembaca RSS dikembangkan untuk menyediakan antarmuka yang lebih menyenangkan bagi manusia untuk membaca RSS feed. Sekarang, data mentah RSS dan XML dibaca hampir secara eksklusif dengan semacam antarmuka pembaca atau grafis. XML masih sering digunakan (mungkin permanen) di seluruh web, tetapi disamarkan oleh antarmuka pengguna grafis yang mewah untuk memberikan pengalaman yang lebih baik bagi pengguna akhir.

* Istilah " manusia biasa " mengacu pada manusia yang bukan pemrogram


5
Saya tidak yakin itu ada hubungannya dengan RSS. Misalnya, dalam spesifikasi XSL ini (yang kemudian dipisahkan menjadi XPath dan lainnya ) dari April 1999, "Fungsi position () mengembalikan posisi node konteks dalam daftar node konteks. Posisi pertama adalah 1, dan yang terakhir adalah posisi akan sama dengan last (). " Apakah ada "manusia biasa" yang menggunakan RDF hingga April 1999, ketika itu disusun?
Matt Gibson
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.