2010-02-04 28 views
53

Với cuộc gọi chức năng sau đây trong C:Thứ tự thực thi các tham số đảm bảo trong Java?

fooFunc(barFunc(), bazFunc()); 

Trình tự thực hiện barFuncBazFunc không được chỉ định, vì vậy barFunc() có thể được gọi trước khi bazFunc() hoặc bazFunc() trước barFunc() trong C.

Java chỉ định thứ tự thực hiện biểu thức đối số chức năng hoặc như C không được chỉ định?

+0

câu hỏi liên quan: [Thứ tự thực hiện các phương pháp mô tả một cá thể và đối số trong Java?] (Http://stackoverflow.com/questions/13724952/order-of-execution-of-methods-describing-an -instance-and-an-argument-in-java/13725048) – bacar

Trả lời

59

Từ Java Language Specification (trên Expressions):

15.7.4 danh sách đối số được đánh giá Left-to-Phải

Trong một hoặc dụ lớp biểu hiện sáng tạo phương pháp hoặc constructor gọi, biểu tranh luận có thể xuất hiện trong vòng dấu ngoặc đơn, được phân tách bằng dấu phẩy. Mỗi biểu thức đối số dường như là được đánh giá đầy đủ trước bất kỳ phần nào của bất kỳ biểu thức đối số nào ở bên phải.

+8

Trong khi điều này là đúng, xin vui lòng không mã theo cách làm cho nó phụ thuộc vào thứ tự thực hiện. Nó chỉ thêm tính phức tạp mà không cần thêm chức năng. – Jon

+7

Thật vậy, "Chúng tôi đề nghị rằng mã không dựa chủ yếu vào đặc điểm kỹ thuật này." http://java.sun.com/docs/books/jls/third_edition/html/expressions.html#15.7 – trashgod

+30

@Jon Tôi không đồng ý! nếu nó nằm trong đặc điểm kỹ thuật, thì bạn có thể dựa vào nó. Ví dụ, để đọc một hình chữ nhật từ một tệp, tôi sử dụng mã này: myRect = new Rectangle (scan.nextInt(), scan.nextInt(), scan.nextInt(), scan.nextInt()); Nó ngắn gọn và đơn giản. Việc triển khai dài hơn sẽ là sự phức tạp không cần thiết. –

Các vấn đề liên quan