Наличие функций, принимающих параметры, позволяет вам выполнять одну и ту же функцию с разными данными.
Представьте, что вы хотите использовать эту функцию не только для выполнения кода для одного имени пользователя, но и для трех имен пользователей подряд. Как будет выглядеть код, вызывающий функцию?
С параметрами он будет выглядеть так:
sampleFunction("User One")
sampleFunction("User Two")
sampleFunction("User Three")
Но когда функция использует глобальную переменную в качестве входных данных, тогда код будет выглядеть так: намного более неудобно:
username = "User One"
sampleFunction()
username = "User Two"
sampleFunction()
username = "User Three"
sampleFunction()
Этот код не только уродливее, но и сложнее для понимания.
Подумайте о своих товарищах по команде, которые хотели бы использовать вашу функцию из своих код (помните, программное обеспечение обычно разрабатывается в группах). Как они узнают, что перед вызовом этой функции им необходимо установить для глобальной переменной username
какое-то значимое значение? Да, они могут найти это в вашей документации (если вы ее написали) или спросить вас (есть ли у вас на это время). Но с параметрами функции среда разработки обычно говорит им: «Эй, эта функция хочет String username
в качестве входных данных, а вы не дали ей его». (однако может зависеть от языка. Например, в JavaScript все параметры функции являются необязательными, поэтому забывание параметров является синтаксически правильным, даже если это может привести к неожиданному поведению во время выполнения)
А как насчет человека, читающего этот код и пытающегося понять, как он работает? Им придется предположить, что установка username
на какое-то значение каким-то образом связано с вызовом sampleFunction
позже. В этом конкретном примере это все еще очевидно. Но в реальной программе эти два шага могут происходить на расстоянии нескольких строк или даже в разных файлах исходного кода. Таким образом, зависимость sampleFunction
от глобальной переменной username
не сразу очевидна.
По этим причинам обычно рекомендуется передавать любую информацию, которая нужна функции, в качестве параметров вместо того, чтобы хранить ее в глобальном переменные, которые затем считываются функцией.