Я пишу код Ruby для простого упражнения по шифрованию и часто сталкиваюсь с этой дилеммой (упражнение является пасьянсом, если вы должны знать). Вопрос в том, должен ли я дополнить свою логику описательными переменными и одношаговыми операторами, которые делают функцию читабельной вместо кратких, даже плотных, которые исключают повторение и / или сводят к минимуму вероятность ошибок.
Мой самый последний пример: моя программа принимает ввод, и из-за жестких правил форматирования, она может легко определить, должен ли ввод быть зашифрован или расшифрован. Чтобы упростить, после того, как ключ шифрования и сообщение преобразованы / сгенерированы для совместимости, необходимо вычесть ключ из зашифрованного сообщения или добавить ключ в незашифрованное сообщение, чтобы получить желаемый результат (думайте о ключе как о шифровании, сообщение + шифрование = код; код - шифрование = сообщение). Позиция СУХОЙ говорит мне, что я должен преобразовать свое зашифрованное сообщение не так, как мое незашифрованное сообщение, так что функция, которая берет ключ шифрования и применяет его к сообщению, никогда не должна различаться. Я обнаружил, что это означает, что мне нужны вложенные операторы if в функции, но логика кажется твердой. Этот код, однако, не легко читается.
С другой стороны, я мог бы написать две разные функции, которые вызываются на основе флага, который устанавливается, когда приложение определяет шифрование или дешифрование. Это было бы проще для чтения, но дублировало бы функцию высокого уровня применения ключа шифрования к сообщению (вызывая его шифрование или дешифрование).
Должен ли я склоняться к читабельному коду или лаконичному коду? Или я пропустил другой способ получить эту функциональность и удовлетворить оба принципа? Является ли это позицией такого масштаба, в которой нужно учитывать цель проекта и принимать наилучшие решения для достижения этой цели?
Пока что я склонен подчеркивать сжатый, СУХОЙ код над читаемым кодом.