Sẽ tốt hơn nếu bạn sử dụng một loại tùy chọn như một loại tùy chọn làm vùng chứa cho các loại trả lại có thể không có. Đây là phổ biến trong hầu hết các ngôn ngữ chức năng như Scala. Hữu ích cho trường hợp bạn chỉ quan tâm đến việc có thành công hay thất bại, và bạn không quan tâm lý do tại sao. ví dụ. Phân tích số nguyên.
int num; // mutable = bugprone
if (!int.TryParse(str, out num)) // branching = complexity
num = someDefault;
Sử dụng loại tùy chọn, bạn có thể xác định trình phân tích cú pháp bao gồm độ xấu có thể thay đổi và trả về tùy chọn rõ ràng. điều này làm giảm sự phức tạp của bạn bằng cách có điều này nếu chỉ trong MỘT NƠI NƠI. tránh trùng lặp và đột biến.
public Option<int> IntParse(string str) {
int num; // mutable
if (!int.TryParse(str, out num))
return Option.None<int>();
else
return Option.Some<int>(num);
}
sử dụng ở những nơi khác:
int result = IntParse(someString).GetOrElse(defaultValue);
Như bạn có thể thấy kết quả này trong một mô hình sử dụng cách đo ít phức tạp, kể từ nhánh đã bị ẩn.
Cách khác, nếu chức năng của bạn đã trở lại hai điều, đó là một cơ hội mà:
- Chức năng là quá phức tạp và cần được chia ra (làm một việc tốt!), Hoặc
- Các giá trị trả về có liên quan chặt chẽ và phải được liên kết với nhau theo một loại mới
Nội dung cần suy nghĩ!
Nguồn
2012-11-15 23:22:39
Đây là một chủ đề liên quan: http://stackoverflow.com/questions/134063/why-are-out-parameters-in-net-a-bad-idea – razlebe
Có một đường thẳng nhỏ giữa số ít mã và khả năng mở rộng và sang trọng. Giả sử nếu có nhiều hơn hai tham số, nó sẽ khôn ngoan hơn khi có kiểu trả về – Ramesh