файл не валиден что это значит

Валидность сайта и её проверка

Страницы всех сайтов в интернете оформляются специальным кодом, прописанным по стандартизированным правилам HTML.

файл не валиден что это значит. Смотреть фото файл не валиден что это значит. Смотреть картинку файл не валиден что это значит. Картинка про файл не валиден что это значит. Фото файл не валиден что это значит

Что такое валидность?

Валидация — это проверка на соблюдение установленных норм, а в контексте, применяемом вебмастерами — корректности кода страниц: синтаксических ошибок, вложенности тэгов и т. п. Если все делать «правильно», код страницы не должен содержать неверные атрибуты, конструкции и ошибки. Валидация сайта позволяет выявить недостатки, которые следует исправить.

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

Что такое валидаторы кода

Валидатор кода — это программа, используя которую можно проверить HTML-код страниц и CSS-код на соответствие современным нормам. Она находит и фиксирует некорректные элементы, указывая на их местонахождение и формулируя, что именно оформлено неверно.

Основные «приметы» валидной верстки

Валидная вёрстка содержит код, полностью соответствующий требованиям W3C (World Wide Web Consortium), занимающейся разработкой технологических стандартов для всего Интернета.

Если код на страницах сайта верный, то во всех браузерах сайт отображается корректно (а не криво).

Отсутствуют подозрения о несправедливом «понижении» в выдаче и нет страниц, выкинутых из индекса.

Пример. Если, предположим, неправильно стоят теги

, (в частности, отсутствует закрывающий элемент), то поисковик не будет ничего исправлять — он будет интерпретировать так, как написано черным по белому в коде. В итоге могут возникнуть последствия, связанные уже с продвижением сайта.

Важна ли валидная верстка в продвижении сайта

В теории да, но на практике оказывается, что в топе висит множество сайтов с ошибками валидации, да и сайты с ошибками двигаются в общем неплохо. Проблемы с продвижением могут быть только если ваш сайт некорректно отображается на каком-то типе устройств или в каком-то браузере. Если же он выглядит отлично, но ошибки в валидации есть — на продвижение это не окажет никакого влияния.

файл не валиден что это значит. Смотреть фото файл не валиден что это значит. Смотреть картинку файл не валиден что это значит. Картинка про файл не валиден что это значит. Фото файл не валиден что это значит

Некоторые вебмастера целенаправленно исследовали этот вопрос, пытаясь выяснить, зависят ли результаты ранжирования от результатов валидации. Вебмастер Марк Даост отметил, что валидность кода не принципиальна. А Шаун Андерсон, напротив, пришел к выводу, что валидность как бальзам на душу сайту в плане позиций выдачи.

Еще один специалист, Майк Дэвидсон, также провел подобный эксперимент и пришел к выводу, что Google классифицирует страницы по качеству их написания. Например, незакрытый тег может привести к восприятию части контента как значение этого тега.

Этот вебмастер сделал очень важный вывод:

Зачем нужен валидный код

Валидный код позволяет правильно отображать страницы в браузерах (и стили для сайта CSS могут быть отображены неверно).

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

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

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

Как проверить сайт на валидность

файл не валиден что это значит. Смотреть фото файл не валиден что это значит. Смотреть картинку файл не валиден что это значит. Картинка про файл не валиден что это значит. Фото файл не валиден что это значит

Здесь перед Вами три варианта валидации:

Сервис указывает не только на ошибки html кода и их расположение, но и даёт советы по исправлению. Если код уже имеется в Сети, то можно произвести валидацию путём введения её URL-адреса в форму «Validate by URL» и нажатия кнопки Check. Валидатор HTML включит считывание кода и сообщит об итогах.

файл не валиден что это значит. Смотреть фото файл не валиден что это значит. Смотреть картинку файл не валиден что это значит. Картинка про файл не валиден что это значит. Фото файл не валиден что это значит

В этом видео наглядно объяснён процесс проверки с помощью валидатора:

Проверка локальных файлов

По этому же адресу http://validator.w3.org можно проверить код, выбрав вкладку «Validate by File Upload» и загрузив документ с прописанным код.

файл не валиден что это значит. Смотреть фото файл не валиден что это значит. Смотреть картинку файл не валиден что это значит. Картинка про файл не валиден что это значит. Фото файл не валиден что это значит

Выбираем путь к необходимому файлу и жмём Check. Далее всё происходит аналогично.

