Trong hầu hết các ngôn ngữ lập trình, các đối số được truyền cho hàm được đánh giá trước khi chức năng sử dụng chúng, tức là chúng được đánh giá háo hức.Tại sao hầu hết các ngôn ngữ lập trình sử dụng đánh giá háo hức cho các đối số được truyền cho một hàm?
Với tôi, có vẻ như sẽ có ý nghĩa hơn nhiều khi đánh giá các đối số chỉ khi chức năng sử dụng chúng, tức là, uể oải. Điều này có ý nghĩa hơn với tôi bởi vì nó có vẻ như nó sẽ có một lợi ích hiệu suất: tại sao đánh giá những thứ mà thậm chí không bao giờ cần thiết?
Hơn nữa, giả sử bạn muốn thực hiện một chức năng if
chấp nhận một boolean, và một đối tượng trả về nếu boolean là sự thật, và đối tượng khác quay trở lại nếu boolean là sai:
object if(bool condition, object valueIfTrue, object valueIfFalse) {
if(condition) return valueIfTrue;
return valueIfFalse;
}
Trong một ngôn ngữ mà háo hức đánh giá các đối số, cả hai đối tượng luôn được đánh giá mặc dù hàm sẽ luôn luôn chỉ cần một trong số chúng, trong đó, tốt nhất, phải gánh chịu một chi phí không cần thiết, và, tệ nhất, gây ra một vòng lặp vô hạn.
Điều đó nói rằng, vì hầu hết các ngôn ngữ lập trình sử dụng đánh giá mong muốn các đối số hàm, tôi cho rằng phải có lý do tại sao nó thường được thực hiện theo cách đó. Có một số lợi ích lớn của việc đánh giá háo hức ở đây mà tôi đang xem xét, chỉ vì nó dễ dàng hơn để thực hiện các ngôn ngữ theo cách đó, nó chỉ là truyền thống, hay cái gì?
Bởi vì thật dễ dàng để biên dịch/giải thích mã bằng những ngôn ngữ không phải là ngôn ngữ lười biếng đó. –