Изменения

Материал из Chaotic Onyx
Перейти к навигацииПерейти к поиску
м
→‎Наследование: Вообщем -> В общем
Строка 85: Строка 85:  
     Switch()
 
     Switch()
   −
"''on''" это понятно, но что значит "'''&&'''" ? Это логический оператор И. Можно его представить как булевский (булевские значения это истина или ложь - основа компьютерной логики) знак умножения. Если мы умножим 0 на 1, получим 0, если 1 на 0, тоже 0, а если 1 на 1, то 1. То есть "''Switch()''" сработает только если заряд будет равен нулю И фонарь будет включён. Также есть "'''||'''" - оператор сложения. 1 и 1 будет 1, 1 и 0 будет 1 и лишь 0 и 0 вернут 0. Осталось закрыть последнюю дыру - фонарь можно включить, когда заряда нет. Но с вашими новыми знаниями это очень легко:
+
"''on''" это понятно, но что значит "'''&&'''" ? Это логический оператор И. Можно его представить как булевый (булевые значения это истина или ложь - основа компьютерной логики) знак умножения. Если мы умножим 0 на 1, получим 0, если 1 на 0, тоже 0, а если 1 на 1, то 1. То есть "''Switch()''" сработает только если заряд будет равен нулю И фонарь будет включён. Также есть "'''||'''" - оператор сложения. 1 и 1 будет 1, 1 и 0 будет 1 и лишь 0 и 0 вернут 0. Осталось закрыть последнюю дыру - фонарь можно включить, когда заряда нет. Но с вашими новыми знаниями это очень легко:
    
  proc/Switch()
 
  proc/Switch()
Строка 138: Строка 138:  
     for(var/mob/m in range(r)) m << "You feel some heat."
 
     for(var/mob/m in range(r)) m << "You feel some heat."
   −
С первой строкой, я думаю, всё понятно, но во второй "''return''" на той же строке, что и "''if''", разве так можно? Да, если после системного оператора(''for'', ''if'', ''while'' и прочее) вам хватает лишь одной строки, то можно поставить код прямо на той же строке, точно также мы можем написать "''for(var/mob/m in range®) m << "You feel some heat."''" в одну строку. Но не переусердствуйте с этим, обычно так лаконично смотрится лишь простой код.
+
С первой строкой, я думаю, всё понятно, но во второй "''return''" на той же строке, что и "''if''", разве так можно? Да, если после системного оператора(''for'', ''if'', ''while'' и прочее) вам хватает лишь одной строки, то можно поставить код прямо на той же строке, точно также мы можем написать "''for(var/mob/m in range(r)) m << "You feel some heat."''" в одну строку. Но не переусердствуйте с этим, обычно так лаконично смотрится лишь простой код.
   −
Следующая строка с ''for'' это цикл, довольно сложная строчка, я скажу, поэтому разберём её по кусочкам с конца: ''range(n)'' это системный метод бьёнда, который возвращает связный список "''list''" (далее). "''in''" это также системный оператор, но немного другой. Он сверяет список справа с условием слева и возвращает уже фильтрованный список. Вообще данная строка читается как "Для (''for'') всех объектов типа ''/mob(var/mob/m)'' в (''in'') радиусе 3 (''range(3)'')". Внимательные уже заметили "''var''" и, возможно, поняли, что мы создали переменную в цикле. Но чего мы этим добиваемся? Для этого надо рассмотреть работу "''for''" - он начинает листать список: берёт первый элемент списка, присваивает его укзанной и созданной специально для этого переменной, указанной в самом "''for'''е", исполняет код, указанный ниже него, потом повторяет, пока не кончатся объекты или не встретится оператор "''break''", который как "''return''" прерывает исполнение, но не метода, а конкретного цикла. Это самый сложный к описанию элемент и если вы его поняли - вы поймёте и дальше.
+
Следующая строка с ''for'' это цикл, довольно сложная строчка, я скажу, поэтому разберём её по кусочкам с конца: ''range(n)'' это системный метод бьёнда, который возвращает связный список "''list''" (далее). "''in''" это также системный оператор, но немного другой. Он сверяет список справа с условием слева и возвращает уже фильтрованный список. Вообще данная строка читается как "Для (''for'') всех объектов типа ''/mob(var/mob/m)'' в (''in'') радиусе 3 (''range(3)'')". Внимательные уже заметили "''var''" и, возможно, поняли, что мы создали переменную в цикле. Но чего мы этим добиваемся? Для этого надо рассмотреть работу "''for''" - он начинает листать список: берёт первый элемент списка, присваивает его указанной и созданной специально для этого переменной, указанной в самом "''for'''е", исполняет код, указанный ниже него, потом повторяет, пока не кончатся объекты или не встретится оператор "''break''", который как "''return''" прерывает исполнение, но не метода, а конкретного цикла. Это самый сложный к описанию элемент и если вы его поняли - вы поймёте и дальше.
    
