Tôi muốn biết có bao nhiêu tham số có thể được truyền cho hàm, ý tôi là thực hành lập trình tốt là gì, liên quan đến việc truyền tham số cho hàm?Số tham số được chuyển đến chức năng?
Trả lời
Càng ít càng tốt, nhưng chỉ khi nó vẫn hợp lý. Tôi đã không bao giờ nghe nói về một số tiêu chuẩn của params được thông qua, nhưng tôi đã nghe nói về cách để giữ cho chúng xuống tốt hơn.
Ví dụ, không làm điều này:
public void DoSomething(string name, int age, int weight, ...) { }
mà là:
public void DoSomething(Person person) { }
nhưng hy vọng rằng đi mà không nói. Nhưng ngoài ra, tôi khuyên bạn không nên tạo một lớp kỳ lạ chỉ để cắt giảm số lượng tham số.
Code Complete gợi ý tối đa là 7. Điều này là do các The Magical Number Seven, Plus or Minus Two:
... số lượng đối tượng một con người trung bình có thể chứa trong bộ nhớ làm việc là 7 ± 2; điều này thường được gọi là Luật của Miller.
Dưới đây là một đoạn trích từ Code Complete 2nd Edition:
Giới hạn số lượng các thông số của một thói quen để khoảng bảy
Bảy là một con số kỳ diệu cho sự hiểu biết của người dân. Nghiên cứu tâm lý đã phát hiện ra rằng người ta thường không thể theo dõi hơn bảy khối thông tin cùng một lúc (Miller 1956). Phát hiện này đã được áp dụng cho một số lượng lớn các ngành, và có vẻ như an toàn để phỏng đoán rằng hầu hết mọi người không thể theo dõi nhiều hơn bảy thông số thường lệ cùng một lúc.
Nếu số là 7 ± 2, chúng ta có nên lấy mức thấp nhất và nói tối đa là 5 không? –
@Jonathan Xem chỉnh sửa của tôi. Nó thực sự là 7. –
Điều này đúng. Tôi đã từng ở trong một lớp học trong khi ở Không quân, nơi người hướng dẫn đặt dãy này lên bảng, yêu cầu chúng tôi ghi nhớ nó rồi lặp lại nó: C130KC10C140L1011C5. Không phải tất cả mọi người trong Không quân đều nhìn thấy máy bay nhưng tôi tình cờ viết một chương trình giao dịch với máy bay chở hàng, vì vậy tôi thấy điều dễ nhớ hơn nhiều: C130, KC10, C140, L1011, C5 –
IMHO 5 ở MAX.
6 quá nhiều đối với tôi và 7 áp đảo!
Vì vậy, bạn tuân thủ luật Millers sau đó, như Anton gợi ý :) – Default
Yup Dude! Phần luật Millers mà tôi không thích là "7 + 2" số lượng quá lớn của nó ...! –
Nếu bạn có nhiều thứ bạn muốn chuyển sang một hàm, bạn có thể muốn xem xét một số phương tiện khác để chuyển dữ liệu đó thay vì truyền tham số đơn giản. Ví dụ trong một số trường hợp, có thể tốt hơn là tạo một tệp XML và sau đó chuyển các giá trị liên quan đến việc lấy dữ liệu xung quanh tệp XML đó. Nếu bạn đang chạy một ứng dụng web, nó có thể chỉ đơn giản là truyền dữ liệu qua các phiên hoặc đăng thay vì nhận được hoặc các cuộc gọi chức năng sẽ đơn giản hóa cuộc sống của bạn.
Ngoài ra, bạn có thể muốn lưu trữ một số thông tin đó làm biến thành viên.
Tôi khuyên bạn không nên nhiều hơn 4. Bạn không muốn dòng của bạn dài hơn 30 ký tự trừ khi bạn đang tạo ra một số chuỗi lớn, nhưng thậm chí sau đó nó trở nên thực sự không đọc được và tổng (mặc dù cần thiết đặc biệt cho javascript).
Thực hành lập trình tốt để viết chương trình để dễ đọc. Cá nhân tôi cố gắng không viết các hàm có nhiều tham số hơn có thể được hiển thị trên một dòng trên màn hình. Thông thường, không quá năm hoặc sáu thông số.
một số trình biên dịch ARM vượt qua ba hoặc ít tham số bằng cách sử dụng thanh ghi và bất kỳ hơn ba tham số nào được xếp chồng lên nhau. Các cuộc gọi loại xếp chồng lên nhau là chậm hơn so với cuộc gọi bằng cách sử dụng đăng ký vì vậy trong trường hợp này, bạn nên sử dụng ba hoặc ít hơn các thông số, cho tốc độ.
Nếu bạn không biết có bao nhiêu thông số bạn sẽ chuyển đến một hàm sử dụng tham số để gửi đối số biến cho phương thức.
Tùy thuộc vào kiến trúc, hơn 1-3 sẽ gây ra sự cố trên ngăn xếp. Đây là chậm hơn so với đi qua thanh ghi. Từ quan điểm hiệu suất, tốt nhất là chuyển một con trỏ tới một lớp trình bao bọc hoặc một con trỏ tới một cấu trúc. Điều này đảm bảo rằng chỉ có một giá trị được chuyển vào và lưu một số ghi/đọc vào bộ nhớ.
- 1. C++: chức năng chuyển với số tham số tùy ý dưới dạng tham số
- 2. Tham số chức năng GetStringUTFChars
- 3. Cách chuyển vị ngữ làm tham số chức năng
- 4. Chuyển chức năng như một tham số trong java
- 5. Tìm Tham số Chức năng Dll
- 6. C# enums là tham số chức năng?
- 7. Sự khác biệt giữa "sử dụng" và chuyển một tham số đến chức năng điều khiển
- 8. Chuỗi trong tham số chức năng
- 9. Tham số và chức năng ngầm định
- 10. "này" trong tham số chức năng
- 11. mẫu template chức năng tham số
- 12. jqGrid setChọn chức năng với truy vấn được tham số
- 13. Tham số cho chức năng tìm kiếm
- 14. loại tham số chức năng và =>
- 15. Gọi JDBC đến Oracle Chức năng được lưu trữ - IN tham số loại "bảng cấu trúc"
- 16. Chức năng Ruby với số tham số không giới hạn
- 17. C++ chức năng: pass luận const không đến tham số tham chiếu const
- 18. Tham số chức năng ghi nhật ký trong MATLAB
- 19. Chức năng C++ được truyền dưới dạng Đối số mẫu vs Tham số
- 20. đối số chức năng động
- 21. đối số chức năng
- 22. Con trỏ trỏ tới mảng như tham số chức năng
- 23. Chuyển một hàm (có tham số) làm tham số?
- 24. Chức năng gọi lại Javascript với các tham số
- 25. Chức năng gửi C++ với tham số mẫu
- 26. Tham chiếu dưới dạng đối số chức năng?
- 27. C++ * vs [] như một tham số chức năng
- 28. chức năng như tham số vs con trỏ hàm như tham số
- 29. C++ 11 variadic std :: tham số chức năng
- 30. Chức năng mẫu C++ lấy lớp mẫu làm tham số
. Tôi thấy rằng khi tôi cần nhiều thông số tôi có xu hướng cần chúng ở nhiều nơi hoặc tôi cần phải liên tục bổ sung thêm. Đây là lý do tại sao chúng tôi có các công cụ như mẫu EventArgs trong .NET. –
Đó là một điểm tốt – Joel
Joel: tốt điểm trong câu trả lời của bạn, nhưng tôi đã đọc trong một số bài báo rằng nếu số lượng các tham số được nhiều hơn thì 5 sau đó sử dụng cấu trúc. Tôi thích rằng tuyên bố rằng nếu bạn có nhiều hơn thì 5 tham số sau đó xác định struct và sử dụng cấu trúc đó để truyền tham số. –