Архив сообщества
2011 — 2019
Аватар Kawaiidesu~~~

Попробуем покодить? Урок первый

Автор: Kawaiidesu~~~ · 09.01.2014, 05:30 · 33 сообщений

Сообщений в теме: 33

Kawaiidesu~~~#1
Здравствуйте, я Kawaiidesu~~~, левый мультиакк, и сегодня мы будем создавать объекты, переменные, методы, изучать основы логики.

Так как форум не предоставляет адекватных средств форматирования кода(чёрные буквы на тёмно-синем фоне(и не надо говорить про индивидов, которые меняют тему)), я буду использовать картинки.
Также прошу не засорять тему и все пожелания, исправления и прочее посылать в ЛС, а в саму тему писать только вопросы.

Начнём-с.

ООП(Объектно-Ориентированное Программирование) - основа бьёнда. Это не процедурный и далеко не императивный язык, здесь всё по большей части закручено именно на объектах, так что примем объект за низшую единицу счисления. Что же такое объект? Аирлок, плата в компьютере, "око" ИИ и т.д. Объект обладает чётко выраженными свойствами(переменные) и возможностями(методы). Но что я говорю, давайте же попробуем создать объект!

Изображение

Зачем же здесь obj, спросите вы? Позвольте пояснить: бьёнд обладает своей базой, базовыми объектами, которая позволяет легко и просто создавать новые объекты, производные от оных(наследование). Она называется atom(Area. Turf. Obj. Mob.) и позволяет нам воспользоваться одним из четырёх готовых объектов.
Но чем же они отличаются? Зона абсолютно уникальна для определённой точки, то есть в один тайл, мельчайшая единица измерения пространства в бьёнде, не поставить две зоны. Турф относительно уникален - если потанцевать с бубном, можно поставить несколько в один тайл. Объект может спокойно двигаться, а моб может контролироваться игроком(хоть объекты тоже можно контролировать, но моб даёт более обширные возможности).

Я надеюсь, здесь ещё всё понятно и продолжу. Создадим что нибудь относительно простое. Пускай это будет фонарик. Какие свойства должны быть у фонарика? Мы должны знать, включён ли он. Попробуем объявить переменную.

Изображение

Ах, да, табуляция- определённый промежуток от начала строки, очень важна в бьёнде. Здесь строки заканчиваются не по закрывающему символу ";" или "}", но по "\n" - то есть при переходе каретки на другую строку. В коде выше мы поставили одинарную табуляцию перед "var/on", этим мы обозначили то, что этот код принадлежит к "obj/flashlight". Можете попробывать представить код в виде иерархии - более высшему(меньше табуляции) принадлежит всё более низшее(участки кода под ним, в котором больше табуляции).  Однако не переборщите с ней - если вы поставите две табуляции в коде выше, он не будет работать, поскольку структура кода будет нарушена.

К примеру мы можем объявить объект по-другому:

Изображение

Всё, что по табуляции ниже /obj - принадлежит ему, но наше объявление переменной можно заменить на:

Изображение

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

Но чему равна наша переменная? Пока - ничему. Абсолютно ничему. "Абсолютное ничто" в бьёнде равно значению "null". Сделаем так, чтобы фонарик был изначально выключен.

Изображение

Как можно увидеть, мы делаем переменную равной нулю. Это значение по умолчанию, оно устанавливается при создании объекта, но может быть спокойно изменено. К тому же мы присваиваем нуль не только по велению левой пятки, но и потому что в бьёнде false, ложь, может быть выражена нулём или null'ом., а всё, что не равно этому - true, истина. Надеюсь, вы знаете логику.

Но как изменить значение? Здесь нам и понадобятся методы. Методы исполняют свой код во время вызова. В бьёнде методы делятся на "verb" - действие и "proc" - процедура, которая является функцией(функция возвращает значение, процедура - нет). Объявим небольшой метод, который будет менять значение переменной:

Изображение

Рассмотрим объявление метода. Оно начинается с "proc", которое говорит бьёнду о том, что мы создаём новый метод, а не переопределяем старый(далее). Дальше после слеша мы видим название метода, а после пустые скобки. Зачем они? В них можно объявить переменные - входные данные, которые могут использоваться в самом методе, в нашем же случае переменных нет, но скобки всё равно требуются, иначе бы метод был бы слишком похож на переменную. Далее мы можем увидеть табуляцию, которая показывает, что строка принадлежит к данному методу и будет исполняться при вызове метода.

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

Изображение

Здесь в скобках указана переменная "t". То есть при вызове функции мы должны будем обязательно указать этот параметр, а во время исполнения метода мы можем им пользоваться, что мы и делаем. А что за "-="? В школе вроде бы такого не проходили. "charge -= t" это сокращённая форма вычитания, которая равна "charge = charge - t", то есть мы просто вычитаем левый аргумент(переменную) из правого. Но каждый раз запоминать и указывать это число - неблагодарное дело. Почему бы не сделать значение по умолчанию, как с переменной в объекте? Действительно. Немного редактируем и вуаля:

Изображение

