Мне бы хотелось узнать мнение других людей о следующем стиле написания цикла for
:
for (int rep = numberOfReps; rep --> 0 ;) {
// do something that you simply want to repeat numberOfReps times
}
Причина, по которой я изобрел этот стиль, состоит в том, чтобы отличать его от более общего случая циклов for
. Я использую это, только когда мне нужно просто повторить что-то numberOfReps
раз, и тело цикла не использует значения rep
и numberofReps
в любом случае .
Насколько я знаю, стандартная Java, например, не имеет простого способа сказать "просто повторите это N раз", и именно поэтому я придумал это. Я бы даже сказал, что тело цикла не должно continue
или break
, если это явно не задокументировано в верхней части цикла for
, потому что, как я уже сказал, вся цель состоит в том, чтобы сделать код легче понять, придумав особый стиль для выражения простых повторений.
Идея состоит в том, что если то, что вы делаете, является не простым (зависимость от значения увеличивающегося / убывающего индекса, break
с, continue
с и т. Д.), Тогда используйте стандарт for
петля. Если то, что вы делаете , является простым повторением, с другой стороны, тогда этот отличный стиль передает этот "факт" (разумеется, если вы знаете назначение стиля).
Я сказал "факт", потому что, конечно, можно злоупотреблять стилем. Я работаю при условии, что у вас есть компетентные программисты, цель которых состоит в том, чтобы сделать их код проще , а не сложнее .
Был сделан комментарий, согласно которому принцип for
следует использовать только для простой итерации, а while
следует использовать иначе (например, если переменные цикла изменены в теле).
Если это так, то я просто расширяю этот принцип, чтобы сказать, что если он даже проще, чем ваши простые циклы for
(то есть вас даже не волнует ни индекс итерации, ни его увеличение или уменьшение, и т.д., вы просто хотите повторить что-то N раз), а затем использовать мигающую стрелку for
конструкция цикла.
Какое совпадение, Джош Блох просто написал в Твиттере следующее:
Goes-to Considered Harmful:
public static void main(String[] a) {
int i = 10;
while (i --> 0) /* i goes-to 0 */ {
System.out.println(i);
}
}
К сожалению, никакого объяснения не было дано, но кажется, что по крайней мере этот псевдооператор имеет имя. Это также обсуждалось ранее на SO: Как называется этот оператор: «->»?