Необязательные параметры в функции очень распространены. Вы можете определить и организовать свои функции и параметры по своему усмотрению. Но уверены ли вы, что ваши функции и параметры просты для понимания и просты в использовании? Если вы не уверены, вы должны прочитать этот пост.
В этом посте я дам вам предложения и подход к тому, как определить ваш необязательный параметр в javascript.
Дополнительный параметр
В Javascript значение параметра функции по умолчанию — undefined
. Итак, если вы определяете параметр, но не указываете его в вызове функции, значение будет undefined
.
function greeting(name) { console.log(`hello ${name}`) } greeting() // 'hello undefined'
Давайте сделаем параметр необязательным параметром (или параметром по умолчанию), добавив значение по умолчанию для параметра.
function greeting(name = 'guest') { console.log(`hello ${name}`) } greeting() // 'hello guest'
Как видите, когда мы добавляем значение по умолчанию к параметру, он становится необязательным параметром, что означает, что вам не нужно указывать значение при вызове функции. Легко, верно? Подождите, давайте посмотрим на функцию, которая имеет много параметров.
Проблема необязательного параметра
function makeSmoothie ( type, sugarLevel = 1, topping = 'pudding', size = 'small' ) { // code to make a smoothie }
Теперь у нас есть пример функции makeSmoothie
, которая имеет 1 обязательный параметр и 3 необязательных параметра (sugarLevel
, topping
, size
). Если вы написали подобный код, вам лучше продолжать читать этот пост.
Далее, если я хочу приготовить коктейль из манго, я могу вызвать функцию следующим образом:
makeSmoothie('mango')
Если я хочу сделать смузи из манго слаще первого, я меняю sugarLevel
на 2:
makeSmoothie('mango', 2)
Хорошо, нет никаких проблем. Однако, что, если я хочу сделать смузи, но не люблю пудинг в качестве начинки, поэтому я решаю сделать смузи с начинкой из красной фасоли:
makeSmoothie('mango', 1, 'red bean')
Как видите, на самом деле я хочу изменить только топпинг, но на самом деле я должен предоставить значение sugarLevel
при вызове функции.
Хуже того, когда я хочу изменить только размер смузи, я должен указать значение всех необязательных параметров перед параметром size
.
makeSmoothie('mango', 1, 'pudding', 'medium')
Это действительно необязательные параметры? Почему я все еще должен указывать значение для sugarLevel
и topping
?
Это всего лишь пример, чтобы показать вам проблему, с которой вы можете столкнуться, если будете писать код, аналогичный этому примеру. Давайте решим проблему.
Подход к определению необязательных параметров
Чтобы решить проблему, мы можем следовать этим правилам:
- Если функция имеет только 1 необязательный параметр, поместите его самым последним после всех обязательных параметров.
function makeSmoothie (type, sugarLevel = 1){ // code to make a smoothie }
- Если функция имеет более 1 необязательных параметров, используйте Object and Object Destructuring.
function makeSmoothie ( type, { sugarLevel = 1, topping = 'pudding', size = 'small' } = {} ) { // code to make a smoothie }
Теперь у нас есть два параметра, назовем тип и вариант. Мы можем вызвать функцию более эффективным способом:
makeSmoothie('mango') makeSmoothie('mango', { sugarLevel: 2 }) makeSmoothie('mango', { topping: 'red bean'}) makeSmoothie('mango', { size: 'medium'})
Именно такой подход я предпочитаю использовать. Если у вас есть другое решение, поделитесь своим в разделе комментариев.