Не принимая во внимание конкретный язык программирования, какая разница между параметрами и аргументами с точки зрения функций?
Также учтите, что согласно тому, что я понял из книги "чистый код", рекомендуется, чтобы чем меньше аргументов (по возможности ни одного) передавалось в функцию, тем эффективнее она становилась, почему?
Если вы можете добавить пример обоих намного лучше :)
Параметр является внутренним свойством процедуры, поскольку он включен в ее определение. Например, процедура, вычисляющая сумму двух целых чисел, потребует двух параметров, по одному для каждого числа. В общем, процедура может быть определена с любым количеством параметров (или вообще без них). Если у процедуры есть параметры, часть ее определения, в которой они указаны, называется списком параметров.
При этом аргументы — это скорее фактические значения, присваиваемые переменным параметрам при вызове функции.
При вызове функции передаваемые «значения» называются аргументами.
На практике обычно нет четкого различия между этими двумя терминами.
Я оставляю вам официальную документацию MSDN .
В дополнение к тому, что говорит в своем ответе наш коллега sakulino , я также хочу внести кое-что, так как основное различие между параметром и аргументом такое же, как «идентификатор и значение» в двух словах.
Но мое дополнение к тому, что вы спрашиваете, заключается в следующем:
Небольшое редактирование: эффективность функции зависит от того, как она была создана и выполняет ли она свое назначение.
То есть, поскольку в большинстве операционных систем весь скомпилированный код выполняет какое-либо действие, сам код не интерпретируется компьютером (иначе они были бы людьми!) , а единственное, что понимает компьютер, — это сочетание
0
и1
всей программы.Бывает, что при вызове функции на битовом уровне аргументы не передаются, а все эти байты загружаются в регистры, представьте себе следующий пример:
Компьютер не знает, что он получает, поэтому он просто интерпретирует аргументы функции в обратном порядке (в некоторых системах) :
Это не настоящий ассемблер
А в теле функции сделать соответствующие ходы, чтобы не использовать адреса памяти.
Причина, по которой функция без параметров может быть более эффективной, чем функция с параметрами, заключается в том, что компьютер интерпретирует только один вызов, то есть чем больше параметров, тем больше значений регистров, поэтому немного медленнее (или, по крайней мере, это что я понимаю)
В функции без аргументов вы просто делаете:
И готов.
Идея использования нескольких параметров направлена именно на это: чистый, читаемый код, простой для понимания, написания, чтения и обслуживания. Если вы найдете функцию, например, с 16 параметрами, ее будет непросто прочитать.
Например, предположим, что у вас есть функция для регистрации нового клиента, и вы используете ее следующим образом:
Как видите, это очень длинная инструкция, ее нужно пройти полностью, чтобы ознакомиться с содержанием, а при написании легко потерять порядок параметров (лично у меня так было) и сделать ошибки, а если они однотипные, то не покажет никакой ошибки (например, что вы меняете фамилию на имя) и обнаружить проблему будет сложнее. При отладке также сложно следить за порядком параметров. И это не считая, если в свою очередь функция
IngresarNuevoCliente
относится к бизнес-логике и в свою очередь вызывает другую функцию для хранения этой информации, которая также будет иметь N кол-во параметров.Совсем другое дело, например, использовать класс
Cliente
, создать объектcliente
и присваивать ему значения по мере получения информации:А затем создайте нового клиента следующим образом:
Его запись и чтение понятнее, во время отладки можно проанализировать объект и там информация будет доступна в более читабельном виде.
Что, если позже вам понадобится собрать больше информации о клиентах? Вы просто изменяете класс, и теперь вы можете собирать эту информацию без изменения вашей функции, что добавит больше параметров к функции и сделает ее более сложной и подверженной ошибкам, а также все функции, которые она вызывает.
Идея полного ухода от параметров мне кажется немного надуманной, в общем- то это хорошие практики, а не законы, высеченные на камне , и по мере приобретения опыта написания кода вы будете знать, какие из них учитывать и почему.