MSElang : обсуждение фишек

Вопросы программирования и использования MSEide + MSEgui.

Модератор: Модераторы

Re: MSElang : обсуждение фишек

Сообщение debi12345 » 15.11.2013 16:41:45

Может лучше сделать счетчик в цикле "for" встроенным и необязательным?

Это как ? Пример ?
Аватара пользователя
debi12345
долгожитель
 
Сообщения: 5759
Зарегистрирован: 10.05.2006 23:41:15
Откуда: Ташкент (Узбекистан)

Re: MSElang : обсуждение фишек

Сообщение Лекс Айрин » 15.11.2013 16:54:56

debi12345
видимо...
Код: Выделить всё
For 0..100 do

For count=0..100 do

//где count это встроенный оператор

Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: MSElang : обсуждение фишек

Сообщение Mikhail » 15.11.2013 17:34:52

debi12345 писал(а):Это как ? Пример ?


Примерно так
Код: Выделить всё
for id:expression do
  statement;
end;

for i:count do
  ...
end;

for count do
  ...
end;
Mikhail
энтузиаст
 
Сообщения: 565
Зарегистрирован: 24.10.2013 16:06:47

Re: MSElang : обсуждение фишек

Сообщение Лекс Айрин » 15.11.2013 17:39:28

Mikhail, у любого цикла должны быть условия выхода из него. В твоей записи непонятно где выставляется верхняя граница счетчика.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: MSElang : обсуждение фишек

Сообщение Mikhail » 15.11.2013 17:43:51

Лекс Айрин писал(а):Mikhail, у любого цикла должны быть условия выхода из него. В твоей записи непонятно где выставляется верхняя граница счетчика.


Выражение (expression) задает число повторений тела. Если нужен счетчик, то он указывается явно. Изменяется счетчик от 0 до Count-1. Счетчик (идентификатор) имеет время жизни и область видимости совпадающую с телом цикла.
Mikhail
энтузиаст
 
Сообщения: 565
Зарегистрирован: 24.10.2013 16:06:47

Re: MSElang : обсуждение фишек

Сообщение Лекс Айрин » 15.11.2013 18:20:29

Mikhail писал(а):Если нужен счетчик, то он указывается явно.


как бы, в цикле for счетчик нужен почти всегда.

Mikhail писал(а):Счетчик (идентификатор) имеет время жизни и область видимости совпадающую с телом цикла.


На вопрос о вложенных циклах ответа, как я понимаю, нет...

Mikhail писал(а):Выражение (expression) задает число повторений тела.


для этого варианта понятно (надеюсь правильно), но остальные? Вне цикла счетчик задать еще нельзя (он вне границы видимости), а в цикле уже нельзя (он активно используется). Получается типичный forall
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: MSElang : обсуждение фишек

Сообщение Mikhail » 15.11.2013 18:26:50

Лекс Айрин писал(а):как бы, в цикле for счетчик нужен почти всегда.


Мой опыт говорит о другом.

Лекс Айрин писал(а):На вопрос о вложенных циклах ответа, как я понимаю, нет...


Никаких проблем
Код: Выделить всё
for expression1 do
...
for expression2 do
  ...
end;
...
end;


Лекс Айрин писал(а):для этого варианта понятно (надеюсь правильно), но остальные? Вне цикла счетчик задать еще нельзя (он вне границы видимости), а в цикле уже нельзя (он активно используется). Получается типичный forall

Почему? В качестве счетчика цикла можно использовать любую переменную.
Mikhail
энтузиаст
 
Сообщения: 565
Зарегистрирован: 24.10.2013 16:06:47

Re: MSElang : обсуждение фишек

Сообщение Лекс Айрин » 15.11.2013 18:35:09

Mikhail писал(а): В качестве счетчика цикла можно использовать любую переменную.


гемор полный... все же паскалевский вариант очевиднее. Тем более, что вариант когда мне нужен, к примеру, диапазон от 8 до 74, никто не отменял.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: MSElang : обсуждение фишек

Сообщение Mikhail » 15.11.2013 18:36:30

