Число параметров, переданных функции?

Я хочу знать, сколько параметров может быть передано функции, я имею в виду, что такое хорошая практика программирования, касающаяся передачи параметров для работы?

Ответ 1

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

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

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

а скорее:

public void DoSomething(Person person) { }

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

Ответ 2

Code Complete предлагает максимум 7. Это происходит из-за Волшебное число семь, плюс или минус два:

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

Здесь выдержка из кода Complete 2nd Edition:

Ограничьте количество параметров подпрограмм примерно до семи

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

Ответ 3

ИМХО 5 в MAX.

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

Ответ 4

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

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

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

Ответ 5

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

Ответ 6

Согласно Чистому Коду - максимум 3

Ответ 7

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

Ответ 8

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

Ответ 9

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