Вы когда -нибудь получали ошибку, потому что забыли передать аргумент функции? Это общая ситуация.
К сожалению, JavaScript не требует проходных параметров, которые были объявлены в функции, и Это приводит к возможной более поздней ошибке.
Давайте посмотрим пример. Считайте, что у нас есть функция, которая должна получить строку и вернуть, если эта строка содержит DE Letter “G”.
file.js
function includesG(string) {
return string.includes('G')
}
console.log(includesG('Gabriel Rufino')) // true
Это работает нормально! Но есть проблема: что произойдет, если я назову функцию Включает в себя без спора?
file.js
function includesG(string) {
return string.includes('G')
}
console.log(includesG())
Давайте выполнить с помощью узла:
$ node file.js
/home/gabrielrufino/Desktop/file.js:2
return string.includes('G')
^
TypeError: Cannot read property 'includes' of undefined
at includesG (/home/gabrielrufino/Desktop/lab/lab.js:2:17)
at Object. (/home/gabrielrufino/Desktop/lab/lab.js:5:13)
at Module._compile (internal/modules/cjs/loader.js:1063:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)
at Module.load (internal/modules/cjs/loader.js:928:32)
at Function.Module._load (internal/modules/cjs/loader.js:769:14)
at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12)
at internal/main/run_main_module.js:17:47
Кажется довольно жестокой ошибкой 😅
Есть гораздо лучший способ сообщить об отсутствии аргумента разработчику: Мы можем объединить мощность параметров по умолчанию с броском более описательной ошибки.
Давайте сделаем это шаг за шагом. Во -первых, мы определяем функцию, ответственную за то, чтобы бросить ошибку. Я назову это Isrequired Анкет
file.js
function isRequired(argument) {
throw new Error(`The argument ${argument} is required`)
}
function includesG(string) {
return string.includes('G')
}
console.log(includesG())
Функция Isrequired это не что иное, как функция, которая выбрасывает пользовательскую ошибку на основе имени аргумента.
Теперь, когда у нас есть эта функция, Мы можем использовать его в качестве параметра по умолчанию необходимого аргумента или аргументов Анкет
Ждать его…
file.js
function isRequired(argument) {
throw new Error(`The argument ${argument} is required`)
}
function includesG(string = isRequired('string')) {
return string.includes('G')
}
console.log(includesG())
Теперь всегда забываем передать аргумент нить Значение по умолчанию будет принято, а значение по умолчанию – это бросок ошибки.
Давайте запустим код:
$ node file.js
/home/gabrielrufino/Desktop/file.js:2
throw new Error(`The argument ${argument} is required`)
^
Error: The argument string is required
at isRequired (/home/gabrielrufino/Desktop/lab/lab.js:2:9)
at includesG (/home/gabrielrufino/Desktop/lab/lab.js:5:29)
at Object. (/home/gabrielrufino/Desktop/lab/lab.js:9:13)
at Module._compile (internal/modules/cjs/loader.js:1063:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)
at Module.load (internal/modules/cjs/loader.js:928:32)
at Function.Module._load (internal/modules/cjs/loader.js:769:14)
at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12)
at internal/main/run_main_module.js:17:47
И теперь у нас есть более описательная ошибка, говорящая, что мы забыли параметр нить .
“Хорошо, Габриэль! Но разве мы не заменяем одну ошибку на другую? Как это мне помогает? “
Ошибки были созданы, чтобы помочь нам! Они должны сказать нам, что конкретно неверно. Первая ошибка не помогает нам выяснить, в чем проблема, она только говорит, что значение неопределенное нет метода включает . Это так много общего, чтобы найти проблему. Ошибка, которую мы создали, говорит явно, что мы забыли аргумент 😄
Благодарю вас!
Оригинал: “https://dev.to/gabrielrufino/a-creative-way-to-have-required-arguments-in-javascript-1ngk”