Переменной ''m'' будет присваиваться моб. "''<<''" - оператор вывода. В контексте бьёнда оператор вывода посылает файл, сообщение или что-то ещё прямо на текстовое поле всех клиентов, подключённых к данному объекту. К примеру, если двое человек управляют мобом, то им обоим пришлётся сообщение, указанное справа.
 
Переменной ''m'' будет присваиваться моб. "''<<''" - оператор вывода. В контексте бьёнда оператор вывода посылает файл, сообщение или что-то ещё прямо на текстовое поле всех клиентов, подключённых к данному объекту. К примеру, если двое человек управляют мобом, то им обоим пришлётся сообщение, указанное справа.
Строка 162: Строка 162:     
Здесь ''light'', ''l2'' и ''l3'' будут полностью идентичны, они ссылаются на один объект. К тому же здесь мы впервые используем переопределение метода, но об этом позже. Далее, после new вы можете увидеть путь к объекту, я думаю, это очевидно, а в скобках "''src''". "''src''" это ссылка на объект, в котором выполняется метод, то есть мы создали новый объект типа ''/obj/bulb'' в фонаре, в котором и присутствует данный код.
 
Здесь ''light'', ''l2'' и ''l3'' будут полностью идентичны, они ссылаются на один объект. К тому же здесь мы впервые используем переопределение метода, но об этом позже. Далее, после new вы можете увидеть путь к объекту, я думаю, это очевидно, а в скобках "''src''". "''src''" это ссылка на объект, в котором выполняется метод, то есть мы создали новый объект типа ''/obj/bulb'' в фонаре, в котором и присутствует данный код.
 +
 
Вызов методов, как многие уже знают, осуществляется через "''ProcName(args)''", но как нам вызвать его у лампочки? Для этого существует оператор доступа ".", который позволяет нам получить доступ к переменным, ссылкам и методам объекта.
 
Вызов методов, как многие уже знают, осуществляется через "''ProcName(args)''", но как нам вызвать его у лампочки? Для этого существует оператор доступа ".", который позволяет нам получить доступ к переменным, ссылкам и методам объекта.
   Строка 179: Строка 180:  
   var/obj/bulb/light
 
   var/obj/bulb/light
   −
Здесь мы видим, что переменная обзавелась путём, типом объекта в середине. Почему именно так? Скорее всего потому что это действительно удобный способ, отличающийся полнотой информации и отсутствием необходимости запоминать множество классов, а так же оставляющий возможность повторяемости названий. Вообщем удобно. Соберём всё вместе: слева, в самом начале, мы указываем, что это переменная("''var''"), дальше мы сообщаем тип объекта. Если мы этого не сделаем - бьёнд будет обращаться с ней, как с универсальной переменной и не даст нам доступа к методам и переменным. Закрывается же всё названием переменной. Также существует оператор "мягкого" доступа, который не выдаёт ошибку, если метод отсутствует, но реальная необходимость возникает редко, а глупо используют часто, поэтому я лишь сказал про наличие такой возможности.
+
Здесь мы видим, что переменная обзавелась путём, типом объекта в середине. Почему именно так? Скорее всего потому что это действительно удобный способ, отличающийся полнотой информации и отсутствием необходимости запоминать множество классов, а так же оставляющий возможность повторяемости названий. В общем, удобно. Соберём всё вместе: слева, в самом начале, мы указываем, что это переменная("''var''"), дальше мы сообщаем тип объекта. Если мы этого не сделаем - бьёнд будет обращаться с ней, как с универсальной переменной и не даст нам доступа к методам и переменным. Закрывается же всё названием переменной. Также существует оператор "мягкого" доступа, который не выдаёт ошибку, если метод отсутствует, но реальная необходимость возникает редко, а глупо используют часто, поэтому я лишь сказал про наличие такой возможности.
    
Наследование классов и переопределение методов, это базис ООП, который позволяет слегка подправивить или полностью изменить объект, добавить новый функционал или изменить старый. Вы уже видели первый пример переопределения с системным методом ''New()'', которая есть у абсолютно всех классов, но я приведу и другой пример. А вот текущей листинг кода.
 
Наследование классов и переопределение методов, это базис ООП, который позволяет слегка подправивить или полностью изменить объект, добавить новый функционал или изменить старый. Вы уже видели первый пример переопределения с системным методом ''New()'', которая есть у абсолютно всех классов, но я приведу и другой пример. А вот текущей листинг кода.
62

правки

Навигация