Câu hỏi là, các trường hợp sử dụng của toán tử chuyển đổi kiểu ẩn sẽ không khiến mã của tôi khó hiểu hơn nhiều?
Khi các loại không liên quan (với lập trình viên). Có những trường hợp (hiếm) trong đó bạn có hai loại không liên quan (liên quan đến mã), có liên quan thực sự (liên quan đến tên miền hoặc lập trình viên hợp lý).
Ví dụ, một số mã để thực hiện khớp chuỗi. Một kịch bản phổ biến là khớp một chuỗi bằng chữ. Thay vì gọi IsMatch(input, new Literal("some string"))
, một chuyển đổi ngầm cho phép bạn thoát khỏi buổi lễ đó - tiếng ồn trong mã - và tập trung vào chuỗi ký tự.
Hầu hết mọi lập trình viên sẽ nhìn thấy IsMatch(input, "some string")
và nhanh chóng hiểu được những gì đang diễn ra. Nó làm cho mã của bạn rõ ràng hơn tại trang web cuộc gọi. Nói tóm lại, nó làm cho nó dễ dàng hơn một chút để hiểu những gì đang xảy ra, với một chi phí nhỏ về cách điều đó đang diễn ra.
Bây giờ, bạn có thể lập luận rằng một chức năng quá tải đơn giản để làm điều tương tự sẽ tốt hơn. Và nó là. Nhưng nếu loại điều này có mặt ở khắp mọi nơi, thì việc có một chuyển đổi sẽ sạch hơn (ít mã hơn, tăng tính nhất quán) hơn là thực hiện một đống quá tải hàm.
Và bạn có thể lập luận rằng tốt hơn là yêu cầu các lập trình viên tạo ra loại trung gian một cách rõ ràng để họ thấy "những gì đang thực sự xảy ra". Điều đó ít đơn giản hơn. Cá nhân, tôi nghĩ rằng ví dụ khớp chuỗi theo nghĩa đen rất rõ ràng về "những gì đang thực sự xảy ra" - lập trình viên không cần biết cơ chế về cách mọi thứ xảy ra. Bạn có biết làm thế nào tất cả mã của bạn được thực thi bởi các bộ xử lý khác nhau mà mã của bạn chạy trên không? Luôn luôn có một dòng trừu tượng nơi các lập trình viên ngừng quan tâm về cách thức hoạt động của một cái gì đó. Nếu bạn nghĩ rằng các bước chuyển đổi ngầm là quan trọng, thì đừng sử dụng chuyển đổi ngầm định. Nếu bạn nghĩ rằng họ chỉ làm lễ để giữ cho máy tính vui vẻ, và lập trình viên sẽ tốt hơn nếu không thấy tiếng ồn đó ở mọi nơi,