«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > # Замените общую проверку повторно используемыми функциями

# Замените общую проверку повторно используемыми функциями

Опубликовано 6 ноября 2024 г.
Просматривать:846

# Replace Generic Validation with Reusable Functions

Разработчикам JavaScript и TypeScript часто приходится неоднократно писать одни и те же условия. Если вы веб-разработчик, вы, вероятно, сталкивались с таким кодом:

const handleSaveTextKeydown = (event: KeyboardEvent) => {
   if (event.key === 'Enter') {
    //... save text
   }
}

В этом случае event.key имеет строковый тип, и легко вызвать ошибки, например, случайно включив пробел в Enter.

Почему бы не инкапсулировать это условие в функцию?

const handleSaveTextKeydown = (event: KeyboardEvent) => {
   if (checkIsEnterKey(event.key)) {
    //... save text
   }
}

Это гарантирует, что все проверки клавиши Enter будут согласованными и надежными.

Теперь рассмотрим следующую проверку:

type Value = null | object;

const value = {} as Value;

if (typeof value === 'object') {
  value; // value type is null | object
}

Несмотря на то, что TypeScript умный, значение внутри условия остается типа Value. Это связано с тем, что typeof null возвращает «объект».

Итак, вам нужно написать:

if (value !== null && typeof value === 'object') {
  value; // value type is object
}

Многие разработчики могут не инкапсулировать это в функцию и вместо этого писать ее повторно всякий раз, когда сталкиваются с такой ситуацией.

Сколько раз в жизни вы писали одно и то же условие?

Сколько раз вы совершали одну и ту же ошибку?

Сколько еще раз вы напишете одно и то же условие в будущем?

Если бы это был я, я бы сделал это:

if (checkIsObject(value)) {
  value; // value type is object
}

Инкапсуляция общих условий в функции дает множество преимуществ.

Рассмотрим следующий пример:

const array = [0, 1, 2, 3, 4, 5, null, undefined];

Давайте создадим массив, исключающий только нулевые значения.

Вы можете отдать приоритет краткости и написать это так:

const numbers = array.filter(Boolean);

К сожалению, это не идеально. 0 также оценивается как ложное и исключается. Итак, вам нужно написать:

const numbers = array.filter(item => item !== null && item !== undefined);

Разве это не уродливый код, который нельзя использовать повторно?

Я могу написать более элегантный код:

const numbers = array.filter(checkIsNullish);

Перестаньте постоянно писать общие условия. Это приводит только к ошибкам, и код становится менее читабельным.

Позвольте мне представить созданную мною библиотеку под названием checker.

Эта библиотека служебных функций представляет часто используемые условия в общей веб-разработке и низкоуровневой разработке в виде функций. Все функции принимают входные данные и возвращают логическое значение.

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

Давайте рассмотрим несколько реальных примеров.

Все пакеты, предоставляемые этой библиотекой, опубликованы на JSR. Их можно легко установить в проекты NPM, PNPM, Yarn, Bun и Deno.

Здесь мы возьмем пакет @checker/string в качестве примера с NPM.

  1. Установить пакет

Выполните следующую команду в каталоге вашего проекта:

  npx jsr add @checker/string
  1. Использование функций
  import { checkIsNotEmptyString, checkIsIndexFound } from "@checker/string";

  const value = "Hello";

  const formatted = value.trim();

  if (checkIsNotEmptyString(formatted)) {
    // formatted !== ''
    // When formatted is not an empty string
  }

  const index = value.indexOf("el");

  if (checkIsIndexFound(index)) {
    // index !== -1
    // When "el" is found in value
  }

Мне не нравится использовать операторы логического отрицания, такие как !SOME_CONDITION, для изменения логического значения. Это связано с тем, что это неявно, и простое изменение логического значения путем его добавления или исключения может привести ко многим опасным ситуациям.

Поэтому для всех функций определены соответствующие функции checkIsNot~.

Инкапсулируйте общие условия в функции. Таким образом, код становится более читабельным, а ошибки легче обнаружить.

Спасибо, что читаете.

Заявление о выпуске Эта статья воспроизведена по адресу: https://dev.to/cat394/-replace-generic-validation-with-reusable-functions-3nec?1. Если обнаружено какое-либо нарушение прав, свяжитесь с [email protected], чтобы удалить ее.
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3