05:30

Тотальная неудачница и убийца жёстких дисков.
#post-id: 3491-23-35
#original-date: 15.02.2010 Mon
#original-time: 11:35 PM
#original-day:  3491
#original-host: WinXP Home SP3 (Build 2600)

Я настолько сурова, что даже в Паскале умудрилась заюзать GoTo ^^ А что? Не городить же ради простого повтора всякие циклы и двести переменных!

#music: Scooter\The ultimate aural orgasm\Track 3

Комментарии
16.02.2010 в 10:10

 
А что? Не городить же ради простого повтора всякие циклы и двести переменных!
процедуру, Линда, процедуру!

/* какое страшное слово, на самом деле... */
16.02.2010 в 10:59

Тотальная неудачница и убийца жёстких дисков.
На процедуры!

Ну, это хоть не короткий Sub, разворачивающийся в Подпрограмма ^^

Вот мой вариант:



// Что это за cuRs maRk? OO
16.02.2010 в 11:07

 
"подпрограмма" - слово хорошее и благозвучное, но вне контекста немного путает)
а так просто дословный перевол procedure)
оно, правда, меня пугает еще и тем, что в некоторых языках процедур как таковых нет)

// Что это за cuRs maRk? OO
рекомендую тебе почитать @новости и почистить кэш)

Вот мой вариант:
а! хочешь, расскажу, как это делается кошерно?)



а еще более кошерно так:

16.02.2010 в 11:10

🧊🔥
>do
>…
>until true

Уверен, что это прямой код? (:
16.02.2010 в 11:12

 
HarukaTenoh, да) при отсутствии ошибок ввода должен быть только один проход цикла, а после until идет условие выхода из цикла) вроде все верно)
16.02.2010 в 11:13

 
Уверен, что это прямой код? (:
см. второй вариант )
16.02.2010 в 11:14

🧊🔥
Ага, я вижу что 1 раз, просто submit раньше времени :)
16.02.2010 в 11:23

🧊🔥
Лучше так :}

16.02.2010 в 11:32

 
HarukaTenoh, ну, на паскале было бы примерно столько же кода. Но что-то я тут не вижу проверки типа введенной переменной, а философии «ввели не то – сами виноваты» (даже строка тихо сконвертируется в ноль) не очень придерживаюсь )
16.02.2010 в 11:38

🧊🔥
Какую проверку ты хочешь? У меня это массив строк. Или там массив чисел? Про это в условии не сказано :) Тогда, конечно, надо конвертировать с .to_i(base). А то, что 0 на просто строку это нормально, ну, для особо желающих можно и проверку :)
16.02.2010 в 11:41

 
HarukaTenoh, ну, я так подозреваю, при вводе строкового массива не может возникнуть i/o error такого рода, чтобы на нее сказать "wrong value entered" .) откуда вывод, что вводятся какие-то числа (какие - уже не столь важно, видимо).

на просто строку это нормально
часто, но не всегда)
16.02.2010 в 11:45

🧊🔥
Сказать можно что угодно, а мало ли что абстрактный IO error может означать (: Вывод — пишите программы полностью или хотя бы с блоком объявлений (^ ^)\

>часто, но не всегда)

Проверять 1ый символ, делов то :)
16.02.2010 в 11:48

 
Проверять 1ый символ, делов то
эм... не пойдет. например, если я хочу ввести "120000", но случайно введу "1ё20000", оно может скастоваться в int(1). хотя первый символ верный)

Сказать можно что угодно, а мало ли что абстрактный IO error может означать (: Вывод — пишите программы полностью или хотя бы с блоком объявлений (^ ^)\
это верно.
только претензии не ко мне =)
16.02.2010 в 11:52

🧊🔥
>я хочу ввести "120000", но случайно введу "1ё20000"

Ты думаешь программа должна угадывать, что ты хотел ввести? Или хочешь что бы были строго только цифры? :) Смысл? :}
16.02.2010 в 11:53

 
Ты думаешь программа должна угадывать, что ты хотел ввести?
нет)
правда, она должна угадывать то, что я точно не хотел ввести)

