Perbaikan bug baru-baru ini mengharuskan saya membaca kode yang ditulis oleh anggota tim lain, tempat saya menemukan ini (ini C #):
return (decimal)CostIn > 0 && CostOut > 0 ? (((decimal)CostOut - (decimal)CostIn) / (decimal)CostOut) * 100 : 0;
Sekarang, membiarkan ada alasan yang bagus untuk semua pemain itu, ini sepertinya masih sangat sulit untuk diikuti. Ada bug kecil dalam perhitungan dan saya harus menguraikannya untuk memperbaiki masalah.
Saya tahu gaya pengkodean orang ini dari ulasan kode, dan pendekatannya adalah bahwa lebih pendek hampir selalu lebih baik. Dan tentu saja ada nilai di sana: kita semua telah melihat rantai logika kondisional kompleks yang tidak perlu yang dapat dirapikan dengan beberapa operator yang ditempatkan dengan baik. Tapi dia jelas lebih mahir daripada saya dalam mengikuti rantai operator yang dijejalkan ke dalam satu pernyataan.
Ini, tentu saja, pada akhirnya adalah masalah gaya. Tetapi apakah ada sesuatu yang ditulis atau diteliti tentang mengenali titik di mana perjuangan untuk kode singkat berhenti menjadi berguna dan menjadi penghalang bagi pemahaman?
Alasan para pemain adalah Entity Framework. Db perlu menyimpan ini sebagai tipe yang dapat dibatalkan. Desimal? tidak setara dengan Desimal dalam C # dan perlu dicetak.
CostOut
sama dengan Double.Epsilon
, dan karena itu lebih besar dari nol. Tetapi (decimal)CostOut
dalam hal ini nol, dan kami memiliki pembagian dengan kesalahan nol. Langkah pertama harus mendapatkan kode yang benar , yang saya pikir tidak. Dapatkan benar, buat test case, dan kemudian buat elegan . Kode elegan dan kode singkat memiliki banyak kesamaan, tetapi terkadang singkatnya bukanlah jiwa keanggunan.