Здравствуйте, Сергей Губанов, Вы писали:
СГ>Здравствуйте, Amidlokos, Вы писали:
A>> Однако имеет смысл только для одной проверки. Ну двух. А если точек выхода десяток (по найденному, по обнаруженному битому, срочно по переключению мютекса и т.п.)?
СГ>Так Вы определитесь, что конкретно нужно. Приведите конкретный пример. Чтобы потом без всяких там, а вот если бы да кабы, то в носу бы выросли грибы...
Да, Сергей... Видно, что никогда у вас не было необходимости к уже созданному дополнительно привинтить мгновенный фоновый экспорт в excel, а затем возможность быстрой остановки всего процесса, а затем индексацию...
Кроме того, пример синтетический. Я имею полное право вставлять сколько угодно "если" и прочих "грибов в носу". Равно как и вы. А тот факт, что с каждым следующим "если" код без break-а оказывается не дописан, а переписан, ни о чём хорошем не говорит.
... << RSDN@Home 1.1.4 beta 7 rev. 447>>
WARNING: expression "to_be || !to_be" is always true
Здравствуйте, Sergey J. A., Вы писали:
SJA>Здравствуйте, Сергей Губанов, Вы писали:
A>>>В этом вашем примере assert(n <= -1) совершенно не имеет смысла, потому что значение n предсказуемо на 100% и всегда будет равно -1.
СГ>>Это было бы так если бы использовался Modula/Oberon в которых из цикла WHILE нельзя выйти ни каким другим способом. В С# же был выход по break. Поэтому значение n на реальных данных всегда было больше нуля, а не то что больше -1. Ошибку я нашел просто случайно поглядев на исходник, а вовсе не от того что программа упала (она не падала) и я залезши в дебагер стал там чего-то крутить.
SJA>Ну вот я написал в обероне прогу. Аналог.
[вырезано]
SJA>Поскольку пост декремента там нету, то я написал свой. Использовал отличный WHILE, как положено, а лажа — та же....
О! Молодца! Ату его, ату!
а если серьёзно — то пример очень даже правильный и демонстрирует, что и на прямом месте можно спотыкнуться, если не осматриваться.
Здравствуйте, xBlackCat, Вы писали:
BC>а если серьёзно — то пример очень даже правильный и демонстрирует, что и на прямом месте можно спотыкнуться, если не осматриваться.
Он очень хорошо демонстрирует, что верифицировать императивные языки, в которых есть побочные эффекты при вызове функций почти нельзя (за исключением тривиальных случаев), и Оберон тут ну ничем не лучше ни сей, ни явы, ни шарпа. Другое дело строгие функциональные языки, но не уверен, что Сергей хотябы представление о них имеет нормальное...
Здравствуйте, Privalov, Вы писали:
P>Есть в украинском: їхній. А в русском из нас это слово еще в школе каленым железом выжигали.
Плохие у вас в школе учителя были.
П>Просто замечательно. То есть любой while-цикл, который требует прерывания по break в обероне автоматически превращается в LOOP.
Цикл, который требует прерывания по break не является while-циклом по определению.
Здравствуйте, Трурль, Вы писали:
П>>Просто замечательно. То есть любой while-цикл, который требует прерывания по break в обероне автоматически превращается в LOOP. Т>Цикл, который требует прерывания по break не является while-циклом по определению.
Угу, то есть поскипанная тобой часть верна — если изначально break не планировалось, а затем возникла такая необходимость — программисту придется переписывать весь цикл, меняя его с while на loop? Да, удобство языка прям из всех щелей прет.
In most computer programming languages, a while loop is a control structure that allows code to be executed repeatedly based on a given boolean condition.
The while construct consists of a block of code and a condition. The condition is first evaluated — if the condition is true the code within the block is then executed. This repeats until the condition becomes false. Because while loops check the condition before the block is executed, the control structure is often also known as a pre-test loop. Compare with the do while loop, which tests the condition after the loop has executed.
Note that it is possible, and in some cases desirable, for the condition to always evaluate to true, creating an infinite loop. When such a loop is created intentionally, there is usually another control structure (such as a break statement) that controls termination of the loop.
Здравствуйте, Пацак, Вы писали:
Т>>Цикл, который требует прерывания по break не является while-циклом по определению. П>Угу, то есть поскипанная тобой часть верна — если изначально break не планировалось, а затем возникла такая необходимость — программисту придется переписывать весь цикл, меняя его с while на loop? Да, удобство языка прям из всех щелей прет.
Дополнение: особенно это удобно если, как предлагал Сергей, программист где-то в дальнейшем коде заложился на то, что условие завершения while-цикла будет ложным. Чрезвычайно познавательно будет потом искать причину, по которой программа начнет падать там, где раньше не падала.
Здравствуйте, Сергей Губанов, Вы писали:
СГ>Здравствуйте, alexku, Вы писали:
A>>В этом вашем примере assert(n <= -1) совершенно не имеет смысла, потому что значение n предсказуемо на 100% и всегда будет равно -1.
СГ>Это было бы так если бы использовался Modula/Oberon в которых из цикла WHILE нельзя выйти ни каким другим способом. В С# же был выход по break. Поэтому значение n на реальных данных всегда было больше нуля, а не то что больше -1. Ошибку я нашел просто случайно поглядев на исходник, а вовсе не от того что программа упала (она не падала) и я залезши в дебагер стал там чего-то крутить.
Что ж, поправлюсь.
СГ>n = 100;
СГ>while(n-- > 0)
СГ>{
//Здесь есть какая-то проверка и выход и никаких манипуляций с n
СГ>}
СГ>assert(n <= -1);
Вы всегда получите на выходе из цикла значение n-1, при этом n никогда не станет меньше -1 (см. assert). Диапазон значений на выходе — -1...99. И никогда никаких "иногда". Результат предсказуем на 100%. Получили некорректное значение n — получили некорректный результат, даже если он "иногда" совпадает с необходимым. И Modula/Oberon здесь ни при чём. Знание языка рулит. А этим примером вы показали его незнание.
Здравствуйте, Аноним, Вы писали:
СГ>>a — обозначает саму себя как процедурную переменную СГ>>a() — обозначает результат, который вернула процедура-функция после исполнения
СГ>>Как иначе-то, может быть?
А>Значит скобки все-таки нудны в вашем знаменитом WHILE a DO x END? То есть нужно писать x()?
Нет, не нужно.
Скобки () нужны для активации процедуры-функции даже если у нее нет аргументов.
Для активации процедуры скобки писать не нужно если у нее нет аргументов.
Здравствуйте, Сергей Губанов, Вы писали:
СГ>Здравствуйте, Аноним, Вы писали:
СГ>>>a — обозначает саму себя как процедурную переменную СГ>>>a() — обозначает результат, который вернула процедура-функция после исполнения
СГ>>>Как иначе-то, может быть?
А>>Значит скобки все-таки нудны в вашем знаменитом WHILE a DO x END? То есть нужно писать x()?
СГ>Нет, не нужно.
СГ>Скобки () нужны для активации процедуры-функции даже если у нее нет аргументов. СГ>Для активации процедуры скобки писать не нужно если у нее нет аргументов.
Здравствуйте, Курилка, Вы писали:
К>Здравствуйте, Mamut, Вы писали:
К>>>Интересная ссылочка, только вот из виртовских детищ только паскаль, ну, видимо, не интересно людям что там в оберонах всех этих творится...
M>>Там еще Modula-3 мелькает иногда
К>А она ещё Виртовская? Я уже в этих клонах запутался, если честно, кто там что и куда — хрен разберёшь, зато синтаксис офигенный
Modula 2 Виртовская, а третья модула нет (это как Turbo Pascal — тоже не Виртовский).
А>>Значит скобки все-таки нужны в вашем знаменитом WHILE a DO x END? То есть нужно писать x()?
СГ>Нет, не нужно.
СГ>Скобки () нужны для активации процедуры-функции даже если у нее нет аргументов. СГ>Для активации процедуры скобки писать не нужно если у нее нет аргументов.
А если у процедуры есть аргументы, то тоже нужны скобки. Спасибо, я понял. Все логично и интуитивно понятно.
P.S. Значти, если в вашем знаменитом WHILE a DO x END у процедуры x будут аргументы, то надо написать скобки? Так же как и в С? Но тогда это повлияет на подсчет оверхеда! Вы не находите, что вы здесь слегка лукавите, придумывая выгодные вам примеры? А когда дело дошло до более-менее реального примера и Mamut посчитал полученный оверхед вы почему-то проигнорировали этот факт... Нехорошо... А еще научный работник.
Я отвечаю за свои слова, а не за то как вы их интерпретируете!