Dalam C ++, apakah itu praktik buruk membuat blok kode di dalam beberapa fungsi, seperti berikut ini:
bool f()
{
{
double test = 0;
test = // some other variable outside this function, for example.
if (test == // some value)
return true;
}
{
double test = 0;
test = // some variable outside this function, different from the last one.
if (test == // some value)
return true;
}
return false;
}
Tujuan melakukan ini adalah menggunakan nama variabel yang sama dari "tes" beberapa kali, untuk jenis prosedur yang sama. Dalam proyek saya yang sebenarnya, saya memiliki beberapa variabel dan sedang melakukan beberapa tes. Saya tidak benar-benar ingin terus membuat variabel baru dengan nama yang berbeda untuk setiap tes, mengingat betapa tesnya sangat mirip.
Apakah praktik yang buruk untuk menyisipkan blok kode sehingga variabel keluar dari ruang lingkup setelah setiap tes, dan kemudian saya dapat menggunakan nama mereka lagi? Atau haruskah saya mencari solusi lain? Perlu dicatat bahwa saya mempertimbangkan untuk menggunakan set variabel yang sama untuk semua tes saya (dan hanya mengatur semuanya ke 0 setelah setiap tes selesai), tetapi saya mendapat kesan bahwa ini mungkin praktik yang buruk.
sumber
Jawaban:
Blok sangat masuk akal jika Anda menggunakannya untuk lingkup sumber daya. File, koneksi jaringan, alokasi memori, transaksi basis data, apa pun. Dalam kasus tersebut, blok sebenarnya adalah bagian dari struktur logis dari kode: Anda menelurkan sumber daya, itu ada untuk beberapa periode waktu, dan kemudian hilang pada waktu yang ditentukan.
Tetapi jika semua yang Anda lakukan adalah pelingkupan nama , maka saya akan mengatakan bahwa itu adalah praktik yang buruk. Secara umum, tentu saja; keadaan khusus dapat berlaku.
Misalnya, jika fungsi ini dihasilkan oleh beberapa sistem pembuatan kode, kerangka pengujian, atau sejenisnya, maka blok demi pelingkupan nama adalah hal yang wajar. Tetapi Anda akan berbicara tentang kode yang ditulis untuk tujuan mesin, bukan manusia.
Jika seorang manusia sedang menulis kode di mana mereka perlu menggunakan kembali nama dalam fungsi yang sama, saya akan mengatakan bahwa blok-blok itu mungkin perlu fungsi yang terpisah. Terutama jika nama-nama itu digunakan dengan berbagai jenis dan / atau makna di dalam blok-blok itu.
sumber
Bukan praktik yang buruk untuk membuat blok seperti ini. Begitulah cara kerja lingkup.
Biasanya ini dilakukan ketika menggunakan RAII (Akuisisi Sumber Daya adalah Inisialisasi) dan Anda ingin mengontrol ketika destruktor dipanggil.
Jika terlalu lama, saya akan mempertimbangkan untuk memindahkan kode itu ke fungsinya sendiri.
Menurut pendapat saya hanya menggunakannya untuk mendaur ulang nama variabel bukanlah ide yang baik. Tapi saya bisa melihatnya berguna dalam kasus dengan memori rendah
sumber