Нашли или выдавили из себя код, который нельзя назвать нормальным,
на который без улыбки не взглянешь?
Не торопитесь его удалять или рефакторить, — запостите его на
говнокод.ру, посмеёмся вместе!
struct Family: Enumerable {
var name = "Smith"
var father = "Bob"
var mother = "Alice"
var child = "Carol"
func each(block: (String) -> Void) {
for i in 0...2 {
switch i {
case 0: block("\(father) \(name)")
case 1: block("\(mother) \(name)")
case 2: block("\(child) \(name)")
default: break
}
}
}
}
Свитч (цепочка ифов) в цикле довольно частый гость на ГК. Но устоявшегося названия почему-то нет. Что-то из области спагетти (запутанный порядок выполнения) или золотого молотка (любовь к циклам) или раздувания...
do
(i == 0) → {block("\(father) \(name)"); i++;},
(i == 1) → {block("\(mother) \(name)"); i++;},
(i == 2) → {block("\(child) \(name)"); i++;}
od
Насколько мне известно, отдельный синтаксис для цикла Дейкстры есть только в языке программирования Оберон-07:
WHILE i = 0 DO block("\(father) \(name)"); INC(I)
ELSIF i = 1 DO block("\(mother) \(name)"); INC(I)
ELSIF i = 2 DO block("\(child) \(name)"); INC(I)
END
Оказывается, в Питоне у циклов есть секция else, почти как тут.
Сразу трудно понять, зачем она нужна, ведь у Питона нет секции out и вроде бы else должна выполниться всегда. Однако, если в теле цикла будет вызов break по условию, то секция else не выполнится. Получится цикл-паук: секция out эмулируется комбинациями if-break.
exitwhen found or missing;
for I := 1 to N do
for J := 1 to M do
if table[I,J] = target then found;
missing;
exits
found: print ("item is in table");
missing: print ("item is not in table");
endexit;
{$macro on}
{$define start := while true do begin if false then begin}
{$define on := continue end else if}
{$define do_ := then begin}
{$define done := continue end; break end}
var i: integer;
begin
i := 0;
start
on i mod 3 = 2 do_
writeln(i);
inc(i);
on i < 9 do_
write(i, ' ');
inc(i);
done
end.
guest # 0
guest # 0 ⇈
guest # 0 ⇈
Насколько мне известно, отдельный синтаксис для цикла Дейкстры есть только в языке программирования Оберон-07:
KitKat # 0 ⇈
guest # 0 ⇈
https://ideone.com/InOiRB
Цикл Дейкстры:
https://ideone.com/JKUvDt
Ну и на всякий случай устройство Даффа:
https://ideone.com/ja6ksz
666_N33D135 # 0 ⇈
guest # 0 ⇈
https://ideone.com/UTCOAe
guest # 0 ⇈
Сразу трудно понять, зачем она нужна, ведь у Питона нет секции out и вроде бы else должна выполниться всегда. Однако, если в теле цикла будет вызов break по условию, то секция else не выполнится. Получится цикл-паук: секция out эмулируется комбинациями if-break.
guest # 0 ⇈
1. exitwhen: https://en.wikipedia.org/wiki/Control_flow#Multiple_early_exit/exit_from_nested_loops
2. COMEFROM: https://en.wikipedia.org/wiki/COMEFROM
Это как GOTO, только ставится не в месте вызова, а в месте назначения.
guest # 0 ⇈
https://en.wikipedia.org/wiki/Zahn%27s_construct
666_N33D135 # 0 ⇈
https://ideone.com/1xezYk