Теперь не обязательно указывать это значение, если оно не будет указано, то автоматически заменится на это, НО такие переменные должны быть указаны только после переменных без стандартного значения, то есть можно сделать "(var/t, var/k = 1)", но нельзя "(var/k = 1, var/t)". Будьте осторожны.
Кстати, если вы внимательны, вы могли заметить, что я изменил первый метод на "Switch()". Внутри нашей переменной, отвечающей за состояние фонаря присваивается та же переменная, но отрицательная, НЕ-переменная. Как бы это не звучало, но работает это так - если в переменной стоит, допустим, 143, то мы получим 0, если стоит 0, то получим 1. Это очень удобно для проверок. Получается, что мы присваиваем переменной "on", которая равна 0, "!on", которая становится единицей. А если вызовем повторно, то уже "on", которая равна 1 "!on", которая равна нулю. Такие дела.

В одном сообщении лимит на 10 изображений, сообщения сливаются. Продолжение через ~20 минут.
28
Хорошая сторона Интера
Изображение
Скопировать ссылку
Kawaiidesu~~~#2
Время добавить немного проверок, чтобы фонарь не включался без заряда и чтобы заряд не уходил в минус. Начну со второго:

Изображение

Я воспользовался системным методом, который определяет максимальное значение среди всех введённых и возвращает его. Таким образом мы проверяем, меньше ли "charge - t" нуля или нет. Если меньше - вернётся 0, иначе "charge - t".Таким образом заряд никогда не упадёт меньше нуля. Но если заряд равен нулю, то нам нужно выключить фонарь! Но даже это мы можем сделать, мы же кодеры! Добавим проверку:

Изображение

Что-то новое! "if" это проверка, если в скобках будет истина - код под ней исполнится, обратите внимание на табуляцию. В данном случае мы можем увидеть в скобках "charge". Как я уже говорил - 0 это ложь, не 0 это истина, то есть если в коде выше заряду присвоится значение 0, то исполнится код. Отлично! Мы уже близки к тому, чтобы сделать фонарь идеальным. Стоп! А если сработает какое нибудь ЕМП и заряд потратится, пока фонарь выключен? Тогда он при заряде в нуль возьмёт и включится, а это не очень хорошо. Добавим ещё одну проверку и получим:

Изображение

"on" это понятно, но что значит "&&" ? Это логический оператор И. Можно его представить как булевский(булевские значения это истина или ложь - основа компьютерной логики) знак умножения. Если мы умножим 0 на 1, получим 0, если 1 на 0, тоже 0, а если 1 на 1, то 1. То есть "Switch()" сработает только если заряд будет равен нулю И фонарь будет включён. Также есть "||" - оператор сложения. 1 и 1 будет 1, 1 и 0 будет 1 и лишь 0 и 0 вернут 0. Осталось закрыть последнюю дыру - фонарь можно включить, когда заряда нет. Но с вашими новыми знаниями это очень легко:

Изображение

Что за return? Это оператор возврата значения. Если его прописать без значения - как в нашем случае, он возвращает null, хотя это мы обсудим в другом уроке. В данном случае return работает как прерыватель исполнения кода. То есть после выполнения return'а, исполнение данного метода дальше не идёт.

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

З.Ы. Гайды перманентно редактируются. Если вы считаете, что нужно что-то добавить по теме, описанной в начале - пишите в ЛС.
19
Хорошая сторона Интера
Изображение
Скопировать ссылку
Kawaiidesu~~~#5
ACCount (08 January 2014 - 19:49) писал: писал:
У тебя свитч при разрядке сломался. Плохо сделал, негодно.
Будто бы он должен включаться, если разряжен. Который раз ты показываешь свою некомпетентность и всё равно суёшь везде нос. Ну ничего, я буду каждый раз объяснять тебе то или иное действие.
Хм... Да, понял, действительно глупая ошибка, проглядел, исправил
0
Хорошая сторона Интера
Изображение
Скопировать ссылку
Jarl#6
Плохо, негодно. Стоило объяснить азы прежде чем писать код. Так ты учишь обезьян копипастить, а не понимать.
0
ИзображениеИзображение
Скопировать ссылку
Hypela#8
Хорошо-годно. Но нужны азы, основы. И у тебя картинка отвалилась.
0
River Springs смотрит в стену с ненавистью
Комбат аутист ис аривед.
Скопировать ссылку
fey#9
Блять, для кого теги кода придумали?
ебал мамку опа

1
Если вам понравилась моя публикация, комменатрий, хоитет сказать спасибо, можете сделать это здесь, поставив плюсик или оставить свой отзыв.
Скопировать ссылку
Poldan#10
ЭТО ШЕДЕЕЕВР!
Изображение
Нет правда. Держи в том же духе. Охрененный гайд.
2
АЧИВМЕНТ ГЕТ! Убить пришельца, будучи проглоченным им. [Телескопическая дубинка]
▲  ▲
Скопировать ссылку
Kinrany#11
Цитата
Изображение

Я правильно понял, что object - производный класс?

Цитата
Теперь не обязательно указывать это значение, если оно не будет указано, то автоматически заменится на это, НО такие переменные должны быть указаны только после переменных без стандартного значения, то есть можно сделать "(var/t, var/k = 1)", но нельзя "(var/k = 1, var/t)". Будьте осторожны.
яннп

