Перейти к содержанию

Синтаксис, семантика, ошибки и комментарии

В прошлой статье мы разобрались с базовым объявлением новых акторов — объектов мира.

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

Синтаксис и семантика кода

Часто эти два понятия употребляются рядом.

  • Синтаксис — это формальные правила записи кода; то, как он должен выглядеть, чтобы компьютер в нём разобрался.
  • Семантика — это переданный смысл, то есть то, как его на самом деле воспринимает человек и что в результате по нему делает компьютер.

Напомним, что итоговый код из предыдущей статьи выглядел примерно так:

class ImpulseFloorLamp: Actor replaces Zombieman {
    Default {
        +SOLID;
        +BRIGHT;
        Radius 8;
        Height 48;
    }

    States {
    Spawn:
        TLP2 A 30;
        TLP2 BCD 4;
        Loop;
    }
}

Синтаксис

В коде выше слова вроде States, class, числа, а также символы по типу { } и ; стоят в строго заданных местах друг относительно друга. Эти позиции определяются жёсткими формальными правилами записи, по которым строится язык программирования. Это — синтаксис.

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

Синтаксические ошибки

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

Семантика

Вместе с тем, в коде выше намётанному глазу также сразу видны:

  1. Объявление нового актора и замена им другого;
  2. Логический блок свойств сверху, определяющей непроходимую декорацию;
  3. Блок стейтов, показывающий простую зацикленную анимацию.

Да, записывается это всё синтаксическими конструкциями, но передают смысл объекта. Это — семантика.

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

Семантические ошибки


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

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

Комментарии

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

В ZScript есть два вида комментариев.

  • Однострочные комментарии начинаются с последовательности // и продолжаются до конца текущей строки;
  • Многострочные начинаются с последовательности /* и продолжаются, пока не будет встречена последовательность окончания */.
//  Это однострочный комментарий. Для того, чтобы продолжить 
// его на следующей строке, нужно в начало ещё раз поставить 
// тот же символ.

/* Это многострочный комментарий. Он продолжается, пока не 
  будет встречен соответственный символ окончания строки.

   Здесь всё ещё продолжается тот же, предыдущий, 
  комментарий, и оканчивается он только тут. */

                 // Оба вида комментария можно начинать с любой позиции.

      /* Кстати, многострочный может занимать и всего одну строку. */

Теперь можно полностью описать пример кода выше (все комментарии, если это руководство открыто на сайте, будут рисоваться тёмно-серым цветом):

// Новый актор "ImpulseFloorLamp", заменяет всех зомби-рядовых на уровне:
class ImpulseFloorLamp: Actor replaces Zombieman {

    /* Блок флагов и свойств актора: */
    Default {
        +SOLID;    // Флаг непроходимости объекта.
        +BRIGHT;   // Флаг того, что объект всегда освещён.

        Radius 8;  // Радиус и высота актора.
        Height 48; // Иногда комментарии выравнивают по одной вертикальной линии, чтобы их было удобнее читать (но это необязательно).
    }

    /* Блок стейтов. Доскональный пересказ анимации:
        - Сначала 30 тактов находится в "A" (это 6/7 секунды);
        - Потом на 4 такта переходит в "B";
        - Потом на 4 такта переходит в "C";
        - Потом на 4 такта переходит в "D";
       И затем переходит снова в начало.
    */
    States {
    Spawn:
        TLP2 A 30;
        TLP2 BCD 4; // <-- Сам импульс длительностью 3×4 = 12 тактов.

        //TROO C 2; // А эта строчка по какой-то причине не подошла, но, предположим, выкидывать её пока жалко...
        Loop;
    }
}

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

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


Теперь можно двигаться вперёд, к стейтам и созданию простого актора-противника!