Рубрики
Без рубрики

Творческий способ потребовать аргументов в JavaScript

Вы когда -нибудь получали ошибку, потому что забыли передать аргумент функции? Это ком … Tagged с помощью JavaScript, Node, Security, TypeScript.

Вы когда -нибудь получали ошибку, потому что забыли передать аргумент функции? Это общая ситуация.

К сожалению, 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”