Saya sedang menulis kode Ruby untuk latihan enkripsi sederhana dan sering mengalami dilema ini (latihan ini adalah sandi solitaire jika Anda harus tahu). Ini adalah pertanyaan apakah saya harus menggunakan logika saya dengan variabel deskriptif dan pernyataan satu langkah yang membuat fungsi lebih mudah dibaca daripada pernyataan singkat, bahkan padat yang menghilangkan pengulangan dan / atau meminimalkan peluang kesalahan.
Contoh saya yang terbaru: Program saya mengambil input, dan karena pedoman format yang kaku, ia dapat dengan mudah menentukan apakah input harus dienkripsi atau didekripsi. Untuk menyederhanakan, setelah kunci enkripsi dan pesan dikonversi / dihasilkan agar kompatibel, itu adalah masalah mengurangi kunci dari pesan terenkripsi atau menambahkan kunci ke pesan yang tidak dienkripsi, untuk mendapatkan output yang diinginkan (anggap kunci sebagai enkripsi, message + enkripsi = kode; kode - enkripsi = pesan). Posisi KERING mengatakan kepada saya bahwa saya harus mengubah pesan terenkripsi saya berbeda dari pesan tidak terenkripsi sehingga fungsi yang mengambil kunci enkripsi dan menerapkannya pada pesan tidak perlu dibedakan. Saya telah menemukan bahwa ini berarti saya perlu beberapa pernyataan bersarang jika fungsi tetapi logika tampaknya solid. Namun, kode ini tidak mudah dibaca.
Saya bisa, di sisi lain, menulis dua fungsi berbeda yang dipanggil berdasarkan flag yang diset ketika aplikasi menentukan enkripsi atau dekripsi. Ini akan lebih mudah dibaca tetapi akan menduplikasi fungsi tingkat tinggi menerapkan kunci enkripsi ke pesan (menyebabkannya dienkripsi atau didekripsi).
Haruskah saya condong ke arah kode yang mudah dibaca, atau kode ringkas? Atau apakah saya melewatkan cara lain untuk mendapatkan fungsi ini dan memenuhi kedua prinsip? Apakah itu posisi sepanjang skala di mana seseorang harus mempertimbangkan tujuan proyek dan membuat keputusan terbaik untuk melayani tujuan itu?
Sejauh ini, saya cenderung menekankan kode DRY yang ringkas dan lebih mudah dibaca.