DSblizzard wrote:
> Как бы вы отнеслись к конструкции > > for i in 0..10 > > в которой 0..10 означает от 0 (включительно) до 9 (включительно), а не > от 0 до 10?
Как к бреду безумца.
Posted via RSDN NNTP Server 2.1 beta
Re: Вопрос по приемлемости синтаксисической конструкции
Здравствуйте, MasterZiv, Вы писали:
MZ>DSblizzard wrote:
>> Как бы вы отнеслись к конструкции >> >> for i in 0..10 >> >> в которой 0..10 означает от 0 (включительно) до 9 (включительно), а не >> от 0 до 10?
MZ>Как к бреду безумца.
Приятно видеть такие взвешенные, рассудительные, обоснованные замечания. :maniac:
Здравствуйте, netch80, Вы писали:
N>Суммируя всё сказанное, считаю, что подход, когда правая граница не включается — значительно более прогрессивен и полезен.
Категорически согласен.
Было бы здорово, если бы и в математике пределы знака суммирования обозначали несимметричный отрезок (включая левую границу, исключая правую), подсчёт количества слагаемых упростился бы, наглядность возросла.
У такого подхода есть и недостаток. Если некоторое API ожидает интервал вида [left, right), где, скажем, left, right : Int32, то нельзя задать интервал, содержащий Int32.Max.
Глаза у меня добрые, но рубашка — смирительная!
Re: Вопрос по приемлемости синтаксисической конструкции
Здравствуйте, DSblizzard, Вы писали:
DS>Как бы вы отнеслись к конструкции DS>
DS>for i in 0..10
DS>
в которой 0..10 означает от 0 (включительно) до 9 (включительно), а не от 0 до 10? DS>На странице "syntax across languages" нет ни одного ЯП с таким правилом.
Если уж мы пишем человеческими словами — for, in — то можно не жмотиться по части остальных лексем, а написать
for i from 0 to 10 exclusive
for i from 0 to 10 inclusive
Всё равно здесь диапазон — не первоклассный объект (в отличие от того же питона).
Либо определить конструкторы диапазонов, синтаксически совместимые с остальной частью языка:
range_co(x,y) = [x,y) — как наиболее популярный случай, ему можно дать синоним range(x,y)
range_cc(x,y) = [x,y]
range_oc(x,y) = (x,y]
range_oo(x,y) = (x,y)
Перекуём баги на фичи!
Re[2]: Вопрос по приемлемости синтаксисической конструкции
Здравствуйте, Кодёнок, Вы писали:
Кё>Здравствуйте, DSblizzard, Вы писали:
DS>>Как бы вы отнеслись к конструкции DS>>for i in 0..10
Кё>Она вообще нужна, эта конструкция? Как часто вы в коде числовые интервалы перебираете (при условии наличия foreach для коллекций)?
Проверил все for в одной программе (39 штук) — из них 16 написаны или можно переписать как foreach, 23 — нет.
Программировать сложно. Но не программировать еще сложнее.
Re[2]: Вопрос по приемлемости синтаксисической конструкции
Здравствуйте, Кодт, Вы писали:
К>Если уж мы пишем человеческими словами — for, in — то можно не жмотиться по части остальных лексем, а написать К>for i from 0 to 10 exclusive К>for i from 0 to 10 inclusive
Единственная причина, по которой я рассматриваю .. вместо range — сокращение записи, так что такой вариант не годится.
К>Всё равно здесь диапазон — не первоклассный объект (в отличие от того же питона).
Почему он не может быть первоклассным? Что-то не могу подобрать пример.
Программировать сложно. Но не программировать еще сложнее.
Re[2]: Вопрос по приемлемости синтаксисической конструкции
Здравствуйте, DSblizzard, Вы писали:
DS>Почему он не может быть первоклассным? Что-то не могу подобрать пример.
Дошло. К нему неудобно будет цеплять методы, т.к. имя не из букв. Можно решить выбором синонима, того же range.
Программировать сложно. Но не программировать еще сложнее.
Здравствуйте, Кодёнок, Вы писали:
Кё>Здравствуйте, DSblizzard, Вы писали:
DS>>Как бы вы отнеслись к конструкции DS>>for i in 0..10
Кё>Она вообще нужна, эта конструкция? Как часто вы в коде числовые интервалы перебираете (при условии наличия foreach для коллекций)?
(C# 2.0 )
Некоторое время назад пришлось оптимизировать собственный код. Расследование причин тормозов, что логично,
показало, что виновником являются циклы. В очень многих местах пришлось отказаться от foreach, во первых потому, что пришлось перерабатывать алгоритм(ы), а ещё он по крайней мере раза в полтора медленнее.
Всё сказанное выше — личное мнение, если не указано обратное.
Здравствуйте, DSblizzard, Вы писали:
DS>Черт, скобки или еще что-нибудь нужно добавить в общем случае к начальной и конечной границе. Придется дальше думать.
Обычно в языках, где есть first class ranges эти самые ranges несколько более интеллектуальны.
Например, хаскель: