Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Как стать программистом и избежать детских ошибок Семантика - вторая грамотность, часть 2


Как и обещал, публикую окончание статьи про семантику. Следующий выпуск — о программисте-фрилансере.

Краткое содержание предыдущей серии

Термин «семантика» означает «смысл написанного».

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

Семантика HTML — штука простая своей однозначностью: несмотря на различия толкований смысла отдельных тегов, сама идея о том, что их нужно использовать в соответствии с задумкой прописана в стандарте, а значит и воспринимается программистами, как завет Всевышнего.

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

PHP

Примеры по программированию будут, естественно, на самом популярном ныне PHP. Мне и в работе пришлось на него перейти, хотя совершенным языком я считал (и, с некоторыми оговорками, всё ещё считаю) Perl.

Так. Семантику HTML я назвал формальной. Поскольку смысл тегов прописан в стандарте, а названия классов и предназначены для того же, и к тому же являются словосочетаниями на естественном (или близком к нему) языке.

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

Опять смотрим на несколько примеров.

1. if (!isset($format))
    $format = 'd.m.Y';

2. isset($format) or $format = 'd.m.Y';

3. $format = isset($format) ? $format : 'd.m.Y';

4. Код на Perl
   $format = 'd.m.Y' unless defined $format;

Рассмотрим их в двух приближениях.

Первое приближение: читаем буквально.

  • Первый пример — это явная последовательность. Если переменная не определена, то присвоим ей значение по-умолчанию.
  • Второй сложнее. Нужно вспомнить последовательность и условия обработки оператора or.
  • Третий труднее разглядеть, но в итоге всё сводится к такой фразе: если переменная определена — оставить её, иначе — берём значение по-умолчанию.
  • Четвёртый пример. Присвоим значение по-умолчанию, если переменная не определена.

А что было нужно программисту? Ему требовалось обозначить значение по-умолчанию. Если бы он говорили нам это лично, то нужды уточнять при каких условиях это происходит как правило не возникло бы, поскольку понятно из контекста. Не понятно лишь компьютеру, поэтому надо писать.

Из-за того, что операция случается довольно часто, было бы удобно сделать оператор, который позволил бы записывать эту команду в том же самом объёме знаний, что проносится у нас в уме. Этим мы разгрузили бы себе внимание, которого и так постоянно не хватает. Например, так:

default($format, "d.m.Y");

или что-то в этом роде. Но PHP не позволит нам передать в функцию неопределённую переменную.

Точнее позволит лишь при отключенных Notice, что не выгодно. Но об этом в другой раз.

Значит, нужно выбирать из приведённых вариантов. Какой выбрать?

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

Слова состоят из слогов. Но взрослый человек не читает по слогам. Мы узнаём слова и даже привычные словосочетания целиком. А что если использовать этот эффект в программной записи?

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

Таким образом, человек, впервые встретивший такой приём, споткнётся об него. Зато потом будет походя его распознавать. Причём часть приёмов (включая этот) используется многими программистами, поскольку очень легко запоминаются.

Выводы

  1. Что делать.
    1. Используйте теги HTML согласно их стандартным смыслам (семантике).
    2. Давайте классам осмысленные имена.
    3. То же самое касается использования функций языков программирования.
  2. Как быть.
    1. Читая чужой код, обращайте внимание на то, что хотел выразить разработчик (и хотел ли вообще).
    2. Запоминайте трюки, проверяйте, насколько они общеупотребимы, чтобы не наполнять свои программы ребусами.
    3. Изобретайте свои трюки с умом! Плохи обе крайности: как не упрощать запись вовсе, так и изобретать собственную тайнопись.
    4. Вводя новый трюк, думайте о том, как поймёт его Ваш коллега. Даже если работаете в одиночку (что не будет продолжаться вечно).

Этот выпуск Вы можете прокомментировать в Живом Журнале.


В избранное