Semua jawaban lain mempertahankan aturan dosen Anda 3.
Izinkan saya mengatakan bahwa saya setuju dengan Anda: aturannya berlebihan dan saya tidak akan menyarankannya. Memang benar bahwa secara teoritis mencegah kesalahan jika Anda selalu menambahkan kurung keriting. Di sisi lain, saya tidak pernah mengalami masalah ini dalam kehidupan nyata : bertentangan dengan apa yang dinyatakan oleh jawaban lain, saya tidak pernah lupa menambahkan tanda kurung keriting begitu diperlukan. Jika Anda menggunakan indentasi yang tepat, segera menjadi jelas bahwa Anda perlu menambahkan kurung keriting sekali lebih dari satu pernyataan yang indentasi.
Jawaban oleh "Komponen 10" sebenarnya menyoroti satu-satunya kasus yang mungkin di mana ini benar-benar dapat menyebabkan kesalahan. Tetapi di sisi lain, mengganti kode melalui ekspresi reguler selalu membutuhkan perhatian besar.
Sekarang mari kita lihat sisi lain dari medali: adakah kerugian untuk selalu menggunakan kurung keriting? Jawaban lain cukup mengabaikan hal ini. Tapi ada adalah kerugian: tidak memakan banyak ruang layar vertikal, dan ini pada gilirannya dapat membuat kode Anda terbaca karena itu berarti Anda harus gulir lebih dari yang diperlukan.
Pertimbangkan fungsi dengan banyak klausa penjaga di awal (dan ya, berikut ini adalah kode C ++ yang buruk tetapi dalam bahasa lain ini akan menjadi situasi yang cukup umum):
void some_method(obj* a, obj* b)
{
if (a == nullptr)
{
throw null_ptr_error("a");
}
if (b == nullptr)
{
throw null_ptr_error("b");
}
if (a == b)
{
throw logic_error("Cannot do method on identical objects");
}
if (not a->precondition_met())
{
throw logic_error("Precondition for a not met");
}
a->do_something_with(b);
}
Ini adalah kode yang mengerikan, dan saya sangat berpendapat bahwa yang berikut ini jauh lebih mudah dibaca:
void some_method(obj* a, obj* b)
{
if (a == nullptr)
throw null_ptr_error("a");
if (b == nullptr)
throw null_ptr_error("b");
if (a == b)
throw logic_error("Cannot do method on identical objects");
if (not a->precondition_met())
throw logic_error("Precondition for a not met");
a->do_something_with(b);
}
Demikian pula, loop bersarang pendek manfaat dari menghilangkan kurung keriting:
matrix operator +(matrix const& a, matrix const& b) {
matrix c(a.w(), a.h());
for (auto i = 0; i < a.w(); ++i)
for (auto j = 0; j < a.h(); ++j)
c(i, j) = a(i, j) + b(i, j);
return c;
}
Dibandingkan dengan:
matrix operator +(matrix const& a, matrix const& b) {
matrix c(a.w(), a.h());
for (auto i = 0; i < a.w(); ++i)
{
for (auto j = 0; j < a.h(); ++j)
{
c(i, j) = a(i, j) + b(i, j);
}
}
return c;
}
Kode pertama adalah ringkas; kode kedua membengkak.
Dan ya, ini dapat dikurangi sampai batas tertentu dengan menempatkan brace pembuka pada baris sebelumnya. Tapi itu masih kurang dibaca daripada kode tanpa tanda kurung keriting.
Singkatnya: jangan menulis kode yang tidak perlu yang memakan ruang layar.