DM Guide 2

Материал из Chaotic Onyx
Версия от 18:46, 16 августа 2024; Accoll (обсуждение | вклад) (Возвращаем гайд по DM из архива. Классика всегда актуальна.)
(разн.) ← Предыдущая версия | Текущая версия (разн.) | Следующая версия → (разн.)
Перейти к навигацииПерейти к поиску

Это 2 глава перевода оригинального руководства по Dream Maker от разработчиков.

Остальные главы руководства и статьи о программировании на коде BYOND от любителей на русском.

Оригинальная 2 глава руководства на английском языке

Глава 2: Навигация в дереве кода

Истинная природа мирового древа не может быть понята ни здесь, ни в начале его, ни в конце, ни в основании. Лишь тот, кто сам сошёл с Древа, сможет окинуть взглядом весь его объём. — Бхагават Гита.

Предыдущая глава была кратким введением, помогающая почувствовать, чем является программирование на DM. Следующие же несколько глав раскроют ранее затронутые темы.

DM-программа начинается с корня дерева кода и продолжается вдоль его ветвей. Каждое новое ответвление (или его часть) получает своё имя, для различия от остальных ветвей того же уровня. Имена чувствительны к регистру (т.е. “apple” и “Apple” являются разными именами). Они могут быть любой длины и состоять из любых букв, чисел и символов, исключая ситуацию, когда имя начинается с цифры.

Рассмотрим следующий код:

turf
   trap
      pit
      quicksand
      glue

Здесь определенны несколько типов ловушек (хотя для их работы не было включено никаких инструкций). Здесь каждый тип объекта расположен на отдельной строке, со своим отступом, что определяет взаимосвязь между ними. Три брата: pit, quicksand и glue являются потомками объекта trap, который в свою очередь происходит от turf, строительного блока карты местности.

Написание кода

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

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

Следующий код эквивалентен предыдущему:

turf/trap
   pit; quicksand; glue

Так же, для обозначения начала и конца описания потомства, могут быть использованы фигурные скобки. С, С++ и Java программисты могут посчитать этот метод более удобным для себя. Компилятор проверят правильность постановки фигурных скобок, и отступов, делая затруднительным проникновение в код простых ошибок. В большинстве случаев это орфографические ошибки и опечатки, незаметные с первого взгляда.

Вот другое вариант написания кода, использующий фигурные скобки:

turf/trap
{
   pit
   quicksand
   glue
}

Для отступов вы можете использовать как табуляцию, так и пробелы. Единственным требованием является, чтобы вы были последовательны. Каждый блок кода должен использовать те же отступы везде. Но в целом, DM предоставляет достаточную свободу в написании кода по вашему желанию, но не слишком большую, чтобы позволить ошибкам остаться незамеченными.

Ошибки при компиляции

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

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

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

Путь в дереве кода

Вы уже поняли, как сделать код более компактным с использованием слеша. Он используется для разделения родителя и потомка, как, к примеру, тут: turf/trap. Такая запись называется – Path (путь), потому что объясняет компилятору, как добраться от текущей позиции в дереве к другой позиции, проходя по указанным ветвям в пути. Если указанная ветка не существует, она будет создана.

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

Следующий пример добавляет несколько вариаций ловушки pit, ранее определённой в коде:

turf/trap/pit
   tar
   lava
   bottomless

Вы можете расположить этот кусочек кода внизу основного (или наверху) в том же файле или в другом. Использование нескольких файлов описано в главе 19.

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

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

turf 
{
   trap {pit; /turf/trap/quicksand}
   /turf/trap/glue
}

Если вы узнали одну из форм кодировки всё тех же трёх ловушек, вы прошли испытание.

Комментарии в коде

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

/*
  Это многострочный комментарий.
  вы можете поместить в него, всё что захотите.
  Компилятор просто пропустит его мимо.
  Некоторые заметят, что это комментарий языка С.
*/

//Это однострочный комментарий.
//Некоторые люди знают его как комментарий С++. 

Комментарий может располагаться в коде где угодно: в конце линии, в отдельной строке или где-нибудь ещё. Они часто пишутся для объяснения намерения или цели. В целом это короткие записки, делающие код более удобным для чтения.