Tôi biết điều này có thể rất cụ thể trong trường hợp sử dụng, nhưng tôi thấy mình tự hỏi điều này quá thường xuyên. Có một cú pháp thường được ưa thích.
Tôi không hỏi cách tiếp cận tốt nhất là gì khi trong một chức năng, tôi đang hỏi tôi nên thoát sớm hay tôi không nên gọi chức năng đó.
Bao bọc nếu xung quanh chức năng gọi
if (shouldThisRun) {
runFunction();
}
Có nếu ( bảo vệ ) trong chức năng
runFunction() {
if (!shouldThisRun) return;
}
Tùy chọn thứ hai rõ ràng có khả năng giảm trùng lặp mã nếu hàm này được gọi nhiều lần, nhưng đôi khi cảm thấy sai khi thêm nó vào đây vì khi đó bạn có thể mất đi trách nhiệm đơn lẻ của hàm.
Đây là một ví dụ
Nếu tôi có một hàm updateStatus () chỉ đơn giản là cập nhật trạng thái của một cái gì đó. Tôi chỉ muốn trạng thái được cập nhật nếu trạng thái đã thay đổi. Tôi biết các địa điểm trong mã của mình nơi trạng thái có khả năng thay đổi và tôi biết các địa điểm khác nơi nó đã thay đổi một cách thách thức.
Tôi không chắc đó có phải là tôi không nhưng tôi cảm thấy hơi bẩn khi kiểm tra chức năng bên trong này vì tôi muốn giữ chức năng này thuần nhất có thể - nếu tôi gọi nó, tôi hy vọng trạng thái sẽ được cập nhật. Nhưng tôi không thể biết liệu có tốt hơn để kết thúc cuộc gọi trong một vài nơi mà tôi biết nó có khả năng không thay đổi hay không.