Изменения

Материал из Chaotic Onyx
Перейти к навигацииПерейти к поиску
Добавил вторую часть
Строка 69: Строка 69:     
Кстати, если вы внимательны, то могли заметить, что я изменил первый метод на "''Switch()''". Внутри нашей переменной, отвечающей за состояние фонаря присваивается та же переменная, но отрицательная, НЕ-переменная. Как бы это не звучало, но работает это так - если в переменной стоит, допустим, 143, то мы получим 0, если стоит 0, то получим 1. Это очень удобно для проверок. Получается, что мы присваиваем переменной "''on''", которая равна 0, "''!on''", которая становится единицей. А если вызовем повторно, то уже "''on''", которая равна 1 "''!on''", которая равна нулю. Такие дела.
 
Кстати, если вы внимательны, то могли заметить, что я изменил первый метод на "''Switch()''". Внутри нашей переменной, отвечающей за состояние фонаря присваивается та же переменная, но отрицательная, НЕ-переменная. Как бы это не звучало, но работает это так - если в переменной стоит, допустим, 143, то мы получим 0, если стоит 0, то получим 1. Это очень удобно для проверок. Получается, что мы присваиваем переменной "''on''", которая равна 0, "''!on''", которая становится единицей. А если вызовем повторно, то уже "''on''", которая равна 1 "''!on''", которая равна нулю. Такие дела.
 +
 +
Время добавить немного проверок, чтобы фонарь не включался без заряда и чтобы заряд не уходил в минус. Начну со второго:
 +
 +
proc/Use(var/t = 3)
 +
  charge = max(0, charge - t)
 +
 +
Я воспользовался системным методом, который определяет максимальное значение среди всех введённых и возвращает его. Таким образом мы проверяем, меньше ли "''charge - t''" нуля или нет. Если меньше - вернётся 0, иначе "''charge - t''".Таким образом заряд никогда не упадёт меньше нуля. Но если заряд равен нулю, то нам нужно выключить фонарь! Но даже это мы можем сделать, мы же кодеры! Добавим проверку:
 +
 +
proc/Use(var/t = 3)
 +
  charge = max(0, charge - t)
 +
  if(!charge)
 +
    Switch()
 +
 +
Что-то новое! "''if''" это проверка, если в скобках будет истина - код под ней исполнится, обратите внимание на табуляцию. В данном случае мы можем увидеть в скобках "''charge''". Как я уже говорил - 0 это ложь, не 0 это истина, то есть если в коде выше заряду присвоится значение 0, то исполнится код. Отлично! Мы уже близки к тому, чтобы сделать фонарь идеальным. Стоп! А если сработает какое нибудь ЕМП и заряд потратится, пока фонарь выключен? Тогда он при заряде в нуль возьмёт и включится, а это не очень хорошо. Добавим ещё одну проверку и получим:
 +
 +
proc/Use(var/t = 3)
 +
  charge = max(0, charge - t)
 +
  if(!charge && on)
 +
    Switch()
 +
 +
"''on''" это понятно, но что значит "'''&&'''" ? Это логический оператор И. Можно его представить как булевский (булевские значения это истина или ложь - основа компьютерной логики) знак умножения. Если мы умножим 0 на 1, получим 0, если 1 на 0, тоже 0, а если 1 на 1, то 1. То есть "''Switch()''" сработает только если заряд будет равен нулю И фонарь будет включён. Также есть "'''||'''" - оператор сложения. 1 и 1 будет 1, 1 и 0 будет 1 и лишь 0 и 0 вернут 0. Осталось закрыть последнюю дыру - фонарь можно включить, когда заряда нет. Но с вашими новыми знаниями это очень легко:
 +
 +
proc/Switch()
 +
  if(!charge && !on)
 +
    return
 +
  on = !on
 +
 +
Что за '''return'''? Это оператор возврата значения. Если его прописать без значения - как в нашем случае, он возвращает ''null'', хотя это мы обсудим в другом уроке. В данном случае ''return'' работает как прерыватель исполнения кода. То есть после выполнения ''return'''а, исполнение данного метода дальше не идёт.

Навигация