Một bản sửa lỗi gần đây yêu cầu tôi chuyển qua mã được viết bởi các thành viên khác trong nhóm, nơi tôi đã tìm thấy mã này (đó là C #):
return (decimal)CostIn > 0 && CostOut > 0 ? (((decimal)CostOut - (decimal)CostIn) / (decimal)CostOut) * 100 : 0;
Bây giờ, cho phép có một lý do chính đáng cho tất cả các diễn viên đó, điều này dường như vẫn rất khó theo dõi. Có một lỗi nhỏ trong tính toán và tôi đã phải gỡ rối nó để khắc phục vấn đề.
Tôi biết phong cách mã hóa của người này từ đánh giá mã, và cách tiếp cận của anh ta là ngắn hơn hầu như luôn luôn tốt hơn. Và tất nhiên có giá trị ở đó: tất cả chúng ta đã thấy các chuỗi logic có điều kiện phức tạp không cần thiết có thể được làm sạch với một vài toán tử được đặt tốt. Nhưng rõ ràng anh ta lão luyện hơn tôi khi theo các chuỗi nhà điều hành nhồi nhét vào một tuyên bố duy nhất.
Tất nhiên, đây là vấn đề của phong cách. Nhưng có bất cứ điều gì đã được viết hoặc nghiên cứu để nhận ra điểm mà việc phấn đấu cho mã ngắn không còn hữu ích và trở thành rào cản đối với sự hiểu biết?
Lý do cho các diễn viên là Entity Framework. Các db cần lưu trữ chúng dưới dạng nullable. Số thập phân? không tương đương với số thập phân trong C # và cần được bỏ.
CostOut
bằng Double.Epsilon
, và do đó lớn hơn 0. Nhưng (decimal)CostOut
trong trường hợp đó là 0, và chúng ta có một phép chia cho số không. Bước đầu tiên là lấy mã chính xác , điều mà tôi nghĩ là không phải. Làm cho nó chính xác, làm cho các trường hợp thử nghiệm, và sau đó làm cho nó thanh lịch . Mã thanh lịch và mã ngắn gọn có rất nhiều điểm chung, nhưng đôi khi sự ngắn gọn không phải là linh hồn của sự thanh lịch.