Или хочешь что бы были строго только цифры?
да)

Смысл?
защита от очепяток и неверных данных)
и воспитание пользователя, к тому же =)
16.02.2010 в 11:59

🧊🔥
>защита от очепяток и неверных данных)

Похвально… Тогда проверка регэкспом. RegExp is like violence. If it doesn't solve your problem, use more (^__^)

>и воспитание пользователя

Бесполезно :)
16.02.2010 в 12:03

 
Тогда проверка регэкспом
на php возможны восхитительные конструкции вроде if ((string) (ing) $value != $value) { ... }. они защищают еще и от overflow. (хотя удобнее всего таким образом проверять даты: "33.01.2010" волшебным образом превращается в "02.02.2010", а пользователь видит предупреждение.) неужели проверки вроде ^\d*$ столь обязательны?)

Бесполезно
пользователи бывают разные)
16.02.2010 в 12:30

Тотальная неудачница и убийца жёстких дисков.
Кхм. Исходный вопрос был как организовать повтор, а не как вводить числа. Поэтому я оставила самую суть, а не весь код на пять кило и ещё один юнит. Поэтому не понимаю, какие претензии.

Руби не нужен (С)
Слишком умный ввод тоже не нужен. 1ё00000 ни как не лезет в Real, поэтому должен восприниматься как ошибка ввода. Иначе можно дойти до того, что пользователь будет вводить 1,22, а из-за региональных настроек программа будет отбрасывать всё что после "неправильного" символа и ни чего не говорить. А пользователь будет потом гадать, кто дурак.

La personne mystique

"подпрограмма" - слово хорошее и благозвучное, но вне контекста немного путает)

Слишком сложное и ломающееся ^^ Мне по душе функция, но математики негодуют и из-за них в некоторых книжках по программированию начинают умничать и учить не с концепции, а со сравнения с математической функцией. В честь чего, в первой половине примеров все функции называются f и принимают параметр x.

оно, правда, меня пугает еще и тем, что в некоторых языках процедур как таковых нет)

Ну, да ^^ В том же VB деление на Sub и Function немного условное ^^

рекомендую тебе почитать @новости и почистить кэш)

А парсинг смайликов так и не починили =_=

Примеры. Вот об этом я и говорила ^^ Особенно о втором случае, когда появляется целая переменная ^^ Кроме того, Goto я использую тут потому что моя логика такова: первичное действие - ввели и пошли дальше, вторичное - повтор при ошибке. В случае с циклами получается наоборот: первичное действие - вводить до умопомрачения, вторичное - идём дальше ^^ Кроме того, с Goto переход происходит там, где он нужен, а не в рамках вышестоящего блока, что, как мне кажется, облегчает чтение.

// И я не говорю, что Goto нужно пихать всюду, но он помогает, когда юзаешь с умом ^^
16.02.2010 в 12:35

🧊🔥
>ing

WTF? Поисковики молчат, ибо у них сематический поиск головного движка.

>неужели проверки вроде ^\d*$ столь обязательны?)

Здесь сразу понятно что и зачем, а что есть if ((string) (ing) $value != $value) как не шаманство с бубном? :}

Если уж мы стали о датах, «Sat, 07 Sep 2002 00:00:01 GMT» оно распарсит? :}
16.02.2010 в 12:39

 
Линда Кайе,
Исходный вопрос был как организовать повтор, а не как вводить числа.
организация повтора нередко зависит от природы причин необходимости этого повтора )
в данном случае есть еще потрясающий вариант с
i := lbound;
while (i <= ubound) do begin
readln(array[i]);
if ioresult = 0 then inc(i)
else writeln('Error...');
end;

из-за региональных настроек программа будет отбрасывать всё что после "неправильного" символа и ни чего не говорить. А пользователь будет потом гадать, кто дурак.
это совершенно нормальная и часто встречающаяся ситуация)

