Saya memiliki loop untuk di mana saya harus melewatkan elemen pertama dalam array berbasis nol.
Manakah dari ini yang menunjukkan niat saya lebih jelas?
for($i=1 ; $i < count(array) ; $i++){
array[$i];
}
atau
for($i=0+1 ; $i < count(array) ; $i++){
array[$i];
}
$i=2-1
cara superior. : /foreach ($i in range(1, count))
(apa pun yang tampak seperti di PHP). Atau sesuatu sepertiforeach ($item in array.skip(1))
apa yang akan dilakukan orang C #.Jawaban:
Saya benci keduanya.
Siapa bilang Anda bisa menggunakan angka ajaib? Jika Anda akan mulai dengan offset 1, bagaimana dengan memberi tahu kami MENGAPA Anda mulai dengan offset 1. Menambahkan nol ajaib yang sama tidak menjelaskan apa-apa kepada saya.
Apakah ini payload offset? Apakah ini beberapa string pascal yang Anda konversi menjadi string c yang dihentikan nol? Tolong beri tahu kami apa yang sedang terjadi.
Maaf, tapi aku telah menyia-nyiakan karierku untuk memecahkan misteri-misteri tak berguna seperti ini dan kesabaranku untuk mereka telah menipis. Apakah variabel dengan nama yang layak benar-benar banyak bertanya?
Dengan nama yang layak maksud saya nama yang menjelaskan MENGAPA kita melewatkan elemen pertama. Bukan sesuatu yang hanya mengatakan bahwa kita melewatkan elemen pertama. Saya memberi tahu saya sendiri.
sumber
static final int LONELIEST_NUMBER = 1
semua kode Java saya. :-) Itu mengatakan, kalau dipikir-pikir, saya ingin undownvote jawaban Anda tetapi tidak bisa kecuali Anda mengeditnya. Konyol aturan SO?Jawaban singkat: opsi pertama lebih baik.
Opsi kedua hanya menambahkan noise. Sangat tidak mungkin 0 + 1 membantu pembaca untuk memahami bahwa itu mungkin 0 tetapi 1. Kemungkinan besar dia akan bingung sesaat dan teralihkan dari apa yang dimaksud dengan loop. Terutama dalam bahasa di mana semua array mulai dari 0.
Seperti yang disebutkan lainnya, jika Anda ingin menekankan fakta bahwa loop dimulai dari 1, bukan 0, tambahkan saja komentar.
sumber
Jangan bilang kami melewatkan item pertama - kami bisa melihatnya. Apa yang tidak jelas adalah alasannya . Jadi .. jika tidak jelas dari konteks, beri tahu kami alasannya:
Atau, jika Anda menolak komentar, sesuatu seperti:
Jangan gunakan komentar dan tipuan untuk mengingatkan kami bagaimana bahasa itu bekerja.
sumber
Contoh Anda terlihat dibuat-buat. Dalam kode dunia nyata, fakta bahwa loop harus dimulai pada elemen array kedua sangat jelas dari baris kode berikut. Misalnya, jika kode aslinya terlihat seperti ini
tidak akan ada penjelasan atau konstruksi "0 +1" yang diperlukan untuk menjelaskan mengapa loop dimulai pada 1 bukannya 0.
Namun, jika kode di dalam loop tidak menjelaskan alasan dengan cara yang jelas (mungkin
array[0]
memiliki makna khusus dan harus ditangani secara berbeda dari elemen yang tersisa), maka tambahkan komentar yang menjelaskan. Tetapi sebelum Anda melakukan ini, pikirkan dua kali jika Anda dapat menghindari memilikiarray[0]
makna khusus ini, dan mengatur ulang kode di sekitarnya, yang mungkin akan menjadi alternatif yang lebih baik.sumber
Belum pernah melihat opsi # 2, tetapi saya menyukainya. Mengapa? Dengan opsi # 1 Saya ingin tahu apakah programmer lupa bahwa array mulai dari 0. Opsi # 2 membuatnya lebih jelas bahwa mereka sengaja mulai dari 1.
Yang mengatakan, lebih baik dalam kedua kasus untuk menambahkan komentar mengapa Anda melewatkan elemen.
Atau, jika Anda dapat dengan mudah menggambarkan mengapa Anda memulai pada satu, gunakan konstanta. Misalnya, jika melihat argumen baris perintah, sesuatu seperti
Secara pribadi, saya mungkin hanya menggunakan komentar saja, YMMV.
sumber
Saya ragu ada orang yang akan bingung dengan yang pertama. Kita semua harus melakukannya. Sedemikian rupa sehingga yang kedua lebih mungkin membingungkan. "Mengapa ada 0+ di sana? Apakah mereka menimpa + operator entah bagaimana?"
Kompilator yang layak akan mengubah yang kedua menjadi yang pertama, tetapi sepertinya Anda menggunakan PHP, yang ditafsirkan. Jadi, setiap kali penerjemah memukul lingkaran itu, itu harus benar-benar menambahkan 0 dan 1. Bukan masalah besar, tapi mengapa membuat penerjemah melakukan pekerjaan?
sumber
Gunakan variabel yang menjelaskan titik awal.
Anda perlu " melewati elemen pertama dalam array berbasis nol ", jadi misalnya:
sumber
Jika seseorang terobsesi dengan semua loop mulai dari nol Anda bisa menggunakan pernyataan melanjutkan. Tambahkan komentar mengapa Anda melewatkannya karena biasanya tidak.
sumber
if first then skip
dengan komentar yang mengatakan mengapa. Masih tanpa konteks, tidak ada solusi yang "terbaik"Apa yang akan saya lakukan adalah menghapus elemen pertama sebelum perulangan. Buat array baru jika perlu. Jelaskan dalam komentar mengapa Anda melakukannya. Dan kemudian hanya melakukan foreach sederhana.
Dengan cara ini niat Anda sangat jelas.
Untuk memperjelas lebih lanjut Anda bisa membungkus kode dalam suatu metode dengan nama yang sesuai untuk memperjelas.
Namun semua ini masih konteks yang hilang. Apa yang ingin Anda lakukan dengan elemen? Apakah Anda akan mengembalikan array baru? Apakah Anda peduli dengan yang asli dan yang baru setelah Anda
doStuff()
?Bagaimanapun, tidak ada jawaban yang jelas di sini, dan memutuskan bagaimana membuat kode dapat dibaca sangat tergantung pada konteksnya.
sumber
$array[$i-1] = $array[$i]
atau sesuatu yang serupa, sesuai jawaban @ DocBrown?1
(lihat komentar Kevin Lee), itu tidak membuat kode lebih jelas sama sekali. Pembaca harus memahami array_shift, apa fungsinya, cara kerjanya. Mungkin baris kode ini adalah bug? Apakah itu memodifikasi array atau mengembalikan yang baru? Apakah itu memasukkan elemen atau menghapusnya? Apakah itu mengubah indeks atau tidak? Saya gagal melihat bagaimana menggunakan loop berbasis satu tidak akan menjadi peningkatan besar dalam fungsi itu (dan diberi namanya, langsung dapat dimengerti).