2010-04-01 40 views

Trả lời

5

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ố.

+0

. 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. –

+0

Đó là một điểm tốt – Joel

+0

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ố. –

7

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.

+4

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? –

+0

@Jonathan Xem chỉnh sửa của tôi. Nó thực sự là 7. –

+1

Đ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 –

3

IMHO 5 ở MAX.

6 quá nhiều đối với tôi và 7 áp đảo!

+0

Vì vậy, bạn tuân thủ luật Millers sau đó, như Anton gợi ý :) – Default

+0

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ó ...! –

1

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).

1

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ố.

0

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 độ.

1

Theo Bộ luật sạch - tối đa 3

+3

Chúc may mắn khi tạo một hàm tạo 'Hình chữ nhật'. – kennytm

+0

Bạn có thể tạo một lớp và sau đó vượt qua và đối tượng để hoạt động – ilkin

0

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.

0

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ớ.

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