0 added
0 removed
Original
2026-01-01
Modified
2026-02-26
1
<p>В некоторых языках, таких как Python или JavaScript, переменные или константы, определенные на уровне модуля, могут быть импортированы в других частях программы. С одной стороны, это открывает больше возможностей по сравнению с языками, где любые данные должны находиться внутри функций, классов и так далее. С другой стороны, становится гораздо легче писать плохо поддерживаемый код.</p>
1
<p>В некоторых языках, таких как Python или JavaScript, переменные или константы, определенные на уровне модуля, могут быть импортированы в других частях программы. С одной стороны, это открывает больше возможностей по сравнению с языками, где любые данные должны находиться внутри функций, классов и так далее. С другой стороны, становится гораздо легче писать плохо поддерживаемый код.</p>
2
<p>Представим, что мы пишем веб-сервис, который умеет конвертировать валюты. В этом конвертере присутствует описание того, какая валюта в какую может конвертироваться, и по какому курсу:</p>
2
<p>Представим, что мы пишем веб-сервис, который умеет конвертировать валюты. В этом конвертере присутствует описание того, какая валюта в какую может конвертироваться, и по какому курсу:</p>
3
<p>Остальные части программы используют эту информацию для своих вычислений и проверок:</p>
3
<p>Остальные части программы используют эту информацию для своих вычислений и проверок:</p>
4
<p>Код получился простой, но ненадежный. Если пользователь выполнит запрос на рейт валют, которых нет в системе, возникнет ошибка доступа к объекту:</p>
4
<p>Код получился простой, но ненадежный. Если пользователь выполнит запрос на рейт валют, которых нет в системе, возникнет ошибка доступа к объекту:</p>
5
<p>Даже если первая валюта есть, то при отсутствии второй в константе rate окажется undefined, что может быть неверным (зависит от приложения).</p>
5
<p>Даже если первая валюта есть, то при отсутствии второй в константе rate окажется undefined, что может быть неверным (зависит от приложения).</p>
6
<p>Перепишем код и избавимся от ошибки:</p>
6
<p>Перепишем код и избавимся от ошибки:</p>
7
<p>Ошибка больше не возникнет, но решение все еще плохое. Работа с rates наверняка не ограничится одним обработчиком. С ростом приложения рейты начнут использоваться повсеместно, а это значит, что и<a>обработку ошибок</a>придется делать в каждом месте. Кроме того, любое изменение структуры данных также потребует переписывания всех мест, где они используются.</p>
7
<p>Ошибка больше не возникнет, но решение все еще плохое. Работа с rates наверняка не ограничится одним обработчиком. С ростом приложения рейты начнут использоваться повсеместно, а это значит, что и<a>обработку ошибок</a>придется делать в каждом месте. Кроме того, любое изменение структуры данных также потребует переписывания всех мест, где они используются.</p>
8
<blockquote><p>Подписывайтесь на<a>канал Кирилла Мокевнина в Telegram</a>- чтобы узнать больше о программировании и профессиональном пути разработчика</p>
8
<blockquote><p>Подписывайтесь на<a>канал Кирилла Мокевнина в Telegram</a>- чтобы узнать больше о программировании и профессиональном пути разработчика</p>
9
</blockquote><p>Указанные проблемы типичны для всех ситуаций, когда работа с данными идет напрямую без создания хотя бы минимальной абстракции (функций) для доступов к данным. Решается все очень просто, нужно лишь добавить функцию в модуль<em>currency.js</em>.</p>
9
</blockquote><p>Указанные проблемы типичны для всех ситуаций, когда работа с данными идет напрямую без создания хотя бы минимальной абстракции (функций) для доступов к данным. Решается все очень просто, нужно лишь добавить функцию в модуль<em>currency.js</em>.</p>
10
10