История изменений
Исправление wandrien, (текущая версия) :
Я вижу несколько способов выйти из цикла/блока: по имени или по объявлению block, и затем exit block. И так далее. Это и есть 100500 способов написать одно и то же.
Это же один способ — exit. Далее ты указываешь, к какому именно скоупу он относится, то есть к концу какой синтаксической единицы мы выходим.
Можно было бы драконовски потребовать всегда специфицировать, к чему именно относится exit, но это слишком жестко.
По этой же причине после end через двоеточие опционально специфицируется, что именно этот end закрывает. Это помогает на этапе компиляции выявить случайные ошибки из-за опечаток, а также создаёт самодокументируемую структуру кода.
Что лучше читается и помогает отследить логику кода?
Это:
}
}
}
или это:
end:switch
end:while
end:function
Невесть, сколько раз при рефакторинге мне приходилось писать вот так, чтобы разобраться в коде:
} /* end switch */
} /* end while */
}
Вот только если коммент ошибочный или утратил актуальность, компилятору Си плевать. А в нашем случае компилятор укажет на это.
А можно использовать метки для документации кода:
event_loop:
while !fd.eof() and !stop do
// двумя страницами ниже:
end:event_loop
Опять-таки, в отличие от возможного комментария /* end of event loop */
, здесь компилятор удостоверится, что цикл действительно закрыт с указанием на правильную метку.
Исходная версия wandrien, :
Я вижу несколько способов выйти из цикла/блока: по имени или по объявлению block, и затем exit block. И так далее. Это и есть 100500 способов написать одно и то же.
Это же один способ — exit. Далее ты указываешь, к какому именно скоупу он относится, то есть к концу какой синтаксической единицы мы выходим.
Можно было бы драконовски потребовать всегда специфицировать, к чему именно относится exit, но это слишком жестко.
По этой же причине после end через двоеточие опционально специфицируется, что именно этот end закрывает. Это помогает на этапе компиляции выявить случайные ошибки из-за опечаток, а также создаёт самодокументируемую структуру кода.
Что лучше читается и помогает отследить логику кода?
Это:
}
}
}
или это:
end:switch
end:while
end:function
Невесть, сколько раз при рефакторинге мне приходилось писать вот так, чтобы разобраться в коде:
} /* end switch */
} /* end while */
}
Вот только если коммент ошибочный или утратил актуальность, компилятору Си плевать. А в нашем случае компилятор укажет на это.
А можно использовать метки для документации кода:
event_loop:
while !fd.eof() and !stop do
// двумя страницами ниже:
end:event_loop
Поять-таки, в отличие от возможного комментария /* end of event loop */
, здесь компилятор удостоверится, что цикл действительно закрыт с указанием на правильную метку.