Я пишу Ruby-код для простого вправи з шифруванням і часто стикаюся з цією дилемою (якщо ви повинні знати, це вправа - пасьянс-шифр). Це питання, чи варто підкреслювати свою логіку описовими змінними та одномоментними операторами, які роблять функцію читабельною замість стислого, навіть щільного твердження, що виключає повторення та / або мінімізує можливості помилок.
Мій останній приклад: Моя програма приймає дані, і через жорсткі вказівки щодо формату, вона може легко визначити, чи слід вводити чи розшифровувати вхід. Для спрощення, коли ключ шифрування та повідомлення конвертуються / генеруються на сумісність, справа в тому, щоб відняти ключ із зашифрованого повідомлення або додати ключ до незашифрованого повідомлення, щоб отримати бажаний вихід (думайте про ключ як шифрування, повідомлення + шифрування = код; код - шифрування = повідомлення). Положення DRY говорить мені, що я повинен перетворити своє зашифроване повідомлення інакше від мого незашифрованого повідомлення, щоб функція, яка приймає ключ шифрування і застосовувала його до повідомлення, ніколи не потребувала розрізнення. Я виявив, що це означає, що мені потрібні деякі вкладені, якщо заяви у функції, але логіка здається суцільною. Однак цей код не легко читається.
Я можу, з іншого боку, написати дві різні функції, які викликаються на основі прапора, який встановлюється, коли програма визначає шифрування чи дешифрування. Це було б простіше для читання, але дублювало б функцію високого рівня застосування ключа шифрування до повідомлення (спричиняючи його зашифрування чи розшифрування).
Чи слід схилятися до читабельного коду чи стислого коду? Або я пропустив інший спосіб отримати цю функціональність і задовольнити обидва принципи? Чи є позиція за шкалою, в якій потрібно враховувати мету проекту та приймати найкращі рішення, щоб відповідати цій цілі?
Поки я схильний наголошувати на стислій, DRY-коді над читабельним кодом.