DM Guide 2
Это 2 глава перевода оригинального руководства по Dream Maker от разработчиков.
Остальные главы руководства и статьи о программировании на коде BYOND от любителей на русском.
Оригинальная 2 глава руководства на английском языке
Глава 2: Навигация в дереве кода
The real nature of this cosmic tree cannot be known here, nor its beginning, nor end, nor foundation. -- Bhagavat Gita
Предыдущая глава была кратким введением, помогающая почувствовать, чем является программирование на 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 }
Если вы узнали одну из форм кодировки всё тех же трёх ловушек, вы прошли испытание.
Комментарии в коде
Если вы начали писать код настолько же запутанно как и в прошлом примере, будет хорошей идеей оставлять после себя подсказки. В противном случае вы его не поймете в следующий раз, когда посмотрите на него, неловкая ситуация. Существует два способа написания комментариев в коде. Один предназначен для многострочных комментариев, второй для однострочного. Пример:
/* Это многострочный комментарий. вы можете поместить в него, всё что захотите. Компилятор просто пропустит его мимо. Некоторые заметят, что это комментарий языка С. */ //Это однострочный комментарий. //Некоторые люди знают его как комментарий С++.
Комментарий может располагаться в коде где угодно: в конце линии, в отдельной строке или где-нибудь ещё. Они часто пишутся для объяснения намерения или цели. В целом это короткие записки, делающие код более удобным для чтения.