Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Понимание операторов лисы
|
|||
|---|---|---|---|
|
#18+
Чем еще отличаются PARAMETERS/LPARAMETERS, кроме количества передаваемых параметров в процедуру/функцию ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2003, 22:33 |
|
||
|
Понимание операторов лисы
|
|||
|---|---|---|---|
|
#18+
Ну допустим есть 3 процедуры последовательно вызываемых одна из другой, a>b>c, из а передаются параметры в b, если в b, LPARAMETERS то параметры-переменные будут как local и не видны в проседуре с, в случае если параметры принимаются как parameters, то параметры будут PRIVATE, то есть видны в с и не видны в а. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2003, 22:53 |
|
||
|
Понимание операторов лисы
|
|||
|---|---|---|---|
|
#18+
Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2003, 10:23 |
|
||
|
Понимание операторов лисы
|
|||
|---|---|---|---|
|
#18+
в форме описано событие unload в котором написано return rezultat && некое число сама форма сделана модальной ========================================= Если форма создана при помощи конструктора форм, то do form myForm1 to my_mem_var работает без проблем, т.е. my_mem_var нормально возвращается в вызывающую программу. Как мне сделать тоже самое если эта же форма создана как класс и создается не DO form ..., так myForm1 = CREATEOBJECT("myFormClass") === За помощь спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2003, 16:59 |
|
||
|
Понимание операторов лисы
|
|||
|---|---|---|---|
|
#18+
myForm1 = CREATEOBJECT("myFormClass") *пишешь myForm1.windowtype=1 DO myform1 to var1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2003, 17:42 |
|
||
|
Понимание операторов лисы
|
|||
|---|---|---|---|
|
#18+
2 brahew Интересно, как это у тебя такое работает? Команда DO подразумевает после себя имя процедуры, а MyForm1 - это имя объекта Реально, при работе через класс ничего из собственно класса не возвращается, а просто считывают нужное значение. * Создаю объект MyForm=CreateObject("myFormClass") * Отображаю форму в модальном режим MyForm.Show(1) * Вместо удаления формы (Release) при нажатии кнопки "Выход" * или крестика в правом верхнем углу формы необходимо * просто скрыть форму командой Hide() * После этой команды управление вернется на команду, * следующую после MyForm.Show(1) * После того, как форма "спрятана" читаем ее свойства, поскольку * форма еще не уничтожена ?MyForm.MyProperty * И окончательно уничтожаем форму MyForm.Release() ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2003, 11:28 |
|
||
|
Понимание операторов лисы
|
|||
|---|---|---|---|
|
#18+
Извиняюсь, у меня это никак не работает, потому что это вообще не работает, то что просил автор можно сделать через Public/Private переменные, другого пути не знаю. Еще раз извините ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2003, 21:33 |
|
||
|
Понимание операторов лисы
|
|||
|---|---|---|---|
|
#18+
Еще раз извините, Владимир описал верный результат, переменные особенно в нем не нужны, хотя интересно если через Return возвращаются значения, их можно достать, или я опять торможу ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2003, 21:38 |
|
||
|
Понимание операторов лисы
|
|||
|---|---|---|---|
|
#18+
Всем спасибо за интересный диалог. Вариант через PUBLIC я конечно же оприходовал, еще до создания топика, а ваши предложения пока не успел. Обязательно все попробую и выскажусь С первого взгляда вариант DO myform1 to var1 меня тоже смутил. Всем удачи и спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2003, 01:58 |
|
||
|
Понимание операторов лисы
|
|||
|---|---|---|---|
|
#18+
На заметку: Я частенько использую оператор (L)Parameters вместо оператора (Local) Private. Разумеется в данном случае нужно соблюсти условие, что в начале списка идут реальные параметры, а после них то, что используется в качестве переменых, ну и не забыть про максимальное количество. Удобно по следующим причинам: - меньше загромождается исходный текст за счет отсутсвия операторов объявления переменных - при некорректном вызове функции не возникает ошибка, связанная с тем, что в функцию передается параметров больше, чем там заявлено. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2003, 13:11 |
|
||
|
Понимание операторов лисы
|
|||
|---|---|---|---|
|
#18+
2Yura, а при описании исходников и написании инструкций пограммиста, писать - резерв :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2003, 13:38 |
|
||
|
Понимание операторов лисы
|
|||
|---|---|---|---|
|
#18+
я так не сделаю никогда(см. высказывание от Yura), по той простой, что две строки объявления переменных кода никогда не захламляли, и второе что следить за использованием, типами и описаниями, используемых переменных это прежде всего хороший тон программиста. Пускать это дело на самотек, как-то не к лицу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2003, 13:49 |
|
||
|
Понимание операторов лисы
|
|||
|---|---|---|---|
|
#18+
> никогда... И совершенно напрасно. Совершенно верно, и я веду почти абсолютный контроль за типами испольуземых переменных, и тем-более, если они объявлены по принципу объявления параметров. Всем, абсолютно всем переменным сразу после объявления присваиваются начальные значения нужных типов, и все параметры без исключения в 90% случаев проверяются на их типы, а зачастую и на допустимый диапазон значений. Я совершенно не против того, что объявляются переменные - переменными, а параметры -параметрами, но я нашел такой ход, и он мне кажется весьма удобным, тем-более, что в итоговом результате нет никакой разницы. Пример, попробуй убедить что это пример плохого тона... *********************************************************** *********************************************************** PROCEDURE S0014 *********************************************************** * 2003.08.15.0-14 Последние изменения *********************************************************** LPARAMETERS PAR0, PAR1, PAR2, PAR3, nFox, cKey, cAns, sKey, mKey, cIco, rKey cAns = 'MASTER.ICO' mKey = IIF (TYPE('PAR0')='C', PAR0, 'EXPERT') sKey = IIF (TYPE('PAR1')='C', PAR1, '') cKey = IIF (TYPE('PAR2')='C', PAR2, '') +';' cIco = IIF (TYPE('PAR3')='C', UPPER(ALLTRIM(PAR3)), cAns) и т.д. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2003, 16:02 |
|
||
|
Понимание операторов лисы
|
|||
|---|---|---|---|
|
#18+
Конечно с точки зрения синтаксиса и концепции языка, (то что тип переменной определяется динамически - по значению) все просто отлично и замечательно и правильно и красиво, и т.д., НО !!! ты же хотел не засорять код. А что мы видим За что боролся на то и напоролся !!!!!!!!!!!!!!!!!!!!!!!! И еще (даже если не для себя пишешь) существуют правила вызова процедур и функций - которые определяет разработчик, И если в каждой п/ц делать абсолютный контроль тады, даже не знаю как и обозвать ситуацию. Ну что Убедил ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2003, 16:18 |
|
||
|
Понимание операторов лисы
|
|||
|---|---|---|---|
|
#18+
Функционально, конечно, никакой разницы. Разница есть с точки зрения программиста (написания кода) Следует помнить, что Вы пишите не один проект (или еще напишите). Это значит, что Вы можете вернуться к написанному коду спустя несколько месяцев (лет) после того, как он будет написан. Как следствие, Вы скорее всего вообще не будете помнить почему здесь сделано так, а не иначе. Исходя из этого предположения, прежде чем вводить некий стилистический стандарт в свой код следует учесть следующие вопросы: -) Читабельность (понятность) кода Однозначный проигрыш. После слова (L)Parameters подразумеваются именно параметры, т.е. нечто, что принимается от вызвавшей процедуры или передается в вызвавшую процедуру. А здесь необходимо держать в памяти, что это не так. (Напоминаю: Вы год не возвращались к этой процедуре, думаю не сразу сообразите, где кончаются параметры и начинаются переменные) -) Модифицируемость (легкость изменения) кода Опять проигрыш Захотели добавить параметр. Сделали это при вызове данной процедуры, а в самой процедуре забыли описать. Но никакого сообщения об ошибке не последовало. Что все правильно? Нет, просто это не было воспринято как ошибка. И попробуй потом такую ошибку отлови! Есть еще одно соображение: FoxPro допускает объявлять переменные в любом месте программы, а не только в специально отведенных местах (например, только в заголовочном модуле). Исходя из этого соображения я стараюсь объявлять переменные непосредственно перед их первым использованием (если это возможно). Такое объявление облегчает редактирование кода (переменная уже не нужна, но ее объявление все еще есть) Не стоит так уж гнаться за краткостью кода (минимизацией количества символов). В этом нет никакого смысла. А ошибочный вызов должен вызвать именно ошибку, а не скромно промолчать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2003, 16:34 |
|
||
|
Понимание операторов лисы
|
|||
|---|---|---|---|
|
#18+
нечего более и добавлять к выше сказанному. Спасибо ВладимирМ за подробность. Еще больше убедил меня в моей точке зрения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2003, 16:54 |
|
||
|
Понимание операторов лисы
|
|||
|---|---|---|---|
|
#18+
> на то и напоролся ???????? С чего-бы это вдруг ????? и с чего это Вы решили, что я на что-то напоролся????, наоборот, огромную пользу от профилактики на ошибку 107 я уже ощутил, и не раз, особенно в период, когда я начал использовать такую технологию, и четко видел разницу, хотя, конечно, если Вы считаете нормой вылет программы с сообщением, что программа выполнила недопустимую операцию и будет закрыта...., ну что-ж, дай бог Вашим заказчикам крепких нервов. Не очень понятно, какие правила разработчика могут туть быть нарушены, пока что сколько я видел и дорабатывал разных проектов (не только своих), ни в одном такая технология не вызвала конфликта, а вот ее отсутствие иногда очень даже заметно. > И если в каждой п/ц делать абсолютный контроль тады, > даже не знаю как и обозвать ситуацию. > Ну что Убедил ? Так это оказывается была попытка меня в чем-то убедить.... Называете как хотите, и, разумеется, абсолютно в каждую мелкую процедуру этого вставлять не требуется, но иногда, когда такого контроля нет, там, где без него невозможно обеспечить приемлемую устойчивость программы я отпускаю в адрес программеров не очень приятные для них слова. > Следует помнить, что ... Вы можете вернуться к > написанному коду спустя несколько месяцев (лет) Совершенно верно. Это один из вопросов, которым я задаюсь весьма часто, и достаточно регулярно, и уже наработал достаточно различных уловок, благодаря которым я видя свой исходник через много времени могу с ходу дать пояснения, и не потому, что я это помню, а потому, что я в своем стиле это сразу вижу. -) Читабельность (понятность) кода ?Однозначный проигрыш.... Ничего подобного. Читается очень легко и быстро. >После слова (L)Parameters подразумеваются именно параметры, т.е. нечто, >что принимается от вызвавшей процедуры или передается в вызвавшую >процедуру. А здесь необходимо держать в памяти, что это не так. >(Напоминаю: Вы год не возвращались к этой процедуре, думаю не сразу >сообразите, где кончаются параметры и начинаются переменные) Приведенный выше участок кода примерно двухлетней давности из первого-же подвернувшегося под-руку исходника.(Дата, указанная в нем - означает наличие мелких доработок на эту дату в пределах всего текста функции (в данном частном случае)). Кстати посмотрите повнимательнее, я думаю что не только я, но и многие другие сразу поймут, где есть фактические параметры, а где начинаются псевдопеременные. Вопрос по разграничению параметров и псевдопеременных я снял практически сразу, как у меня возникла идея такого способа объявления перменных. -) Модифицируемость (легкость изменения) кода ?Опять проигрыш Да Вы, батенька, жуткий консерватор. Учитесь видеть несколько шире Ваших привычек. > Захотели добавить параметр. Без проблем, очень легко и быстро. Более того, приемы, которые использую я позволяют при необходимости очень лекго менять параметры местами. Иногда для построения логической цепочки параметров это бывает необходимо. >Сделали это при вызове данной процедуры, >а в самой процедуре забыли описать. Если конечно забыл, это случается крайне редко, а вот как способ еще раз протестировать свой проект на эту неприятность, я стараюсь не упускать. Описанный Вами прием я часто использую, что-бы протестировать свой проект на предмет того, как он справится с данной ситуацией либо за счет предпринятых ранее профилактических действий, либо действиями обработчика ошибок. Добавление параметров при вызове функции в моей практике случается не часто, а вот вызов функции с меньшим их количеством, вопрос более серъезный, и встречается гораздо чаще, и тут-то как раз контроль на типы переменных и/или параметров очень даже к месту. > Но никакого сообщения об ошибке не последовало. > Что все правильно? Нет, просто это не было воспринято как ошибка. > И попробуй потом такую ошибку отлови! Вопрос поднят правильно, актуальный, но не к месту. Если от какой-либо функции требуется увеличение ее функциональности, для чего, собственно, и был дабавлен новый параметр (как я это понимаю) при ее вызове, то забывать об этом нельзя, и вряд-ли это относится ко мне в большей степени, чем к кому-либо другому. Наличие такой ситуации уже изначально является ошибкой программиста, а программист, любой, обязательно должен тестировать свои текущие доработки на корректность отработки функционала. > ... объявлять переменные непосредственно перед > их первым использованием. > Такое объявление облегчает редактирование кода > (переменная уже не нужна, но ее объявление все еще есть) Абсолютно не возражаю, но с течением времени и формированием моего собственного стиля программирования я счел целесообразным собрать в одно - два - три места объявление переменных каждой функции. Я веду весьма жесткий контроль за неиспользуемыми переменными, для чего у меня есть собственные приемы, а объявление их кучкой мне дает возможность сразу одним взглядом охватить картину что и как объявлено, чему какое значение присвоено и т.п. > Не стоит так уж гнаться за краткостью кода Согласен полностью, код должен быть не излишне кратким, и в то-же время не громоздким. Код надо создавать элегантным, воспринимаемым, а главное - рабочим. > А ошибочный вызов должен вызвать именно > ошибку, а не скромно промолчать. (смахивая слезу) Так кто-же спорит, только правильнее будет, если программист будет прикладывать руки к тому, что-бы избежать ошибочные ситуации, а не к их созданию, а дополнительная профилактика глупых ошибок еще никому не повредила. Использовать или не использовать приведенные мной выше пары приемов - дело каждого, я в данном случае просто поделился своими приемами, и на самом деле по конкретным данным приемам в принципе вообще неочем говорить. За последние пару-тройку лет у меня выработался свой собственный, персональный стиль программирования, в котором есть достаточно много приемов, непривычных для первого взгляда программистов, привыкших писать используемым в массовой литературе стилем и описанными правилами, вот только примеры из литературы, к сожалению, чаще вызывают скорее жалость, чем восхищение. И еще я-бы хотел предложить участникам форума не пытаться в первую очередь критиковать то, что отличается от используемого Вами стиля или стиля, насаждаемого литературой ширпотреба, а пытаться уловить рациональные зерна в приводимых примерах, вдруг найденный программисткий ход будет более эффективный, чем то, к чему привыкли Вы. Мне такой подход уже принес немало пользы. С уважением ко всем, Yura. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2003, 12:46 |
|
||
|
Понимание операторов лисы
|
|||
|---|---|---|---|
|
#18+
>Пример, попробуй убедить что это пример плохого тона... Вот собственно и вся причина дталога, а не навязывание изменить стил и привычки. В принципе у каждого есть свои наработки стиль и вривычки (больше/меньше , лучьше/хуже), но дело-то в том, что именно общение подобного рода и дает почву для идей. А далее твое мнение (на счет попробуй убедить) предположим такое: программер написал функцию с параметрами точно знает их количество и тип код отлажен на столько, что комар носа не подточит И где тады вугоду искать от, ставших бесполезными TYPE("???")="?" В Инете у меня опыт (ну совсем малый), но С первых шагов сразу понятно, что без уважения к окружающим жизни не будет. Всем успехов !!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2003, 13:10 |
|
||
|
Понимание операторов лисы
|
|||
|---|---|---|---|
|
#18+
>Да Вы, батенька, жуткий консерватор. Учитесь видеть несколько шире Ваших привычек Раз пошла такая пьянка, то абсолютно те же слова можно адресовать и Вам. Что собственно мы имеет при сравнении 2 вариантов кода Ваш вариант Код: plaintext Классический вариант Код: plaintext 1. Отличие в единственном слове "LOCAL". Все! Ну и какой смысл был в такой экономии? По сути, что Вы сделали: использовали второстепенную функцию ключевого слова LPARAMETERS (объявления области видимости и создание переменной) как главную функцию. А смысл? Экономия одного единственного слова? Я даже не знаю, как обозвать-то человека занимающегося подобными выкрутасами. Я еще раз напомню, что основная задача ключевого слова LPARAMETERS - это объявление параметров . Задание области видимости и создание новых переменных - это второстепенная функция, которая необходима для выполнения основной функции. Мне это напоминает использование открытой транзакции для блокировки изменяемых данных в процессе редактирования. Переубедить программиста в том, что так делать нельзя и подвешенная транзакция - это не есть хорошо - невозможно: "Ну как же, я ведь работаю! Что мне всю программу переделывать?" Самокритичнее надо быть. Например я время от времени возвращаюсь к собственным старым программам и с удивлением смотрю, какую же ерунду я раньше писал. А в отношении FoxPro - это справедливо вдвойне. Язык такой. Я многократно убеждался, что использование второстепенных свойств команды в качестве главных - не есть хорошо. Никогда не знаешь, где тебя это догонит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2003, 13:31 |
|
||
|
Понимание операторов лисы
|
|||
|---|---|---|---|
|
#18+
> но дело-то в том, > что именно общение подобного рода и дает почву для идей. Конечно, иначе-б и меня тут небыло. > программер написал функцию с параметрами > точно знает их количество и тип > код отлажен на столько, что комар носа не подточит Предлагаю выпить за его здоровье. > И где тады вугоду искать от, ставших бесполезными TYPE("???")="?" Если работа над проектом окончательно прекращена, и все отлажено, тогда уже наличие или отсутствие этого уже не имеет никакого значения, все-равно туда уже больше никто не заглянет, но и любой законченный проект с этого времени начинает умирать. Эта группа операторов имеет пользу если, работа продолжается, более того, когда такая функция кочует из одного проекта в другой, и тем-более, если она передается другим программистам, которые должны ее использовать, не заглядывая в нее, которые, безусловно, могут напутать с передачей праметров, и при этом забыть о необходимости тестирования своего-же кода. В качестве другого программиста может быть кто угодно, в том числе и он сам через какое-то время. Так у меня есть уже ряд функций, в которые и заглядывать уже не хочется, и, разумеется, я далеко не всегда помню что, и в каком порядке туда нужно передать, но ведь работают.... Эти несколько строчек - это великое дело. > что без уважения к окружающим жизни не будет. Не могу не согласиться. Подписываюсь под этими словами полностью. > то абсолютно те же слова можно адресовать и Вам. Возможно, я в грудь себя не бью. > Ваш вариант LPARAMETERS PAR0, PAR1, PAR2, PAR3, nFox, cKey, cAns, sKey, mKey, cIco, rKey > Классический вариант LPARAMETERS PAR0, PAR1, PAR2, PAR3 LOCAL nFox, cKey, cAns, sKey, mKey, cIco, rKey > Отличие в единственном слове "LOCAL". Все! > Ну и какой смысл был в такой экономии? Так ведь я не призываю к безоговорочному подражанию, с другой стороны Вы асолютно правильно разделили. Надо полагать в таком случае данное слияние двух операторов в один не привело к ухудшению читаемости текста, о чем было сказано выше, да и от других замечаний не осталось и следа. Что-же касается использования одной или двух строк в данной ситуации принципиальной разницы нет, и я использую в зависимости от ситуации оба варианта. В простейших функциях я отдаю предпочтение своему варианту, в сложных - стандартно, но и там зачастую некоторый ряд переменных я прописываю в строке параметров, и кроме дополнительного удобства в этом я ничего не нахожу. > По сути, что Вы использовали функцию ключевого слова > LPARAMETERS как главную функцию. Совершенно верно, с полным пониманием содеянного > А смысл? Экономия одного единственного слова? Я даже не знаю, > как обозвать-то человека занимающегося подобными выкрутасами. Могу подсказать, как - человек с творческим подходм к делу, если Вам угодно. С одной стороны смысла в этом может и не быть, с другой, противоположной стороны - в рамках из этих двух строк - экономия видимого пространства на экране монитора 50%. Хотите Вы этого или нет, но уже не раз мной отмечено, что в отдельных случаях вытягивание текста в одну строку вместо расписывания по вертикали дает очень значительный выигрыш в понимании сущности реализованного алгоритма работы функции даже при явном недостатке комментариев. Могу привести наглядный пример. > что основная задача ключевого слова LPARAMETERS - > это объявление параметров. Задание области видимости > и создание новых переменных - это второстепенная функция, > которая необходима для выполнения основной функции. Приятно иметь дело с грамотными людьми. Использование второстепенной функции данного конкретного оператора в качестве главной не несет никаких деструктивных действий, благодаря безупречной его работе, но зато в целом ряде случаев, по крайней мере в моей практике, оказывается весьма полезной. Знать основное назначение операторов языка очень полезно, но и не менее полезно бывает видеть возможность использования конструкций языка во всем объеме их возможностей, значимость которых может даже превосходить их основное назначение. По поводу транзакций, ну что сказать... Если честно, мне и в голову-бы не пришло сотворить что-то подобное своими руками. С базой данных такие вольности очень чреваты печальными последствиями, а вот выполнить GET в локальную вспомогательную таблицу, специально для этого созданную - я особых противопоказаний не вижу. > и с удивлением смотрю, какую же ерунду я раньше писал. Ну, тут Вы не одиноки, скорее наоборот. И для меня это так-же не менее справедливо, и именно для самого себя, будущего, я стараюсь делать свой текст наиболее читабельным именно в понимании алгоритма. Кстати и блок контроля типов передаваемых переменных в этом плане играет только положительную роль, когда уже давно не помнишь какого типа нужно передавать параметры в твою-же старую функцию, комментарии отставлять как всегда лень и некогда, а один взгляд на этот блок сразу обо всем говорит. > Никогда не знаешь, где тебя это догонит. > Язык такой. Согласен. Свобода действий огромная, - понимай что делаешь, а при нестандартном использовании конструкций языка требуется тройное тестирование. Острожность, аккуратность, тщательность во главе угла. Затравка на следующий пост - А мой обработчик ошибок умеет бороться с ошибкой номер 12, а Ваш? Удачи всем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2003, 15:21 |
|
||
|
Понимание операторов лисы
|
|||
|---|---|---|---|
|
#18+
2 Yura Я, например, пишу на VFP, VC++, T-SQL (хранимые процедуры) и стараюсь использовать один стиль программирования, конечно где языки это позволяют. Т.е. я хочу сказать, что есть общепризнанные вещи: параметры - это параметры, локальные переменные - это локальные переменные. Мне кажется, что хранимая процедура, написанная твоим способом, собъет с толку любого программера. Я не против применения и высказывания "хитрых" приемов, но, мне кажется, нужно аккуратнее предлагать "очень нестандартные" приемы, я бы даже сказал, что нестандарные приемы лучше предлагать только в тех случаях, когда стандартными не обойтись. Например, в данном случае, если бы в VFP был оператор LPARAMETER, а не было бы LOCAL, то твой способ был бы оправданным способом обойти это ограничение. Я думаю, что все это объясняет, почему так много высказываний было против твоего метода, а не просто желание поругать кого-нибудь, кто "подставился" Насчет проверки типа параметров, я очень даже зачастую вставляю в функции проверку параметров, а что делать, если VFP нетипизированный язык, и компилятор при сборке не проверяет типы, а возможность вызвать функцию не с "теми" данными всегда существует. Правда пользуюсь не TYPE(), а VARTYPE(), мне показалось,что она быстрее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2003, 18:56 |
|
||
|
Понимание операторов лисы
|
|||
|---|---|---|---|
|
#18+
При использованиии Delphi я так-же не применяю таких вольностей, правда, по причине того, что я его знаю значительно слабее, чем фокс, а что касается хранимых процедур, так там действительно не место для нестандартных стилей. Использовать один стиль или нет?, так конечно, практически любой программист будет пытаться использовать более удобные на его взгляд конструкции в рамках языка, тут и обсуждать нечего, что-же касается фокса, то свободы здесь предостаточно, и если свойства операторов позволяют использовать нестандартные или не совсем стандартные обороты, почему не попробовать? Предвижу массу возражений в этом моменте - скажу сразу: далеко не всегда такими вещами стоит пользоваться, вероятность неудачного применения второстепенных свойств операторов вкачестве основных много выше удачного, но в данном случае я считаю это удачной находкой, возражения, которые основываются только на том, что другие программисты так не привыкли для меня не являются убедительными. Если-бы все люди принимали-бы только общепринятые вещи, то, возможно, и землю-бы до сих пор считали-бы плоской. Другой пример - на сколько тяжел был переход бухгалтеров от счет к калькуляторам, все расчеты выполненные на калькуляторах перепроверялись на сетах. Попытайтесь обосновать справедливость такой проверки с сегодняшней точки зрения, или заставить кого-то из бухгалтеров вновь взять в руки счеты. Привыкайте, господа, иногда в жизни встречаются вещи не очень привычные, а иногда и совершенно нестандарные. На этом и стоит весь прогресс человечества. Общепризнанные вещи не есть раз и на всегда утвержденный стандарт, не подлежащий критике, сомнениям и экспериментам, и уж тем-более не подлежат для вечного использования как единственно возможный вариант. Что-же касается введения в заблуждение в данном конкретном случае, то при использовании раличных правил для построения имен переменных и имен параметров эффект заблуждения значительно ниже, чем, к примеру, после того, как один из параметров после очередной доработки функци перестал быть востребованным, но в строке объявления параметров остался. Вот тут вероятность заблуждения о необходимаости его подготовки для передачи в данную функцию несоизмеримо выше, а кроме того независимо от того, являются - ли переменные, описанные в строке параметров фактическими переменными или как в моем случае псевдопеременными, функцию PARAMETERS() еще никто не отменял и она по прежнему возвращает истинное количество переданных в функцию параметров. > нужно аккуратнее предлагать "очень нестандартные" приемы, Данный прием не является очень нестандартным. Здесь использовано стандартное свойство стандартного оператора,хоть и второстепенного. Применненная конструкция является просто непривычной для взгляда многих программистов, но не более того. >я бы даже сказал, что нестандарные приемы лучше предлагать только > в тех случаях, когда стандартными не обойтись. Совершенно не согласен. Использовать надо не стандартные вещи, а те от которых достигается больший эффект. > Например, в данном случае, если бы в VFP был оператор LPARAMETER, > а не было бы LOCAL, то твой способ был бы оправданным способом > обойти это ограничение. Было время, когда такого оператора в фоксе небыло, однако предложенная мной конструкция не спользовалась. Небыло LOCAL, использовали PRIVATE, небыло-бы PRIVATE, был-бы общепринятым стиль глобальных переменных, или они-бы вообще на фоксе бы не объявлялись, вместо объявления просто присваивали-бы им какое-то начальное значение и все. Я-же стою на том, что явно должны быть объявлены абсолютно все переменные, и против использования переменных глобальных, а вот как именно их объявить - дело другое. >все это объясняет, почему так много против твоего метода Я и говорю, сила привычки - большая сила, и ей подвержены практически все. Я-же просто иногда смотрю на свои привычки со стороны, и нахожу, что некоторые из них являются вредными..... > а что делать, если VFP нетипизированный язык К сожалению, да, в этом плане фокс предоставляет слишком большую свободу, и иногда с этой свободой нужно бороться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2003, 08:34 |
|
||
|
Понимание операторов лисы
|
|||
|---|---|---|---|
|
#18+
Yura не надо приплетать сюда "узость взглядов" и "консервативность". Единственная причина по которой Вы используете данный способ объявления переменных - это "а мне так нравится". Никакой другой причины я не вижу. Лично мне это НЕ нравится именно потому, что Вы навязываете команде несвойственные ей функции. (Намеренно грубое и некорректное сравнение - калькулятором гвозди забивать. А что? Твердый ведь! Значит можно!) Поскольку речь пошла о личных вкусах и предпочтениях, то дальнейшая дискуссия не имеет смысла. Нравится Вам так - да пожалуйста! Ваши проблемы! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2003, 11:49 |
|
||
|
|

start [/forum/topic.php?fid=41&fpage=402&tid=1597472]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
68ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
62ms |
get tp. blocked users: |
1ms |
| others: | 238ms |
| total: | 410ms |

| 0 / 0 |