Использование формы для ввода кода

Иногда удобней вставить сразу код страницы и проверить его онлайн: выбираем вкладку «Validate by Direct Input» и отправляем весь код на сервер.

Проверка валидности кода CSS может быть пройдена также онлайн валидатором: https://jigsaw.w3.org/css-validator/

файл не валиден что это значит. Смотреть фото файл не валиден что это значит. Смотреть картинку файл не валиден что это значит. Картинка про файл не валиден что это значит. Фото файл не валиден что это значит

Здесь все на русском языке, для многих это действительно приятный сюрприз.

Снова можно выбрать — указать URL, загрузить свой файл или вставить код.

Осуществляется проверка сайта на ошибки, как и в случае с HTML, и — получаем ответ от сервера. Настроек проверки не имеется, однако можно изучить предлагаемый сгенерированный валидный код, расположенный после списка недостатков кода.

файл не валиден что это значит. Смотреть фото файл не валиден что это значит. Смотреть картинку файл не валиден что это значит. Картинка про файл не валиден что это значит. Фото файл не валиден что это значит

Изучаем полученный код и приводим исходный к нужному виду.

Расширения для браузеров

Для браузеров существуют всевозможные расширения для проверки валидации. Для Google Chrome есть проверяющий валидность кода плагин HTML Tidy Browser Extension, для Opera — расширение Validator, для Safari — Zappatic, для Firefor — HTML Validator.

Остановимся на последнем более детально. Он осуществляет ту же проверку, что и validator, только оффлайн. Взять его можно здесь http://users.skynet.be/mgueury/mozilla/

Подробное видео об установке HTML Validator и его использовании:

При загрузке любого URL расширение автоматически включается и считывает код. Результат виден в правом верхнем углу.

Выглядит результат как небольшая картинка с итогом валидации:

файл не валиден что это значит. Смотреть фото файл не валиден что это значит. Смотреть картинку файл не валиден что это значит. Картинка про файл не валиден что это значит. Фото файл не валиден что это значит

Щёлкнув по результату, можно открыть:
— исходный код;
— ошибки — в левом нижнем блоке (или сообщение о валидности);
— подсказки по исправлению ошибок — в правом нижнем.

файл не валиден что это значит. Смотреть фото файл не валиден что это значит. Смотреть картинку файл не валиден что это значит. Картинка про файл не валиден что это значит. Фото файл не валиден что это значит

Как исправить наиболее частые ошибки

Каким бы способом ни была проведена проверка кода, ошибки выходят списком. Также обязательно указана строка с недочётом.

В расширении для Firefox при нажатии на название ошибки в открытом окошке расширения вас автоматически перебрасывает на строку с невалидным кодом.

файл не валиден что это значит. Смотреть фото файл не валиден что это значит. Смотреть картинку файл не валиден что это значит. Картинка про файл не валиден что это значит. Фото файл не валиден что это значит

К этим же ошибкам указаны подсказки по их исправлению.
Приведу пару примеров.

1. No space between attributes.
…rel=»shortcut icon» href=»http://arbero.ru/favicon.ico» type=»image/x-icon»

Здесь исправления убираем «точку с запятой».

2. End tag for element «div» which is not open

Закрывающий тег div лишний. Убираем его.

Хотя, если честно, я бы не тратил много усилий на ошибки в коде. Лучше просто позаботьтесь о том, чтобы сайт корректно выглядел на всех устройствах и браузерах.

Источник

Эссе о валидации данных

Зачем нужна валидация данных?

Казалось бы, «невалидные» данные, не удовлетворяющие определённым ограничениям, могут вызвать сбой в работе программы. Но что это означает? Предположим, в каком-то месте программы возникает исключение при попытке преобразовать строку в число, если строка имеет некорректный формат. Разумеется, если исключение не будет нигде перехвачено, это может привести к аварийному завершению программы. Но это маловероятный сценарий развития событий. Скорее всего в каком-то месте сработает перехватчик, который либо выдаст пользователю какое-то сообщение об ошибке в программе, либо сделает запись в журнал ошибок, после чего программа постарается восстановиться от сбоя и продолжить работу. То есть даже если валидацию не выполнять, вполне вероятно, что ничего страшного не случится.

Где и когда выполнять валидацию данных?

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

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

Как выполнять валидацию данных?

