Строка 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!" |