Мне по душе функция, но математики негодуют и из-за них в некоторых книжках по программированию начинают умничать и учить не с концепции, а со сравнения с математической функцией.
я к этим не отношусь) функция - то, что возвращает значение, процедура - то, что не возвращает. если различие процедуры и функции в том, что процедура возвращает void (или null, или undefined, или еще что), но разница и вовсе не принципиальна)

А парсинг смайликов так и не починили =_=
да, занимаются всякой ерундой, дырки в сайте плодят)

появляется целая переменная
о, какой ужас - целая переменная вместо целой метки!)

едва ли goto читать легче, чем "неочевидные" циклы вроде do...until true ^^
16.02.2010 в 12:45

 
HarukaTenoh,
WTF? Поисковики молчат, ибо у них сематический поиск головного движка.
яркий пример того, почему ввод пользовователя нужно проверять .-)
int, конечно же. как будто непонятно)

Здесь сразу понятно что и зачем, а что есть if ((string) (ing) $value != $value) как не шаманство с бубном? :}
о, я могу захотеть ввести 0x7f в $value и оно сработает, а регэксп не сработает. писать регексп так, чтобы он дублировал "родной" функционал - немного глупо)

Если уж мы стали о датах, «Sat, 07 Sep 2002 00:00:01 GMT» оно распарсит? :}
C:\>php -r "var_dump(strtotime('Sat, 07 Sep 2002 00:00:01 GMT'));"
int(1031356801)

C:\>php -r "echo date('d.m.Y H:i:s', 1031356801);"
07.09.2002 04:00:01


распарсило )
16.02.2010 в 12:50

🧊🔥
О ненужности:



Не слишком очевидный финт ушами какой-то, странно, что какого-нибудь такого дефолтного нет.
16.02.2010 в 12:54

 
О ненужности
бгг, ну, в паскале такие проверки и принято тем же методом делать)
разве что String там не представляет собой класса.

*присмотрелся* а что, в ruby инструкции разделяются переносами строк?)
16.02.2010 в 12:55

🧊🔥
>яркий пример того, почему ввод пользовователя нужно проверять .-)

Тут как раз наоборот. Он слишком умный и проверил как захотел :)

>int

Если это просто int это и так почти везде можно. Хотя что быстрее / лучшее / практичнее в этом случае пока не возьмусь сказать, мерять не хочется :)

>var_dump(strtotime

Это уже финт ушами, у тебя только что был (string) (int) :} Я в том смысле, что как только формат чего-либо начнёт пухнуть обычными кастами и готовыми strtotime уже не отделаешься. Хотя это хорошо, когда они есть, конечно :}
16.02.2010 в 12:58

🧊🔥
>а что, в ruby инструкции разделяются переносами строк?)

Вас это беспокоит, хотите поговорить об этом? :} Вот это всё тоже будет работать:





То бишь если хочется на одной, то ставишь пунктуацию :}
16.02.2010 в 13:00

 
HarukaTenoh,
Он слишком умный и проверил как захотел
ну, компилятор обычно в гугл не лезет.
а результат-то все равно один, так зачем платить больше?)

Хотя что быстрее / лучшее / практичнее в этом случае пока не возьмусь сказать, мерять не хочется
в PHP кастование в int быстрее регулярок. но тоже со своими тараканами, как в примере про "ё" среди числа и отсутствие каких-либо ворнингов. а регулярки там - больше костыли, хотя и используемые постоянно и повсюду.

Это уже финт ушами, у тебя только что был (string) (int)
ну а чего ты хочешь? для инта - (int), для даты - strtotime() =) Jedem das Seine =)

как только формат чего-либо начнёт пухнуть обычными кастами и готовыми strtotime уже не отделаешься
вывод - избегайте нестандартных решений, пользуйтесь старым и проверенным)
16.02.2010 в 13:03

Тотальная неудачница и убийца жёстких дисков.
La personne mystique

организация повтора нередко зависит от природы причин необходимости этого повтора )

Самые актуальные для меня причины:

- Повтор при неверном введённом значении (CUI).
- Повтор при переадресации HTTP запроса.
- Повтор при 5**

