Страница 10 из 23
Re: MSElang : обсуждение фишек
Добавлено: 15.11.2013 16:41:45
debi12345
Может лучше сделать счетчик в цикле "for" встроенным и необязательным?
Это как ? Пример ?
Re: MSElang : обсуждение фишек
Добавлено: 15.11.2013 16:54:56
Лекс Айрин
debi12345видимо...
Код: Выделить всё
For 0..100 do
For count=0..100 do
//где count это встроенный оператор
Re: MSElang : обсуждение фишек
Добавлено: 15.11.2013 17:34:52
Mikhail
debi12345 писал(а):Это как ? Пример ?
Примерно так
Код: Выделить всё
for id:expression do
statement;
end;
for i:count do
...
end;
for count do
...
end;
Re: MSElang : обсуждение фишек
Добавлено: 15.11.2013 17:39:28
Лекс Айрин
Mikhail, у любого цикла должны быть условия выхода из него. В твоей записи непонятно где выставляется верхняя граница счетчика.
Re: MSElang : обсуждение фишек
Добавлено: 15.11.2013 17:43:51
Mikhail
Лекс Айрин писал(а):Mikhail, у любого цикла должны быть условия выхода из него. В твоей записи непонятно где выставляется верхняя граница счетчика.
Выражение (expression) задает число повторений тела. Если нужен счетчик, то он указывается явно. Изменяется счетчик от 0 до Count-1. Счетчик (идентификатор) имеет время жизни и область видимости совпадающую с телом цикла.
Re: MSElang : обсуждение фишек
Добавлено: 15.11.2013 18:20:29
Лекс Айрин
Mikhail писал(а):Если нужен счетчик, то он указывается явно.
как бы, в цикле for счетчик нужен почти всегда.
Mikhail писал(а):Счетчик (идентификатор) имеет время жизни и область видимости совпадающую с телом цикла.
На вопрос о вложенных циклах ответа, как я понимаю, нет...
Mikhail писал(а):Выражение (expression) задает число повторений тела.
для этого варианта понятно (надеюсь правильно), но остальные? Вне цикла счетчик задать еще нельзя (он вне границы видимости), а в цикле уже нельзя (он активно используется). Получается типичный forall
Re: MSElang : обсуждение фишек
Добавлено: 15.11.2013 18:26:50
Mikhail
Лекс Айрин писал(а):как бы, в цикле for счетчик нужен почти всегда.
Мой опыт говорит о другом.
Лекс Айрин писал(а):На вопрос о вложенных циклах ответа, как я понимаю, нет...
Никаких проблем
Код: Выделить всё
for expression1 do
...
for expression2 do
...
end;
...
end;
Лекс Айрин писал(а):для этого варианта понятно (надеюсь правильно), но остальные? Вне цикла счетчик задать еще нельзя (он вне границы видимости), а в цикле уже нельзя (он активно используется). Получается типичный forall
Почему? В качестве счетчика цикла можно использовать любую переменную.
Re: MSElang : обсуждение фишек
Добавлено: 15.11.2013 18:35:09
Лекс Айрин
Mikhail писал(а): В качестве счетчика цикла можно использовать любую переменную.
гемор полный... все же паскалевский вариант очевиднее. Тем более, что вариант когда мне нужен, к примеру, диапазон от 8 до 74, никто не отменял.
Re: MSElang : обсуждение фишек
Добавлено: 15.11.2013 18:36:30
Mikhail
Лекс Айрин писал(а):гемор полный... все же паскалевский вариант очевиднее. Тем более, что вариант когда мне нужен, к примеру, диапазон от 8 до 74, никто не отменял.
А когда он нужен?
Re: MSElang : обсуждение фишек
Добавлено: 15.11.2013 18:44:27
Лекс Айрин
Mikhail, да мало ли таких ситуаций. Например, при отправке на печать нескольких страниц с середины длинного текста. Если ВЫ не пользуйтесь данной возможностью, то это не значит, что она никому не нужна.
Re: MSElang : обсуждение фишек
Добавлено: 15.11.2013 19:58:20
Mikhail
Лекс Айрин писал(а):Mikhail, да мало ли таких ситуаций. Например, при отправке на печать нескольких страниц с середины длинного текста. Если ВЫ не пользуйтесь данной возможностью, то это не значит, что она никому не нужна.
Вопрос в %. Если это нужно в 0,0000000001% случаев, то вносить эту возможность в конструкцию языка не стоит. Нет никаких проблем написать так
или
Код: Выделить всё
startpage:=8;
for i:count do
page:=startpage + i;
...
end;
Добавлено спустя 1 час 5 минут 35 секунд:Есть идея.
Можно отказаться от оператора continue. А оператор break разрешить только внутри тела бесконечного цикла loop end.
Причем, в отличие от Oberon, запретить break даже в случае если один из структурных циклов вложен в цикл loop end. Возможно введение специальной метки (опционально) для бесструктурного цикла loop end, для реализации выхода из вложенного цикла.
Re: MSElang : обсуждение фишек
Добавлено: 15.11.2013 19:59:35
mse
Mikhail писал(а):Код: Выделить всё
if a>1 then
...
elsif a<10 then
...
elsif c>3 then
...
else
...
end;
Can you give a real example where "elseif" is much better than nested "if"s or "case"?
debi12345 писал(а):Some ideas:
1)
- Possibly with float <from>, <to> and <step>
Why?
2) changing "do" to ":" & throwing away "end;" we'll come to Python-like syntax w / o any stuff (useless) keywords
Mandatory "end;" is not useless. It clarifies code structure.
Re: MSElang : обсуждение фишек
Добавлено: 15.11.2013 20:28:18
Лекс Айрин
Mikhail писал(а):Нет никаких проблем написать так
Тоесть, существенно усложнять программу, вводя дополнительные инструкции там, где это не нужно? Да многие, особенно начинающие, начинают отсчет не с нуля, а с единицы. И это вполне оправдано текущими задачами. Подобный финт очень упрощает задачу -- потом не надо вводить "волшебную" операцию -/+1. Сам недавно мучался в TMemo из-за того, что отсчет с нуля идет.
Re: MSElang : обсуждение фишек
Добавлено: 15.11.2013 20:55:42
Mikhail
mse писал(а):Can you give a real example where "elseif" is much better than nested "if"s or "case"?
if [elsif expr then ]* [else] end; это наиболее общая форма оператора множественного выбора.
В частном случае это классический if then else end. Или оператор обхода if then end.
case это частный случай if then [elsif expr then ]* [else] end; Позволяет создать эффективную таблицу переходов если ключ выбора целочисленный.
Кроме того, данная конструкция позволяет получить блочный исходный текст, как в case.
Добавлено спустя 4 минуты 46 секунд:Лекс Айрин писал(а):Тоесть, существенно усложнять программу, вводя дополнительные инструкции там, где это не нужно? Да многие, особенно начинающие, начинают отсчет не с нуля, а с единицы.
Существенно?
Здесь идет обсуждение нового диалекта, в котором решено все, и массивы и строки индексировать с нуля, для избежания путаницы.
PS Кстати в Delphi тоже так решили, так что привыкайте.
Добавлено спустя 21 минуту 21 секунду:Для Мартина. Кроме того, elsif решает проблему "висячего" else.
Позволяет проверить полную систему условий.
Re: MSElang : обсуждение фишек
Добавлено: 15.11.2013 20:59:45
Лекс Айрин
Mikhail писал(а):в котором решено все, и массивы и строки индексировать с нуля, для избежания путаницы.
Но выполнима ли эта задача.
Mikhail писал(а):Существенно?
Если это увеличивает возможность ошибки, то очень.
Mikhail писал(а):Кстати в Delphi тоже так решили, так что привыкайте.
Не пользовался.