Какой способ валидации следует применять на практике в том или ином случае? Чаще всего одним способом ограничиться не удаётся, да и не нужно. Валидацию данных можно и нужно выполнять в несколько этапов, усложняя проверки.

Сначала, по мере ввода, следим за тем, чтобы данные не содержали недопустимых символов. Например, для числового поля пользователю может быть запрещён ввод нецифровых символов.

После того, как ввод завершён, можно проверить всё значение целиком. Для введённого числа могут быть какие-то ограничения, например, оно не должно превышать определённого максимального допустимого значения. Если наше числовое поле представляет собой возраст, оно должно находиться в пределах от 0 до, скажем, 120.

Когда заполнены все поля, можно проверить, согласованы ли введённые значения друг с другом. Например, если в форме кроме поля для указания возраста есть поле для ввода номера паспорта, приложение может проверить, что при заполнении номера паспорта возраст должен быть не менее 14 лет.

Наконец, если всё введено корректно, можно попытаться начать обработку, выполняя проверки по ходу дела, а также в самом конце, и если что-то пошло не так, выполнить откат к исходному состоянию.

Ну и, конечно же, проверки на следующем уровне могут подстраховывать проверки предыдущих уровней. Скажем, для веб-приложений обязательной является проверка данных, пришедших на сервер в HTTP-запросе, независимо от того, выполнялась ли перед этим предварительная валидация в браузере или нет. Причина этого в том, что проверку на клиентской стороне можно обойти. Для других видов приложений обойти проверки не так просто, но иногда тоже вполне возможно, как показано в примере чуть ниже.

Тестирование валидаторов

Завершим статью демонстрацией различных видов валидаторов, а также некоторыми рекомендациями относительно того, как при тестировании проверять правильность их работы.

Начнём с посимвольной проверки. Графический редактор Paint, диалог изменения размеров рисунка, ширина рисунка. В это поле допускается вводить только цифры, при попытке ввести другие символы выдаётся сообщение об ошибке:

файл не валиден что это значит. Смотреть фото файл не валиден что это значит. Смотреть картинку файл не валиден что это значит. Картинка про файл не валиден что это значит. Фото файл не валиден что это значит

Однако, проявив смекалку, можно обойти эту валидацию вводимых символов: через буфер обмена удаётся вставить в это поле отрицательное число, несмотря на то, что минус является недопустимым символом:

файл не валиден что это значит. Смотреть фото файл не валиден что это значит. Смотреть картинку файл не валиден что это значит. Картинка про файл не валиден что это значит. Фото файл не валиден что это значит

Впрочем, это не приводит к негативным последствиям, потому что на следующем уровне стоит ещё одна проверка, которая срабатывает при нажатии кнопки OK:

файл не валиден что это значит. Смотреть фото файл не валиден что это значит. Смотреть картинку файл не валиден что это значит. Картинка про файл не валиден что это значит. Фото файл не валиден что это значит

Есть и другие ограничения для этого поля, которые тоже проверяются после нажатия кнопки OK:

файл не валиден что это значит. Смотреть фото файл не валиден что это значит. Смотреть картинку файл не валиден что это значит. Картинка про файл не валиден что это значит. Фото файл не валиден что это значит

А вот находящееся совсем рядом в том же диалоге поле для ввода наклона рисунка не содержит валидации символов, несмотря на то, что это тоже числовое поле. Более того, при вводе недопустимых символов после нажатия OK можно увидеть вот такое странное сообщение, практически не поддающееся расшифровке:

файл не валиден что это значит. Смотреть фото файл не валиден что это значит. Смотреть картинку файл не валиден что это значит. Картинка про файл не валиден что это значит. Фото файл не валиден что это значит

Все вышеописанные примеры связаны с проверкой отдельно взятого поля. Пример валидации комбинации полей можно найти в том же приложении, но в другом месте — в диалоге настройки параметров страницы для печати. Если указать размеры полей страницы так, чтобы в сумме они превосходили ширину страницы, получим вот такое сообщение:

файл не валиден что это значит. Смотреть фото файл не валиден что это значит. Смотреть картинку файл не валиден что это значит. Картинка про файл не валиден что это значит. Фото файл не валиден что это значит

Ну и, наконец, в заметке «Почему не хватает памяти, чтобы уменьшить размеры рисунка?» описана ошибка, связанная с тем, что в этом графическом редакторе отсутствует корректная обработка сбоев и откат транзакции при слишком сильном увеличении размера рисунка.

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

