Tôi đang viết mã Ruby cho một bài tập mã hóa đơn giản và thường xuyên chạy qua tình huống khó xử này (bài tập là một mật mã solitaire nếu bạn phải biết). Đó là một câu hỏi về việc liệu tôi có nên đưa ra logic của mình bằng các biến mô tả và các câu lệnh một bước làm cho hàm có thể đọc được thay vì một câu lệnh ngắn gọn, thậm chí dày đặc loại bỏ sự lặp lại và / hoặc giảm thiểu các cơ hội cho lỗi.
Ví dụ gần đây nhất của tôi: Chương trình của tôi lấy đầu vào và do các nguyên tắc định dạng cứng nhắc, nó có thể dễ dàng xác định xem đầu vào nên được mã hóa hay giải mã. Để đơn giản hóa, một khi khóa mã hóa và tin nhắn được chuyển đổi / tạo ra để tương thích, vấn đề trừ khóa khỏi tin nhắn được mã hóa hoặc thêm khóa vào tin nhắn không được mã hóa, để có được đầu ra mong muốn (nghĩ về khóa là mã hóa, tin nhắn + mã hóa = mã; mã - mã hóa = tin nhắn). Vị trí DRY nói với tôi rằng tôi nên chuyển đổi tin nhắn được mã hóa khác với tin nhắn không được mã hóa của mình để chức năng lấy khóa mã hóa và áp dụng nó vào tin nhắn không bao giờ cần phân biệt. Tôi đã thấy rằng điều này có nghĩa là tôi cần một số câu lệnh lồng nhau trong hàm nhưng logic có vẻ ổn định. Mã này, tuy nhiên, không dễ đọc.
Mặt khác, tôi có thể viết hai hàm khác nhau được gọi dựa trên cờ được đặt khi ứng dụng xác định mã hóa hoặc giải mã. Điều này sẽ đơn giản hơn để đọc nhưng sẽ nhân đôi chức năng cấp cao của việc áp dụng khóa mã hóa cho tin nhắn (khiến nó được mã hóa hoặc giải mã).
Tôi nên nghiêng về mã có thể đọc được, hay mã ngắn gọn? Hoặc tôi đã bỏ lỡ một cách khác để có được chức năng này và đáp ứng cả hai nguyên tắc? Đây có phải là một vị trí dọc theo một quy mô trong đó người ta phải xem xét mục đích của dự án và đưa ra quyết định tốt nhất để phục vụ mục đích đó?
Cho đến nay, tôi có xu hướng nhấn mạnh mã súc tích, mã DRY hơn mã có thể đọc được.