Второе я пыталась делать "правильно", но оказалось, что повтором может быть больше одного ^^

в данном случае есть еще потрясающий вариант с

Красиво ^^ Но похоже на тот код установки флагов в никсовом драйвере ^^

это совершенно нормальная и часто встречающаяся ситуация)

Помнится, РНИВЦ организовал такую ситуацию из-за кустарной логики перевода строки в число. Пока у одминов не выработался рефлекс на всех машинах ставить точку в региональных стандартах, система давала такие чудесные глюки. Правда, я это не застала, но говорят, глюки были действительно чудесными и часто непонятные даже самим девелоперам ^^ Лучше так и не рисковать ^^

я к этим не отношусь) функция - то, что возвращает значение, процедура - то, что не возвращает. если различие процедуры и функции в том, что процедура возвращает void (или null, или undefined, или еще что), но разница и вовсе не принципиальна)

Не принципиальна, зато оптимизация терминов и унификация кода ^^

да, занимаются всякой ерундой, дырки в сайте плодят)

Мой детектор иронии что-то детектирует ^^' Кстати, фамилия DDD в посте привычно заставляет задуматься об этих самых дырках ^^ Он же уязвимости находил вплоть до сливания паролей (насчёт этого не уверена), что его потом благодарили за оперативность ^^

о, какой ужас - целая переменная вместо целой метки!)

Переменную нужно где-то объявить, а метка (в VB и C) создаётся автоматом ^^ Правда, C заставляет выносить все объявления выше первого GoTo, но не страшно ^^

едва ли goto читать легче, чем "неочевидные" циклы вроде do...until true ^^

Ну, это уже моё суровое ИМХО и слова того товарища, который сказал великую фразу: "Одно маленькое GoTo способно на треть сократить объём кода" ^^ Пример я уже приводила ^^ А противникам можно небрежно бросить: "ну и попробуй на асме написать программу без единой мерзкой метки" ^^ народ теряется ^^
16.02.2010 в 13:04

 
HarukaTenoh,
Вас это беспокоит, хотите поговорить об этом?
да!)
не люблю, когда меня заставляют переносить или не переносить там, где мне не хочется.
каждый раз, когда приходится писать на VB, матерюсь из-за этого)
16.02.2010 в 13:08

🧊🔥
>ну, компилятор обычно в гугл не лезет.

Тут проблема не в коннекте, а в том, что он предположил не то, что я имею в виду. Причём даже выделив кавычками. Тут проблема в головах авторов кода (^ ^)

>избегайте нестандартных решений, пользуйтесь старым и проверенным)

Этого никто не отрицал (:

>не люблю, когда меня заставляют переносить или не переносить там, где мне не хочется

Надеюсь, под примерами ты прочитал, что это возможно :)
16.02.2010 в 13:13

 
Линда Кайе,
Самые актуальные для меня причины
у переадресации по стандарту - лимит на число прыжков (то ли 5, то ли 10, нужно почитать), посему обычно мне проще сделать рекурсию с счетчиком. все остальное, мнээ... «do ... until not_error»'ll do the thing =) ну а при последовательных запросах по списку/заполнении массива/прочее - один из трех путей, описанных выше, по настроению (обычно выбор не столь принципиален, впрочем).

Не принципиальна, зато оптимизация терминов и унификация кода ^^
тогда пусть все будет функциями)

Мой детектор иронии что-то детектирует ^^'
да нет, я совершенно серьезно)
как раз хотел одному спамеру наказание сделать, а тут такое)

вплоть до сливания паролей (насчёт этого не уверена)
вроде да, находил)
а в 2005м здесь было несколько красивых sql-инъекций) но теперь едва ли осталась хоть одна, в отличие от XSS, через которые можно утащить кэш пароля из куков - что не так спортивно)

Переменную нужно где-то объявить, а метка (в VB и C) создаётся автоматом ^^
в паскале нужно объявлять и то, и другое)

ну и попробуй на асме написать программу без единой мерзкой метки
сравнила тоже)
но да, можно все на циклах сделать)