Заключение

Большая часть этой статьи посвящена не способам тестирования валидаторов, а описанию их устройства. Почему? Потому что врага надо знать в лицо. Чтобы найти дефект валидации данных, надо понимать, где искать и на что обращать внимание.

Источник

Как проверить валидность HTML-разметки

файл не валиден что это значит. Смотреть фото файл не валиден что это значит. Смотреть картинку файл не валиден что это значит. Картинка про файл не валиден что это значит. Фото файл не валиден что это значит

Если вы хотите узнать, что такое валидный код, то вы попали на нужную страницу. Разберёмся, что значит сам термин, как работает валидатор и почему это важно.

Что это и зачем

Валидный HTML-код, валидная разметка — это HTML-код, который написан в соответствии с определёнными стандартами. Их разработал Консорциум Всемирной Паутины — World Wide Web Consortium (W3C). Что именно это значит?

Писать код — это примерно как писать какой угодно текст, например, на русском языке. Можно написать понятно, вдобавок грамотно, а также разбить текст на абзацы, добавить подзаголовки и списки. Так и с валидностью кода. Если вы создаёте разметку, которая решает ваши задачи корректно, то для того, чтобы ваша работа была валидной, в ней стоит навести порядок.

Понятный код — меньше хлопот

Для чего это нужно? Иногда нам кажется, что другие думают как мы. Что не надо стараться объяснять. Но вот нет. Чтобы другие поняли вас быстрее, надо учитывать правила передачи информации. Под другими можно иметь в виду коллегу по команде, а также браузер или компилятор — любое ПО, которое будет работать с вашей разметкой.

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

файл не валиден что это значит. Смотреть фото файл не валиден что это значит. Смотреть картинку файл не валиден что это значит. Картинка про файл не валиден что это значит. Фото файл не валиден что это значит

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

Валидатор — это.

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

Как пользоваться валидатором

Рассказываем на примере «родного» валидатора W3C. Этот валидатор используется потому, что его сделали авторы правил, которым должен соответствовать код. Вы можете пройти по ссылке и провести валидацию кода на своём любимом сайте. Будет интересно.

файл не валиден что это значит. Смотреть фото файл не валиден что это значит. Смотреть картинку файл не валиден что это значит. Картинка про файл не валиден что это значит. Фото файл не валиден что это значит

За вами выбор способа проверки. Можно проверять код по ссылке, можно загрузить в сервис HTML-файл, а можно фрагмент кода. В третьем варианте как раз и идёт речь о написанном в окне сервиса коде или скопированной части из разметки всей страницы.

Цепочка действий в два шага. Первый — предоставить исходный код, а второй — нажать на кнопку проверки.

Вы можете пойти дальше и задать дополнительные параметры валидации. Они нужны, чтобы структурировать и детализировать результаты.

файл не валиден что это значит. Смотреть фото файл не валиден что это значит. Смотреть картинку файл не валиден что это значит. Картинка про файл не валиден что это значит. Фото файл не валиден что это значит

Интерпретация результатов валидации

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

Часто в результате сервисы валидации разметки, как и компиляторы в разработке, выдают список, разделённый на предупреждения и ошибки. Разница в критичности. Ошибки с максимальной вероятностью могут создать проблемы в работе кода. Это опечатки (да, техника любит точность), лишние или недостающие знаки. А вот к предупреждениям относятся неточности, которые с минимальной вероятностью навредят работе страницы, но не соответствуют стандартам. Это избыточный код, бессмысленные элементы и другие «помарки».

Так выглядит результат валидации HTML-кода на очень простой странице, созданной за пару часов в конструкторе сайтов.

файл не валиден что это значит. Смотреть фото файл не валиден что это значит. Смотреть картинку файл не валиден что это значит. Картинка про файл не валиден что это значит. Фото файл не валиден что это значит

Ошибки и предупреждения собраны в список. В каждом элементе списка указаны значение, атрибут и элемент, которые не устроили валидатор, а также приведена цитата кода с ошибкой.

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

Подробнее о валидаторе, правилах построения HTML-разметки, а также другие интересные и важные вещи мы разбираем на интенсивных курсах.

Список на память

Валидный код — гордость верстальщика

