Sebagai bagian dari penulisan Iterator, saya menemukan diri saya menulis potongan kode berikut (stripping error handling)
public T next() {
try {
return next;
} finally {
next = fetcher.fetchNext(next);
}
}
merasa sedikit lebih mudah dibaca daripada
public T next() {
T tmp = next;
next = fetcher.fetchNext(next);
return tmp;
}
Saya tahu ini adalah contoh sederhana, di mana perbedaan dalam keterbacaan mungkin tidak terlalu besar, tapi saya tertarik pada pendapat umum, apakah itu buruk untuk menggunakan coba-akhirnya dalam kasus-kasus seperti ini di mana tidak ada pengecualian yang terlibat, atau jika itu sebenarnya lebih disukai ketika menyederhanakan kode.
Jika buruk: mengapa? Gaya, kinerja, jebakan, ...?
Kesimpulan Terima kasih atas semua jawaban Anda! Saya kira kesimpulannya (setidaknya bagi saya) adalah bahwa contoh pertama mungkin lebih mudah dibaca jika itu adalah pola umum, tetapi tidak. Oleh karena itu kebingungan yang diperkenalkan dengan menggunakan konstruksi di luar tujuannya, bersama dengan kemungkinan aliran pengecualian, akan lebih besar daripada penyederhanaan apa pun.
Iterator
, di mana Anda memang perlu semacam prefetching agar hasNext()
dapat bekerja. Cobalah sendiri.
Iterator
adalah bahwa Anda perlu mengambil nilai hasNext()
(karena mengambilnya sering kali merupakan satu-satunya cara untuk mengetahui apakah ada) dan mengembalikannya next()
seperti OP lakukan.
finally
balok.