2016-02-22 27 views
8

Khá thường xuyên tôi thấy mã như thế này (C, C++ và đôi khi Java):Dấu ngoặc đơn quanh giá trị trả về - tại sao?

return (value); 

Tôi không thấy bất kỳ lợi ích của các dấu ngoặc đơn. Vì vậy, câu hỏi của tôi là, có các lập trình viên giả định return để được một số loại chức năng với giá trị trả về như là đối số hoặc là có thực sự trường hợp mà các dấu ngoặc đơn có ý nghĩa?

Tôi hiểu rằng một câu hỏi tương tự đã được yêu cầu here, nhưng điều này chỉ liên quan đến ANSI C. Tôi tự hỏi nếu có những khía cạnh cụ thể cho C + + hoặc Java chưa được trả lời ở đó.

+1

'return' là một câu lệnh và _parentheses_ (" ngoặc đơn "được sử dụng cho' [] ') là vô dụng. Về mặt ngữ pháp, chúng là một phần của biểu thức, chứ không phải là tuyên bố. Các kiểu mã hóa hiện đại thường không khuyến khích sử dụng chúng. – Olaf

+0

@WillBriggs: Vâng, nó có ngữ pháp. Điều đó có thể rất phù hợp để phân tích mã. – Olaf

+0

Các dấu ngoặc đơn sẽ giống như những dấu hiệu này ngăn chặn các cảnh báo chuyển đổi từ kiểu giá trị sang kiểu trả về của hàm? Tôi biết một số cảnh báo khác, giống như các bài tập trong các câu lệnh có điều kiện, có thể bị ngăn chặn với các parens bổ sung. – Sqeaky

Trả lời

17

Đối với C

Dấu ngoặc đơn được đặt khi có biểu thức và muốn giá trị trả về là giá trị của biểu thức. Thậm chí sau đó dấu ngoặc đơn là không cần thiết. Đó là hoàn toàn ok để viết một cái gì đó giống như

return x + y; 

Các lập trình viên không làm cho nó return (x + y); để làm cho nó dễ đọc hơn.

Vì vậy, việc đặt dấu ngoặc đơn là vấn đề về ý kiến ​​và thực hành.


đối với C++

Với Có một trường hợp phức tạp nơi ngoặc vấn đề. Trích dẫn this câu hỏi

int var1 = 42; 
decltype(auto) func1() { return var1; } // return type is int, same as decltype(var1) 
decltype(auto) func1() { return(var1); } // return type is int&, same as decltype((var1)) 

Bạn có thể thấy giá trị trả về khác nhau và đó là do dấu ngoặc đơn. Bạn có thể xem qua câu trả lời this để hiểu chi tiết.


Đối với java, dấu ngoặc đơn không tạo ra bất kỳ sự khác biệt nào.

ước Mã hóa gợi ý để đi với

return x + y; 

để hiểu thêm, hãy đọc this câu trả lời.


LƯU Ý: Tôi không biết nhiều về java và C++. Tất cả nội dung trong câu trả lời của tôi về java và C++ được lấy từ các câu trả lời khác. Tôi đã làm điều này để củng cố các công ước khác nhau cho ba ngôn ngữ.

+0

Tóm tắt: "Vì vậy, đặt dấu ngoặc là một vấn đề về ý kiến ​​và thực hành. " Tuyệt quá!! –

+4

"để làm cho nó dễ đọc hơn" - không chắc chắn, nó cũng có thể gây nhầm lẫn bởi vì nó trông giống như một cuộc gọi chức năng. –

+4

@FrankPuffer, không phải vậy. – SergeyA

4

Về mặt kỹ thuật, không có lý do gì để ngoặc đơn biểu thức được cung cấp cho return. Đó là một vấn đề của hương vị thực sự.

Điều đó nói rằng, tôi thường sẽ ngoặc đơn biểu thức return nếu nó sử dụng toán tử boolean. Vì các toán tử như vậy thường được xem như là một phần của một số while hoặc if, nó làm cho nó rõ ràng hơn rằng bạn muốn làm điều gì đó với giá trị đó ngoài việc nhảy theo ý kiến ​​của tôi.

int out_of_range(int x) 
{ 
    return ((x < 1) || (x > 10)); 
} 
1

Phần lớn di sản. K & Ngôn ngữ lập trình R C (1978) cho thấy lợi nhuận sử dụng dấu ngoặc đơn.Có thể một số trình biên dịch C cũ yêu cầu điều này, nhưng tôi không chắc chắn.

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