Пройдите курсы по вёрстке, чтобы вами гордились все знакомые. 11 глав по HTML, CSS и JavaScript бесплатно.

Нажатие на кнопку — согласие на обработку персональных данных

Обсуждение статьи, вопросы авторам, опечатки и предложения — в телеграм-чате HTML Academy.

Источник

Так ли важен валидный код на сайте по мнению Google?

файл не валиден что это значит. Смотреть фото файл не валиден что это значит. Смотреть картинку файл не валиден что это значит. Картинка про файл не валиден что это значит. Фото файл не валиден что это значит

файл не валиден что это значит. Смотреть фото файл не валиден что это значит. Смотреть картинку файл не валиден что это значит. Картинка про файл не валиден что это значит. Фото файл не валиден что это значит

Валидность html и css по мнению Google

Весьма часто приходится слышать, что не очень валидный код веб-страниц препятствует продвижению сайта в поисковых системах. Как раз недавно в Google опубликовали хорошее видео по данной теме (о нём далее).

Знаю, что некоторые начинающие вебмастера особенно переживают: они проверяют свой ресурс в т.н. валидаторах, видят кучу ошибок и думают, что нормального ранжирования у них не будет.

Однако в большинстве случаев это совсем не так. Но сначала следует рассказать об этой «валидности».

Что такое валидный код на сайте?

Также для справки можно глянуть заметку из Википедии.

В сайтостроении есть разнообразные стандарты, по которым пишутся HTML и CSS коды. Что-то вроде ГОСТа. Например:

Указанием на стандарт, используемый на данной веб-странице, является первая строчка HTML-кода. Например, что-нибудь такое:

файл не валиден что это значит. Смотреть фото файл не валиден что это значит. Смотреть картинку файл не валиден что это значит. Картинка про файл не валиден что это значит. Фото файл не валиден что это значит

или — для HTML5 — такое:

файл не валиден что это значит. Смотреть фото файл не валиден что это значит. Смотреть картинку файл не валиден что это значит. Картинка про файл не валиден что это значит. Фото файл не валиден что это значит

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

К примеру, установив какие-нибудь кнопки социальных сетей для сайта или виджет Facebook’а, мы уже (как правило) «теряем» эту валидность.

Поэтому и не стоит добиваться полной валидности (разве что из-за перфекционизма..).

Конечно, по-возможности, ошибки следует исправить. Но, например, правка CSS-файлов из-за того, что валидатор «ругается» не даст преимуществ при поисковом продвижении.

Гораздо важнее исправить ошибки, которые напрямую влияют на индексацию — почитайте, почему Яндекс или Гугл могут не индексировать сайт:

Как проверить валидность кода?

Самый известный способ — зайти на главные сервисы для этого:

— нужно просто ввести URL-адрес страницы своего сайта, нажать Enter и узнать об ошибках (они, скорей всего, есть):

файл не валиден что это значит. Смотреть фото файл не валиден что это значит. Смотреть картинку файл не валиден что это значит. Картинка про файл не валиден что это значит. Фото файл не валиден что это значит

Узнать валидность HTML-кода

Также есть неплохие плагины для браузеров. Например, «HTML VALIDATOR» для Firefox.

Валидный код и поисковое продвижение

Ну и наконец о том, ради чего начиналась эта статья. Если нет грубых ошибок в коде — то и не о чем беспокоиться. На продвижение в ПС это не повлияет.

Тем более, нет смысла делать абсолютно валидным CSS (отвечающий за внешний вид сайта): какая разница, что «внутри», если «снаружи» посетителю всё нравится — ведь в конце концов в ранжировании всё решают поведенческие факторы.

Ну а если не нравится — то валидность тут не поможет.

Валидный код и Google:

» alt=»»> В видео разбирается вопрос

Does the crawler really care about valid HTML? (Действительно ли роботу Гугла важна валидность HTML кода?)

На что получен однозначный ответ: валидный код — это хорошо, но если б стали учитывать его при ранжировании сайтов, то начали бы выходить в ТОП те сайты, у которых код чище, а не контент полезнее.

В общем, как обычно: главное — полезный контент.

С Яндексом ситуация аналогичная — здесь можно просто проанализировать его выдачу.

Кроме того, внедрение в сайты, например, семантической разметки (которая у Яндекса немного своя) сделает большинство документов неправильными с точки зрения валидаторов. В таком случае совсем не логичным бы было ухудшать их ранжирование из-за невалидного кода.

