Мне нравится Стекло правила 3 когда дело доходит до Повторного использования (который, кажется, то, что Вы интересуетесь).
1) в 3 раза более трудно создать допускающие повторное использование компоненты, чем единственные компоненты использования
2), допускающий повторное использование компонент должен быть испытан в трех различных приложениях, прежде чем это будет достаточно общим для принятия в библиотеку повторного использования
От этого, я думаю, что можно экстраполировать эти заключения
a), Если бы у Вас нет бюджета на 3 раза время, это взяло бы Вас для создания единственного компонента использования, возможно, необходимо удержать на повторном использовании. (Принятие Трудности = Время)
b), Если бы у Вас нет 3 мест, где Вы использовали бы компонент, который Вы создаете, возможно, необходимо удержать при создании допускающего повторное использование компонента.
я все еще думаю, что ООП полезно для создания единственного компонента использования, потому что можно всегда осуществлять рефакторинг его во что-то, что является действительно допускающим повторное использование позже. (Можно также осуществить рефакторинг от PP до ООП, но я думаю, что ООП идет с достаточными преимуществами относительно организации и инкапсуляции для запуска там)
Нет. Они служат именно той цели, которую вы описываете, и я считаю их приятной особенностью языка, который используется слишком мало.
С другой стороны, всякий раз, когда я задумываюсь об использовании метки, я также задаюсь вопросом, нуждается ли мой код в небольшом рефакторинге.
Допустимо использование меток с next
, last
и redo
, но вам следует сделать паузу, чтобы рассмотреть, соответствует ли структура кода лучший. По моему опыту, вам редко нужно использовать эти операторы для чего-либо, кроме охватывающего цикла (что означает, что вам не нужно использовать метку).
Использование goto LABEL
настоятельно не рекомендуется.
Обычно нет причин использовать goto LABEL
.
Например:
my $i = 10;
Label:
# ...
goto Label if --$i;
Лучше записать как:
my $i = 10;
{
# ...
redo if --$i;
}
Единственная причина, которую я могу придумать использовать метку - значит выйти из нескольких циклов или продолжить внешний цикл.
my $i = 10;
OUTER: while(1){
# ...
while(1){
# ...
last OUTER unless --$i;
}
}
my $i = 10;
OUTER: {
# ...
{
# ...
redo OUTER if --$i;
}
}