WarCraft 3: 4.Циклы

Содержание:

4.1 Циклы

Синтаксис cJass вводит цикл whilenot как аналог часто используемого варианта цикла с предусловием. Способ использования этого цикла аналогичен стандартному: после оператора whilenot следует условие, при выполнении которого цикл завершается:
  function test takes integer num, integer pow returns integer
      integer res = 1, i = 0
      whilenot (i++ >= pow) {
          res *= num
      }
      return res
  endfunction
что транслируется в следующее:
  function test takes integer num, integer pow returns integer
      local integer res = 1
      local integer i = 0
      loop
          exitwhen (i >= pow)
          set i = i + 1
          set res = res * num
      endloop
      return res
  endfunction
Также, существует запись этого цикла, при которой проверка условия происходит после выполнения свех действий тела:
  function test takes integer num, integer pow returns integer
      integer res = 1, i = 0
      do {
          res *= num
      } whilenot (i++ >= pow)
      return res
  endfunction
что ожидаемо выглядит на JASS2 как:
  function test takes integer num, integer pow returns integer
      local integer res = 1
      local integer i = 0
      loop
          set res = res * num
          exitwhen (i >= pow)
          set i = i + 1
      endloop
      return res
  endfunction
Кроме того, вы можете использовать ключевое слово do вместо loop — в cJass они взаимозаменяемы.


Views: 931

» Лучшие комментарии


Vlod #1 - 2 years ago 3
Голосов: +3 / -0
Использование локальной переменной с названием dot вызывает ошибку компиляции cJass:
function temp takes nothing returns nothing
  integer dot
  dot = 1
endfunction
Решение - использовать set dot = 1
adic3x #3 - 2 years ago 3
Голосов: +3 / -0
Vlod, проверил, ошибка очевидно вызвана тем, что парсер это воспринимает как начало цикла do. Если добавить к имени переменной еще любой символ - все будет также работать. Вы можете подождать новую версию cJass, где это будет исправлено.
Но не советую, ждать лет 20 - 30