Функции — одна из замечательных вещей для создания чистого и читаемого кода, но когда дело доходит до манипулирования данными, разработчик или программист должен хорошо знать поведение используемого языка программирования.

В этом отношении при работе с данными есть две вещи, о которых мы должны знать: область действия переменных (время жизни переменных в программе) и передача по значению по сравнению с передачей по ссылке/адресу. Взяв, к примеру, язык программирования C, когда мы объявляем переменную, ее область действия определяется в программе в зависимости от того, где мы ее объявили.

1. Передача по значению

Итак, давайте возьмем следующий пример:

Запустив программу выше, мы получим вывод:

  • Начальное значение a: 42
  • Значение внутренней функции passByValue: 126
  • Значение a: 42

Начальное значение a равно 42, так как это число, которое мы присвоили переменной в основной функции, затем мы вызываем функцию passByValue и получаем оператор печати, показывающий значение a внутри функции, равной 126, а затем мы печатаем a после вызов функции, но значение по-прежнему 42!

Это называется передачей по значению, поскольку мы берем значение или, как мы можем сказать, копию переменной и изменяем ее внутри локальной области видимости (образовательной, n.d), которая в нашем случае является функцией passByValue; где значение a было умножено на 3, но только внутри функции, а не в глобальной области.

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

2. Передача по ссылке

Теперь давайте взглянем на ту же программу с небольшими изменениями:

Запустив программу выше, мы получим вывод:

  • Начальное значение a: 42
  • Значение внутренней функции passByReference: 126
  • Значение a: 126

Мы можем заметить, что начальное значение a равно 42, так как это число, которое мы присвоили переменной в основной функции, затем мы вызываем функцию passByReference и получаем оператор печати показывая значение a внутри функции, которое равно 126, а затем мы печатаем a после вызова функции и значение изменилось с 42 на 126!

Это называется передачей по ссылке или передачей по адресу, поскольку мы глобально изменяем значение переменной. Другими словами, мы идем по адресу (области памяти), где хранится переменная, и меняем ее значение. Следовательно, значение переменной меняется во всей программе или, как мы можем сказать, в глобальной области видимости (познавательной, н.д.)

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

Ссылки:

- воспитательный. (н.д). Передача по значению против передачи по ссылке. Получено с https://www.educative.io/edpresso/pass-by-value-vs-pass-by-reference