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, step2dan step3dengan 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.