Цитата
Плохо, негодно. Стоило объяснить азы прежде чем писать код. Так ты учишь обезьян копипастить, а не понимать.
Сначала надо нормальный язык учить
0
Скопировать ссылку
Kinrany#12
fey (08 January 2014 - 23:44) писал: писал:
Блять, для кого теги кода придумали?
ебал мамку опа
У колдспейсорабов оно выглядит как говно.
/obj/object

0
Скопировать ссылку
Loly#13
Человек выше дело говорит, ибо нужно знать хотя бы один язык, что бы понять другой.
Единственное, что мне осталось не понятным - откуда вылезло последнее, если на предпроследнем, на 10 строке было if, а стало proc.
0
Изображение
Изображение
СпойлерДля души
Спойлерhttps://youtube.com/embed/xvBRQNdSqvw?fs=1&html5=1
Кадровая политика на Анимусе
Спойлерhttps://youtube.com/embed/WBTkrp0KnXM?fs=1&html5=1
Скопировать ссылку
StepFan#15
Kinrany (09 January 2014 - 02:32) писал: писал:
яннп
Кароч, сматри. При вызове процедуры в качестве параметров передаются некоторые значения. Обычно все они прописываются явно, например:
foo(1,2,3)
Но иногда надо много раз вызывать процедуру с некоторыми одинаковыми параметрами:
foo(2,3,3);
foo(3,4,3);
foo(4,5,3);
В этом случае при описании процедуры в заголовке указывается, какое значение параметра должно использоваться, если при вызове это не указано явно:
foo(2,3);
foo(3,4);
foo(4,5);
И заголовок выглядит следующим образом:
foo(var/k,var/l,var/n=3);
Почему параметры по-умолчанию должны быть в конце? Чтобы не возникло путаницы с тем, на место какого параметра подставлять переданные значения.
1
Скопировать ссылку
Kawaiidesu~~~#16
fey (08 January 2014 - 23:44) писал: писал:
Блять, для кого теги кода придумали?
ебал мамку опа
Kawaiidesu~~~ (08 January 2014 - 19:30) писал: писал:
Так как форум не предоставляет адекватных средств форматирования кода(чёрные буквы на тёмно-синем фоне(и не надо говорить про индивидов, которые меняют тему)), я буду использовать картинки.
К тому же у меня это выглядит как дерьмо:
Изображение
0
Хорошая сторона Интера
Изображение
Скопировать ссылку
Kawaiidesu~~~#18
Loly (09 January 2014 - 02:46) писал: писал:
Человек выше дело говорит, ибо нужно знать хотя бы один язык, что бы понять другой.
Единственное, что мне осталось не понятным - откуда вылезло последнее, если на предпроследнем, на 10 строке было if, а стало proc.
Извиняюсь, добавил просто сверху строк. Или убрал. Я вообще подобного рода гайд первый раз пишу, ничего не продумал.

Kinrany (09 January 2014 - 03:01) писал: писал:
Окей, а перегрузка-то есть?
Я затрагивал только темы, описанные в начале, слишком уж это много времени тратит, убил полтора часа, но я собираюсь раскрыть тему наследования, а насчёт перегрузок сомневаюсь, но проверю. В бьёнде всё довольно гибкое, так что они практически и не требуются.
0
Хорошая сторона Интера
Изображение
Скопировать ссылку
Kawaiidesu~~~#20
Kinrany (09 January 2014 - 02:32) писал: писал:
Я правильно понял, что object - производный класс?
Сначала надо нормальный язык учить
Да, object - производный класс, наследованный от obj - стандартного бьёндокласса.
И снова да, я не собираюсь разводить маразм на 20 экранов, объясняя основы основ, а что такое переменная и метод можно понять и из контекста, и из описания. А если не вышло, увы, не тот склад ума, иди беки писать/спрайты рисовать. В любом случае учить бьёнд первым языком - хоронить своё будущее.
0
Хорошая сторона Интера
Изображение
Скопировать ссылку
Cúchulainn#22
Kawaiidesu~~~ (09 January 2014 - 03:09) писал: писал:
иди беки писать/спрайты рисовать
а вот не нужно подьёдбов, я не смотря на то что идеегенератор и спрайтер всё прекрасно понял и жду ещё.
0
______________________________________

Tiocfaidh ár lá. Let's Gut the bastards.
Изображение
Цитата
Во первых я говорил, во вторых избивал я тебя не в harm'е а просто валил полицейской дубинкой, и чеб я сделал?
Скопировать ссылку
Kinrany#23
Cúchulainn (09 January 2014 - 04:10) писал: писал:
а вот не нужно подьёдбов, я не смотря на то что идеегенератор и спрайтер всё прекрасно понял и жду ещё.
Какой ты обидчивый.
0
Скопировать ссылку
fey#25
Kawaiidesu~~~ (09 January 2014 - 03:01) писал: писал:
К тому же у меня это выглядит как дерьмо:
Изображение

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

Обратно в Кодинг