Нафига козе баян 
Поговорим об образце кода, который является примером того, как не надо писать. В одном из многочисленных JavaScrit-ов, лежащих у меня в очереди на ознакомление, нашел вот такую конструкцию:
{
i–;
// Тело цикла обрабатывающее массив mass
…
}
Что, собственно, меня не устраивает в таком “невинном” и вполне работающем листинге. А не устраивает непростительная, на мой взгляд, небрежность. Зачем разрывать условие цикла на две части, одну из которых вносить непосредственно в тело цикла? Чтобы рано или поздно, скопировав одну часть кода, получить трудно отлавливаемый баг? Или, чтобы еще больше запутать того, кто будет работать с программой после тебя? Более того, рефакторинг этого простого участка на практике может оказаться гораздо сложнее, чем кажется! Его можно переделать так:
{
// Тело цикла
}
Казалось бы, так намного лучше. Но(!) внимательный программист обратит внимание, что, переписав цикл, мы потеряли один элемент, а именно mass[0]. В данном случае ошибка допущена сознательно, но где гарантия, что другой программист не сделает этого неосознанно? Поэтому, предлагаю писать понятно с самого начала, не стараясь экономить на спичках, в итоге все равно выйдет дороже.
Наилучшим мне видится такой вариант:
{
// Тело цикла
}
подписаться на блог
Юрий
Гость
Написать i– внутри цикла for может только человек, не обученный программированию на уровне старшей школы
И еще одна частая ошибка: в циклах сравнивают переменную-счетчик с одним и тем же значением, которое при этом вычисляется каждый раз заново. Часто вижу такое: for($i=0; $i
Юрий
Гость
Блин, посчитали символ «меньше» за открытие тэга 8(
lusever
Гость
Ага, боян
Это — Improved Native For-Loop.
Evgeny Sergeev
Веб-разработчик, автор блога codeart.ru
lusever, извини, как раз таки то, что я написал в самом конце и есть “Improved Native For-Loop”, а то, что я привел в самом начале - есть порнография!
Возможно, я неправильно понял твой коммент, но поясню, мне не понравился не обратный порядок обхода массива, он то как раз понятен, мне не понравился вынос i– в тело цикла!
Allex
Гость
В точечной проверке конечного значения массива есть ещё одна засада. В данном случае она не срабатывает, но вообще таких вещей стоит избегать. Простите, я на Java напишу
В примере:
for( int i = MAX; i != MIN; i– ) { … }
все будет хорошо, пока MAX не окажется меньше MIN. Лучше себя обезопасить и написать честное условие на переменную цикла:
for( int i = MAX; i >= MIN; i– ) { … }
Dmytro Shteflyuk
Гость
Я обычно пишу
Leave a Reply