Необязательные параметры в функции очень распространены. Вы можете определить и организовать свои функции и параметры по своему усмотрению. Но уверены ли вы, что ваши функции и параметры просты для понимания и просты в использовании? Если вы не уверены, вы должны прочитать этот пост.

В этом посте я дам вам предложения и подход к тому, как определить ваш необязательный параметр в 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'})

Именно такой подход я предпочитаю использовать. Если у вас есть другое решение, поделитесь своим в разделе комментариев.