Re[2]: Лучший синтаксис для перебора значений
От: VladD2 Российская Империя www.nemerle.org
Дата: 06.04.06 00:39
Оценка: 21 (1) +2
Здравствуйте, kan_izh, Вы писали:

_>Честно говоря, С++ синтаксис мне больше всего нравится, т.к. более гибок, позволяет перебирать не только целые числа в некоем интервале с шагом 1, но фактически что угодно и как угодно.


Понимаш ли в чем дело? С-шный for никто не отменяет. Но его гибкость выливается в ошибки и усложнение чтения кода когда он используется для простых вещей.

Мы (люди) думаем абстракциями. Когда ты пишешь:
for (int i = 0; i < array.Length; i++)
    array[i] = f(array[i]);

ты реально думашь не так:
1. Объявить перменную целого типа.
2. Инициализировать ее нулем который является нижней границей массива.
3. Выполнять условие цикла пока переменная не превысит значения длинны массива.
4. На каждой итерации увеличить индекс на один.
5. Вынуть значение по индексу находящемуся в ячейке с номером заданным в переменной i.
6. Применить к значению функцию f().
7. Поместить значение преобразования по индексу находящемуся в ячейке с номером заданным в переменной i.

Ведь если так мыслить, то даже самая приметивная программа станет архи-сложной.

По этому за конструкцией "for (int i = 0; i < array.Length; i++)" ты улавливашь некий паттерн. В данном случае "перебрать все индексы массива array". Но этот паттерн тебе приходится угадывать. А тут есть две проблемы. 1. Ты можешь не врено принять за этот паттерн просто похожую конструкцию, например, "for (int i = 0; i <= array.Length; i++)" или "for (int i = 0; i < array.Length; i--)". 2. Разглядывать паттерны в накромождениях кода очень не просто.

Посему код написанный в таком стиле плохо читается.

Чем более внятно будет выражен паттерн, тем проще будет читать код, и тем сложнее будет ошибиться в его написании или понимании. Сравни приведенный выше фракмент с:
foraech (i in IndexesOf(array))
  array[i] = f(array[i]);

или темболее с:
ConvertElements(array, f);


_> А простой перебор чисел от A до B на практике редко встречается (по крайней мере в моей практике).


Тогд посчитай сколько у тебя в программе встречается вот таких вот for-ов. Думаю — уйма.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.