2010-04-01 2 views

ответ

5

Чем меньше, тем лучше, но только если это имеет смысл. Я никогда не слышал о стандартном числе параметров, которые нужно передать, но я слышал о том, как лучше их поддерживать.

Например, не делать этого:

public void DoSomething(string name, int age, int weight, ...) { } 

, а скорее:

public void DoSomething(Person person) { } 

, но мы надеемся, что само собой разумеется. Но также, я бы порекомендовал не создавать странный класс, чтобы обрезать счетчик параметров.

+0

Я бы это сделал. Я нахожу, что, когда мне нужно, чтобы многие параметры мне нравились в разных местах, мне нужно постоянно добавлять больше. Вот почему у нас есть такие вещи, как шаблон EventArgs в .NET. –

+0

Это хорошая точка – Joel

+0

Joel: хорошая точка в вашем ответе, но я уже прочитал в какой-то статье, что если число параметров больше 5, то используйте структуру. Мне нравится это утверждение, что если у вас есть более 5 параметров, то определите struct и используйте эту структуру для передачи параметров. –

7

Code Complete предполагает максимум 7. Это происходит из-за The Magical Number Seven, Plus or Minus Two:

... число объектов, средний человек может держать в рабочей памяти 7 ± 2; это часто называют Законом Миллера.

Вот выдержка из кода Complete 2nd Edition:

Предельное число параметров рутину, чтобы примерно семь

Семь это магическое число для понимания людей. Психологические исследования показали, что люди обычно не могут отслеживать более семи кусков информации сразу (Miller 1956). Это открытие было применено к огромному числу дисциплин, и кажется безопасным предположить, что большинство людей не могут отслеживать более семи стандартных параметров одновременно.

+4

Если число равно 7 ± 2, не следует ли брать нижний предел и сказать максимум 5? –

+0

@Jonathan Посмотреть мои правки. Это на самом деле 7. –

+1

Это так. Я был когда-то в классе, когда в ВВС, где инструктор поставил эту последовательность на доске, попросил нас запомнить ее, а затем повторить ее: C130KC10C140L1011C5. Не все в ВВС на самом деле видят самолеты, но мне приходилось писать программу, касающуюся грузовых самолетов, поэтому я увидел нечто гораздо более запоминающееся: C130, KC10, C140, L1011, C5 –

3

IMHO 5 at MAX.

6 слишком много для меня и 7 подавляющее количество!

+0

Итак, вы подчиняетесь закону Миллерса, как утверждает Антон :) – Default

+0

Yup Dude! Часть закона Миллера, которую мне не нравится, это «7 + 2», ее слишком большое число ...! –

1

Если у вас есть много вещей, которые вы хотели бы перейти к функции, вы можете захотеть взглянуть на другие способы передачи этих данных в отличие от простой передачи параметров. Например, в некоторых случаях может быть лучше создать XML-файл, а затем передать значения, связанные с получением данных вокруг этого XML-файла. Если вы используете веб-приложение, это может просто передавать данные через сеансы или отправлять сообщения, а не получать или выполнять вызовы, которые упростят вашу жизнь.

Также вы можете захотеть сохранить часть этой информации в качестве переменных-членов.

Я бы порекомендовал не более 4. Вы не хотите, чтобы ваши линии длились длиннее 30 символов, если вы не генерируете какую-то массивную строку, но даже тогда она становится действительно нечитаемой и грубой (хотя она необходима, особенно для javascript).

1

Это хорошая практика программирования для написания программ, чтобы их было легко читать. Лично я стараюсь не писать функции, которые имеют больше параметров, чем могут отображаться в одной строке на экране. Обычно это не более пяти или шести параметров.

0

Некоторые компиляторы ARM передают три или менее параметров с использованием регистров и не более трех сгруппированы. Сложный тип вызова медленнее, чем вызов с использованием регистров, поэтому в этом случае вы должны использовать три или менее параметра для скорости.

1

Согласно чистому кодексу - максимум 3

+3

Удачи, создав конструктор 'Прямоугольник'. – kennytm

+0

Вы можете создать класс, а затем передать и объект для функции – ilkin

0

Если вы не знаете, сколько параметров вы собираетесь перейти к функции использование параметрам для отправки переменных аргументов метода.

0

В зависимости от архитектуры более чем 1-3 приведет к передаче в стек. Это медленнее, чем передача через регистры. С точки зрения производительности лучше всего передать либо указатель на класс-оболочку, либо указатель на структуру. Это гарантирует, что передается только одно значение и сохраняет некоторые записи/чтения в память.

Смежные вопросы