Сообщать мне о новых комментариях к этой статье

Источник

Что не так с валидацией данных и при чем тут принцип подстановки Лисков?

файл не валиден что это значит. Смотреть фото файл не валиден что это значит. Смотреть картинку файл не валиден что это значит. Картинка про файл не валиден что это значит. Фото файл не валиден что это значит

Если вы иногда задаете себе вопрос: «а всё ли хорошо мне в этот метод приходит?» и выбираете между «а вдруг пронесет» и «лучше на всякий случай проверить», то добро пожаловать под кат…

Поправка: Как заметили lorc и 0xd34df00d, то, о чем ниже идет речь, называется зависимыми типами. Почитать о них можно тут. Ну а ниже исходный текст с моими соображениями по этому поводу.

При разработке часто возникает потребность проверки валидности данных для некоторого алгоритма. Формально это можно описать следующим образом: пусть мы получаем некоторую структуру данных, проверяем ее значение на соответствие некоторой области допустимых значений (ОДЗ) и передаем ее дальше. Впоследствии эта же структура данных может быть подвергнута такой же проверке. В случае неизменяемости структуры, повторная проверка ее валидности – очевидно лишнее действие.

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

Таким образом, допускаются неисправности в методах, которые ожидают проверенную структуру и работают некорректно со структурой, чье значение выходит за некоторую область допустимых значений.

В этом таится неочевидная более глубокая проблема. На самом деле, валидная структура данных представляет собой подтип исходной структуры. С этой точки зрения, проблема с методом, принимающим только валидные объекты, эквивалентна следующему коду на вымышленном языке:

Согласитесь, что теперь проблема гораздо яснее. Перед нами каноничное нарушение принципа подстановки Лисков. Почитать почему нарушать принцип подстановки плохо можно, например, тут.

Решить проблему передачи невалидных объектов можно с помощью создания подтипа для исходной структуры данных. Например, можно создавать объекты через фабрику, которая по исходной структуре возвращает либо валидный объект подтипа, либо null. Если мы изменим сигнатуру методов, ожидающих валидную структуру так, что они станут принимать только подтип, то проблема исчезнет. Так же помимо уверенности в том, что система точно работает, уменьшится количество валидаций на квадратный сантиметр кода. Еще одним плюсом является то, что такими действиями мы перекладываем ответственность валидации данных с разработчика на компилятор.

В Swift’е, на уровне синтаксиса, решается проблема проверки на null. Идея состоит в том, чтобы разделить типы на допускающие значение null и не допускающие. При этом сделано это в виде сахара таким образом, что программисту не требуется объявлять новый тип. При объявлении типа переменной ClassName гарантируется, что в переменной ненулевое значение, а при объявлении ClassName? переменная допускает значение null. При этом между типами существует коваринтность, то есть в методы, принимающие ClassName?, можно передать и объект типа ClassName.

Эту идею можно расширить до задаваемых пользователем ОДЗ. Снабжение объектов метаданными, содержащими ОДЗ, хранящимися в типе, устранит описанные выше проблемы. Хорошо бы получить поддержку такого средства в языке, но такое поведение реализуемо и в «обычных» ОО-языках, таких как Java или C# с помощью наследования и фабрики.

Ситуация с валидацией данных это очередное подтверждение того, что в ООП сущности берутся не из реального мира, а из инженерных потребностей.

UPD: Как правильно подметили в комментариях, подтипы создавать стоит только в том случае, если мы получим дополнительную надежность и уменьшим количество одинаковых валидаций.

Так же в статье не хватает примера. Пусть на вход к нам поступают некоторые пути файлов. Наша система в некоторых случаях работает со всеми файлами, а в некоторых случаях только с файлами, к которым мы имеем доступ. Далее мы хотим передать их в разные подсистемы, которые так же работают как с доступными, так и с недоступными файлами. Далее эти подсистемы передают файлы еще дальше, где опять не понятно файл доступен или нет. Таким образом во всяком сомнительном месте появится проверка доступа или может напротив забудется. Из-за этого система усложнится в силу повсеместной неоднозначности и проверок. А проверки эти грузят диск и вообще тяжелые. Можно эту проверку кешировать в булевом поле, но это нас не избавит от самого факта необходимости проверки. Я предлагаю ответственность проверки переложить с разработчика на компилятор.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *