Здравствуйте, MTD, Вы писали:
MTD>В каком языке додумались до цикла по последовательности со счетчиком? Например так (выделенное опционально):
MTD>
MTD>int[] data = { 5, 6 };
MTD>foreach (int i in data with n)
MTD> print n;
MTD>
Имеет смысл не со счетчиком, а с итератором. То есть первый аргумент foreach — объект или ссылка, принимающая значения из коллекции; второй — коллекция. А третий — опциональный — итератор, который используется циклом для обхода коллекции. Там может быть и индекс, если итератор для какого-то типа определен как индекс.
Здравствуйте, MTD, Вы писали:
MTD>В каком языке додумались до цикла по последовательности со счетчиком? Например так (выделенное опционально):
Не нужно. По-хорошему должна быть возможность zip'нуть данную последовательность с последовательностью чисел от 0 до бесконечности. И обходить уже результат этого zip'а
Здравствуйте, Voivoid, Вы писали:
V>Не нужно. По-хорошему должна быть возможность zip'нуть данную последовательность с последовательностью чисел от 0 до бесконечности. И обходить уже результат этого zip'а
И чем это лучше? Лишние движения как для программиста, так и для компилятора, которому это надо хорошо уметь оптимизировать.
Т.е. такая возможность, конечно, нужна, но в дополнение, а не вместо.
Здравствуйте, MTD, Вы писали:
MTD>В каком языке додумались до цикла по последовательности со счетчиком? Например так (выделенное опционально):
MTD>
MTD>int[] data = { 5, 6 };
MTD>foreach (int i in data with n)
MTD> print n;
MTD>
MTD>Вывод:
MTD>
MTD>0
MTD>1
По большому счету смысла нет. Могут понадобиться любые свойства объекта из множества. Индекс это только одно из них. Чем оно лучше чем другие. Любое исключение множит не нужные понятия.
Здравствуйте, Буравчик, Вы писали:
Б>Здравствуйте, MTD, Вы писали:
MTD>>В каком языке додумались до цикла по последовательности со счетчиком? Например так (выделенное опционально):
Б>В Smalltalk у коллекций был метод doWithIndex
Здравствуйте, AndrewVK, Вы писали:
AVK>Здравствуйте, Буравчик, Вы писали:
Б>>В Smalltalk у коллекций был метод doWithIndex
AVK>Методы такиеотнет тут уже упоминали. Но индекс настолько частая фича, что можно было бы и в foreach поддержать синтаксически.
Да, методы упоминали, но есть одна очень существенная разница. В NET (и других языках с foreach) — использование foreach и вызов метода отличаются синтаксически. В Smalltalk же в обоих случаях используется вызов метода. Поэтому вызов do: (аналог foreach) и doWithIndex: синтаксически не отличаются.
Поэтому если doWithIndex есть в стандартной библиотеке, то это скорее часть языка, а не просто метод. То же относится и к другим языкам "без синтаксиса". Например, LISP.
Здравствуйте, Voivoid, Вы писали:
MTD>>В каком языке додумались до цикла по последовательности со счетчиком? Например так (выделенное опционально): V>Не нужно.
Пара простых примеров:
string[] users = { "Bob", "Alice" };
foreach (string name in users with n)
print "#{0} {1}\n", n, name;
foreach (string name in users with n)
print name
print n == users.size - 1 ? "\n" : ", ";
Здравствуйте, MTD, Вы писали:
MTD>Здравствуйте, Voivoid, Вы писали:
MTD>>>В каком языке додумались до цикла по последовательности со счетчиком? Например так (выделенное опционально): V>>Не нужно.
MTD>Пара простых примеров:
MTD>
MTD>string[] users = { "Bob", "Alice" };
MTD>foreach (string name in users with n)
MTD> print "#{0} {1}\n", n, name;
MTD>foreach (string name in users with n)
MTD> print name
MTD> print n == users.size - 1 ? "\n" : ", ";
MTD>
дык вроде если есть та возможность, которую ты решил не цитировать, то все эти примеры вполне решаются