0 added
0 removed
Original
2026-01-01
Modified
2026-02-26
1
<p>Нормализация данных - подход, с помощью которого можно не только упростить логику кода, но и сделать сам код короче. Его принцип работы состоит в приведении данных к общему виду перед основным алгоритмом обработки этих данных. Посмотрим, как это работает на простом примере.</p>
1
<p>Нормализация данных - подход, с помощью которого можно не только упростить логику кода, но и сделать сам код короче. Его принцип работы состоит в приведении данных к общему виду перед основным алгоритмом обработки этих данных. Посмотрим, как это работает на простом примере.</p>
2
<p>Представьте себе такую задачу: нужно извлечь из HTML все ссылки и загрузить их содержимое. Для простоты допустим, что HTML уже проанализирован, а ссылки собраны в массив. Кроме самих ссылок понадобится имя домена, на котором был расположен этот HTML. Это нужно для загрузки относительных ссылок, то есть тех ссылок, у которых не указан домен в HTML, например,<em>/about</em>. Ниже пример кода, решающего задачу в лоб:</p>
2
<p>Представьте себе такую задачу: нужно извлечь из HTML все ссылки и загрузить их содержимое. Для простоты допустим, что HTML уже проанализирован, а ссылки собраны в массив. Кроме самих ссылок понадобится имя домена, на котором был расположен этот HTML. Это нужно для загрузки относительных ссылок, то есть тех ссылок, у которых не указан домен в HTML, например,<em>/about</em>. Ниже пример кода, решающего задачу в лоб:</p>
3
<p>Обратите внимание на чёткое разделение двух этапов. У нас есть место, где готовятся данные, а есть место, где выполняется основная логика. В данном случае обе эти части предельно маленькие, но в реальных приложениях они могут содержать десятки строк, множество условных конструкций и циклов. Большую часть кода можно разделить как минимум на эти два этапа.</p>
3
<p>Обратите внимание на чёткое разделение двух этапов. У нас есть место, где готовятся данные, а есть место, где выполняется основная логика. В данном случае обе эти части предельно маленькие, но в реальных приложениях они могут содержать десятки строк, множество условных конструкций и циклов. Большую часть кода можно разделить как минимум на эти два этапа.</p>
4
<blockquote><p>Подписывайтесь на<a>канал Кирилла Мокевнина в Telegram</a>- чтобы узнать больше о программировании и профессиональном пути разработчика</p>
4
<blockquote><p>Подписывайтесь на<a>канал Кирилла Мокевнина в Telegram</a>- чтобы узнать больше о программировании и профессиональном пути разработчика</p>
5
</blockquote><p>Самое примечательное в этом коде - условие, проверяющее относительность ссылки. Посмотрите внимательно на код, который внутри. Он не выполняет какую-то другую особую логику. Всё, что он делает - приводит данные к нужному для обработки виду. Именно здесь и подходит нормализация данных. Вместо того, чтобы строить ссылку по условию, код можно изменить так, чтобы ссылки были полными ещё до попадания в эту часть программы.</p>
5
</blockquote><p>Самое примечательное в этом коде - условие, проверяющее относительность ссылки. Посмотрите внимательно на код, который внутри. Он не выполняет какую-то другую особую логику. Всё, что он делает - приводит данные к нужному для обработки виду. Именно здесь и подходит нормализация данных. Вместо того, чтобы строить ссылку по условию, код можно изменить так, чтобы ссылки были полными ещё до попадания в эту часть программы.</p>
6
<p>В чём хитрость этого решения? Встроенный модуль<em>url</em>в JavaScript содержит специальную функцию-конструктор<em>URL</em>, с помощью которой создается объект, описывающий конкретный url. Внутри этого объекта есть информация о всех частях адреса. Так их удобнее извлекать и даже менять. У этой функции есть второй параметр - базовый адрес, хост, который будет использоваться в том случае, когда ссылка относительная:</p>
6
<p>В чём хитрость этого решения? Встроенный модуль<em>url</em>в JavaScript содержит специальную функцию-конструктор<em>URL</em>, с помощью которой создается объект, описывающий конкретный url. Внутри этого объекта есть информация о всех частях адреса. Так их удобнее извлекать и даже менять. У этой функции есть второй параметр - базовый адрес, хост, который будет использоваться в том случае, когда ссылка относительная:</p>
7
<p>Использование готовых инструментов - идеальное решение задачи. Даже если бы у нас не было такого модуля, как<em>url</em>, все равно имело бы смысл делать предварительную нормализацию данных. Как правило, в живых проектах обработка - это больше чем одна условная конструкция. Одни и те же данные могут использоваться много раз и по-разному. Такой код очень легко обрастает условиями и дублированием.</p>
7
<p>Использование готовых инструментов - идеальное решение задачи. Даже если бы у нас не было такого модуля, как<em>url</em>, все равно имело бы смысл делать предварительную нормализацию данных. Как правило, в живых проектах обработка - это больше чем одна условная конструкция. Одни и те же данные могут использоваться много раз и по-разному. Такой код очень легко обрастает условиями и дублированием.</p>
8
<p>Кстати, в примере выше мы получили дополнительное преимущество - убрали прямое<a>использование строк</a>.</p>
8
<p>Кстати, в примере выше мы получили дополнительное преимущество - убрали прямое<a>использование строк</a>.</p>