Chúng ta đều biết mạch về ngắn trong các biểu thức logic, tức là khiCó một điều như phép nhân ngắn mạch không?
if (False AND myFunc(a)) then
...
không bận tâm thực hiện myFunc()
vì không có cách nào điều kiện if
có thể là sự thật.
tôi rất tò mò về việc liệu có một tương đương cho phương trình đại số hàng ngày của bạn, nói
result = C*x/y + z
Nếu C=0
không có điểm trong việc đánh giá các nhiệm kỳ đầu tiên. Nó sẽ không quan trọng nhiều hiệu suất khôn ngoan nếu x
và y
là vô hướng, nhưng nếu chúng ta giả vờ chúng là ma trận lớn và các hoạt động là tốn kém (và áp dụng cho ma trận) thì chắc chắn nó sẽ tạo sự khác biệt. Tất nhiên bạn có thể tránh trường hợp cực đoan như vậy bằng cách ném vào tuyên bố if C!=0
.
Vì vậy, câu hỏi của tôi là liệu tính năng đó có tồn tại hay không và liệu nó có hữu ích hay không. Tôi không phải là một lập trình viên vì vậy nó có thể làm theo một cái tên mà tôi đã không đi qua; Nếu vậy xin vui lòng khai sáng cho tôi :)
Viết tắt mạch logic là một khái niệm quan trọng từ quan điểm chức năng trong khi "rút ngắn số học" là chỉ đơn thuần là một tối ưu hóa ở cấp độ trình biên dịch mà không có sự khác biệt về chức năng. Ngôn ngữ lựa chọn của bạn có thể đã làm nó đằng sau hậu trường mà bạn không nhận thấy. – deceze
Người nào đó biết nhiều hơn tôi nên trả lời, nhưng tôi tưởng tượng bạn sẽ gặp rắc rối nếu bạn rút ngắn bộ phận. Điều gì sẽ xảy ra, ví dụ, nếu y = 0? Nếu ngắn mạch, nó sẽ trả về 0 khi câu trả lời thực sự là một lỗi. – Nate
@deceze Số học ngắn mạch thực sự sẽ có sự khác biệt về chức năng ngoài tối ưu hóa, cũng giống như mạch ngắn logic. Hãy xem xét 'result = C * myfunction()'. Nếu 'C == 0', gây ra biểu thức số học để đoản mạch, thì' myfunction' sẽ không bao giờ được gọi, và bất kỳ tác dụng phụ nào có thể xảy ra (cũng giống như với đoản mạch logic). –