Лекс Айрин писал(а):гемор полный... все же паскалевский вариант очевиднее. Тем более, что вариант когда мне нужен, к примеру, диапазон от 8 до 74, никто не отменял.


А когда он нужен?
Mikhail
энтузиаст
 
Сообщения: 565
Зарегистрирован: 24.10.2013 16:06:47

Re: MSElang : обсуждение фишек

Сообщение Лекс Айрин » 15.11.2013 18:44:27

Mikhail, да мало ли таких ситуаций. Например, при отправке на печать нескольких страниц с середины длинного текста. Если ВЫ не пользуйтесь данной возможностью, то это не значит, что она никому не нужна.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: MSElang : обсуждение фишек

Сообщение Mikhail » 15.11.2013 18:52:45

Лекс Айрин писал(а):Mikhail, да мало ли таких ситуаций. Например, при отправке на печать нескольких страниц с середины длинного текста. Если ВЫ не пользуйтесь данной возможностью, то это не значит, что она никому не нужна.


Вопрос в %. Если это нужно в 0,0000000001% случаев, то вносить эту возможность в конструкцию языка не стоит. Нет никаких проблем написать так

Код: Выделить всё
page:=8;
for count do
...
page:=page+1;
end;


или

Код: Выделить всё
startpage:=8;
for i:count do
page:=startpage + i;
...

end;


Добавлено спустя 1 час 5 минут 35 секунд:
Есть идея.
Можно отказаться от оператора continue. А оператор break разрешить только внутри тела бесконечного цикла loop end.
Причем, в отличие от Oberon, запретить break даже в случае если один из структурных циклов вложен в цикл loop end. Возможно введение специальной метки (опционально) для бесструктурного цикла loop end, для реализации выхода из вложенного цикла.
Mikhail
энтузиаст
 
Сообщения: 565
Зарегистрирован: 24.10.2013 16:06:47

Re: MSElang : обсуждение фишек

Сообщение mse » 15.11.2013 19:59:35

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)
Код: Выделить всё
for i in <from>..<to> [BY <STEP>] ..

- 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.
mse
новенький
 
Сообщения: 68
Зарегистрирован: 08.08.2013 15:40:31

Re: MSElang : обсуждение фишек

Сообщение Лекс Айрин » 15.11.2013 20:28:18

Mikhail писал(а):Нет никаких проблем написать так


Тоесть, существенно усложнять программу, вводя дополнительные инструкции там, где это не нужно? Да многие, особенно начинающие, начинают отсчет не с нуля, а с единицы. И это вполне оправдано текущими задачами. Подобный финт очень упрощает задачу -- потом не надо вводить "волшебную" операцию -/+1. Сам недавно мучался в TMemo из-за того, что отсчет с нуля идет.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: MSElang : обсуждение фишек

Сообщение Mikhail » 15.11.2013 20:29:35

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 секунд:
Лекс Айрин писал(а):Тоесть, существенно усложнять программу, вводя дополнительные инструкции там, где это не нужно? Да многие, особенно начинающие, начинают отсчет не с нуля, а с единицы.


Существенно? :D

Здесь идет обсуждение нового диалекта, в котором решено все, и массивы и строки индексировать с нуля, для избежания путаницы.

PS Кстати в Delphi тоже так решили, так что привыкайте.

Добавлено спустя 21 минуту 21 секунду:
Для Мартина. Кроме того, elsif решает проблему "висячего" else.
Позволяет проверить полную систему условий.
Mikhail
энтузиаст
 
Сообщения: 565
Зарегистрирован: 24.10.2013 16:06:47

Re: MSElang : обсуждение фишек

Сообщение Лекс Айрин » 15.11.2013 20:59:45

Mikhail писал(а):в котором решено все, и массивы и строки индексировать с нуля, для избежания путаницы.


Но выполнима ли эта задача.
Mikhail писал(а):Существенно? :D

Если это увеличивает возможность ошибки, то очень.

Mikhail писал(а):Кстати в Delphi тоже так решили, так что привыкайте.


Не пользовался.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Пред.След.

Вернуться в MSEide + MSEgui

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0

Рейтинг@Mail.ru