Buat variabel boolean untuk setiap langkah kecil:
bool step1 = i + u == b || q >= a;
bool step2 = a != b && p.isGood() && group1;
bool step3 = group2 || k.isSomething() || m > n;
if (step3) { doSomething(); }
Ini tentu saja mirip dengan jawaban Lacrymology, kecuali dengan nama yang berbeda untuk setiap langkah.
Jika Anda menyebutkan step1
, step2
dan step3
dengan cara yang masuk akal secara konseptual, ini seharusnya yang paling mudah dibaca. p.isGood()
dan k.isSomething()
kadang-kadang dapat dipanggil dalam situasi di mana itu tidak ada dalam kode asli Anda, jadi ini tidak akan menjadi pilihan jika fungsi-fungsi itu mahal atau jika Anda menjalankan kode ini dalam loop yang sangat ketat.
Di sisi lain, Anda tidak perlu khawatir tentang hit kinerja yang membuat variabel baru mungkin terjadi; kompiler yang baik akan mengoptimalkannya.
Contoh dengan deteksi tabrakan persegi panjang (yang mungkin tidak Anda gunakan karena hit kinerja yang disebutkan di atas):
if((a.x + a.width >= b.x || b.x + b.width >= a.x)
&& (a.y + a.height >= b.y || b.y + b.width >= a.y)
)
{ collision(); }
Mungkin menjadi:
bool horizMatch = a.x + a.width >= b.x || b.x + b.width >= a.x;
bool vertMatch = a.y + a.height >= b.y || b.y + b.width >= a.y;
if(horizMatch && vertMatch) { collision(); }
Juga, jika Anda ingin meninggalkan kode Anda apa adanya, saya pikir itu akan baik-baik saja juga. Jujur saya pikir kode Anda cukup terbaca. Jelas saya tidak tahu apa sebenarnya a b x y i u p k m n
, tetapi sejauh struktur berjalan, itu terlihat baik bagi saya.