Изменения

Перевод части оригинального гайда по DM "Оператор switch". Не претендую на полную точность перевода.
Строка 787: Строка 787:  
Внутренний цикл перебирает продукты, которые несет жертва. Обратите внимание, что это не совсем цикл, потому что в конце самой первой итерации он продолжает внешний цикл. Это обычный трюк, используемый для поиска первого элемента, полученного от заданного типа (в данном случае /obj/food). В данном случае необходимо было явно использовать метку victim_loop, поскольку в противном случае continue применялось бы к внутреннему циклу, а не к внешнему. Это привело бы к тому, что заклинание оказалось бы слишком жадным и украло бы всю еду каждой жертвы, а не только по одному предмету.
 
Внутренний цикл перебирает продукты, которые несет жертва. Обратите внимание, что это не совсем цикл, потому что в конце самой первой итерации он продолжает внешний цикл. Это обычный трюк, используемый для поиска первого элемента, полученного от заданного типа (в данном случае /obj/food). В данном случае необходимо было явно использовать метку victim_loop, поскольку в противном случае continue применялось бы к внутреннему циклу, а не к внешнему. Это привело бы к тому, что заклинание оказалось бы слишком жадным и украло бы всю еду каждой жертвы, а не только по одному предмету.
   −
= Оператор выбора =
+
= Оператор switch =
 +
 
 +
Оператор switch используется для упрощения некоторых длинных цепочек операторов else if. Он принимает выражение, а затем выполняет блок кода, соответствующий этому значению. (Оператор switch в DM похож на свой аналог в C, но имеет улучшенный синтаксис, позволяющий избежать распространенных ошибок. Например, в конце одного тела if точка выполнения автоматически переходит в конец оператора switch, а не бежит в код следующего case, как это происходит в C.)
 +
 
 +
switch (expression)
 +
if(constant1) Statement
 +
if(constant2) Statement
 +
.
 +
.
 +
.
 +
else Statement
 +
 
 +
В одном из внутренних операторов if можно указать несколько констант, разделяя их запятыми. Диапазон целых чисел также может быть задан с помощью синтаксиса lower-bound до upper-bound.
 +
 
 +
Пример со звездочкой, использованный ранее в этой главе, можно эффективно переписать, используя оператор switch.
 +
 
 +
proc/Constellation(day)
 +
  //day should be 1 to 365
 +
  switch(day)
 +
  if(355 to 365) return "Capricorn"
 +
  if(326 to 354) return "Sagittarius"
 +
  if(296 to 325) return "Scorpio"
 +
  if(266 to 295) return "Libra"
 +
  if(235 to 265) return "Virgo"
 +
  if(204 to 234) return "Leo"
 +
  if(173 to 203) return "Cancer"
 +
  if(142 to 172) return "Gemini"
 +
  if(111 to 141) return "Taurus"
 +
  if(80 to 110) return "Aries"
 +
  if(51 to 79) return "Pisces"
 +
  if(21 to 50) return "Aquarius"
 +
  if(1 to 20) return "Capricorn"
 +
  else return "Dan!"
33

правки