:: Visual Foxpro, Foxpro for DOS
Re: Функция проверки существования переменной
Simple777

Сообщений: 33855
Дата регистрации: 05.11.2006
of63
Блин. Когда писал "Я помню чудное мгновение", так и знал, что кто-то уже опередил!


Да даже "гений чистой красоты" Пушкину пришлось в кавычки брать, поскольку это выражение впервые придумал Жуковский, обозначив так жену царя Александра I. [sm128]



Исправлено 1 раз(а). Последнее : Simple777, 26.04.18 22:29
Ratings: 0 negative/0 positive
Re: Функция проверки существования переменной
Taran

Сообщений: 13626
Откуда: Красноярск
Дата регистрации: 16.01.2008
Нормальные то люди как считают и говорят?
- Покупаю тонну металла за штуку. Продаю за три. Вот так вот и живу на эти два процента.

По интеллекту гораздо... А от манагера мангала, до Чел си и....

(Давайте встанем. Сказал бы я... А? Иль скобку закрываю? Да.)
Ratings: 0 negative/0 positive
Re: Функция проверки существования переменной
of63

Сообщений: 25256
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
Почему в этих форумах не придумали такую шнягу, чтобы, каждое сообщение трэда относилось не только к самому треду, но и к другому, или из этих сообщений строились трэды, соответственные формату разделов форума (ведь мы сейчас в профильной ветке, но ассоциации увели куда-то в филоромантическую даль).

Ну, типа отделения веток (юзерами), вплоть до самоопределения... Наверное, социосети уже имеют эту возможность... Опять стартап прощелкан (

Олег выразил стихом
> Давайте встанем. Сказал бы я... А?
> Иль скобку закрываю? Да!

(внес правку - заменил точку в конце на акцент !)



Исправлено 1 раз(а). Последнее : of63, 26.04.18 22:41
Ratings: 0 negative/0 positive
Re: Функция проверки существования переменной
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
of63
Во так такое двойственное поведение можно достичь, не меняя интерфейса функции. Идея - в применении PRIVATE-переменной с хорошо уникальным именем. PRIVATE-переменная видна ниже в стеке всем процедурам. Уникальность - ее продетектируют только те функции, в которых вы намеренно примените ее имя.
Г*нокод в чистом виде. Уж извини...


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: Функция проверки существования переменной
of63

Сообщений: 25256
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
Igor Korolyov
of63
Во так такое двойственное поведение можно достичь, не меняя интерфейса функции. Идея - в применении PRIVATE-переменной с хорошо уникальным именем. PRIVATE-переменная видна ниже в стеке всем процедурам. Уникальность - ее продетектируют только те функции, в которых вы намеренно примените ее имя.
Г*нокод в чистом виде. Уж извини...

Уж извини, но собственный код, за 10-20 лет станет каловыми камнями, а не говнокодом. И даже он должен работать (и работает, кстати, по определению), пока современные матери не родят вундеркиндов-гениев программирования, и не перепашут к чертовой матери все то, что отцы их понаделали в этих каловых камнях, пля.
Ratings: 0 negative/0 positive
Re: Функция проверки существования переменной
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
Такой код отличается от "мамонтового навоза" тем, что является г*ном изначально.


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: Функция проверки существования переменной
of63

Сообщений: 25256
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
Все мы из говна мочевины вышли.

... Мой код работает, а твой? Не сомневаюсь, что тоже. Но вернусь к сообщению от без пяти минут 1 час ночи:
Во так такое двойственное поведение можно достичь, не меняя интерфейса функции. Идея - в применении PRIVATE-переменной с хорошо уникальным именем. PRIVATE-переменная видна ниже в стеке всем процедурам. Уникальность - ее продетектируют только те функции, в которых вы намеренно примените ее имя.
Г*нокод в чистом виде. Уж извини...

Вот думаю, оба кода работают, и наш(мой), и твой (кстати, не запомнил твою версию кода, напомни пож.?)... Один код у тебя говняной (наш), другой код есть хороший (твой). Покажи ТВОЙ аналог нашего когда, с нашей странной "уникальной переменной", но уже без нее, вероятно ) В интерфейс функции мы не влазим, не меняем его? Да?)
Ratings: 0 negative/0 positive
Re: Функция проверки существования переменной
akvvohinc

Сообщений: 4224
Откуда: Москва
Дата регистрации: 11.11.2008
Simple777
Да даже "гений чистой красоты" Пушкину пришлось в кавычки брать

В кавычки эта цитата не заключалась, ее набирали курсивом, что позже привело к современному "бесцитатному" варианту.
Ratings: 0 negative/0 positive
Re: Функция проверки существования переменной
Аспид

Сообщений: 3475
Откуда: Москва
Дата регистрации: 01.04.2005
of63
Готовое приложение и функция, вызывающаяся многократно из всех его подсистем.
Возникает необходимость, чтобы при вызовах из части подсистем функция отрабатывала иначе, а править все случаи (допустим, их 1000) лень.
Тогда вместо 1000 правок добавляется переменная лишь в головную программу подсистемы, требующей другого поведения функции.

...

Во так такое двойственное поведение можно достичь, не меняя интерфейса функции. Идея - в применении PRIVATE-переменной с хорошо уникальным именем. PRIVATE-переменная видна ниже в стеке всем процедурам. Уникальность - ее продетектируют только те функции, в которых вы намеренно примените ее имя.

* ...типичный код. Штатное поведение функции
? функция() && 1
* ...атипичный код. Особенное поведение функции
PRIVATE m.lksdljhsfhgdfkjhskdfj && переменная, наличие которой меняет поведение функции. "Случайность" имени достигнута случайными нажатиями на клавиши. Можно ее имя задефинить в общем INI файле...
m.lksdljhsfhgdfkjhskdfj = 1
? функция() && -1
FUNCTION функция
...
IF TYPE("m.lksdljhsfhgdfkjhskdfj")="U" && типичное поведение функции.
r = 1
ELSE && атипичное поведение функции. Можно и в значении условленной переменной что-то передать...
r = -1
ENDIF
RETURN r
ИМХО. Чем плохо. Через пол года, снова надо будет вызвать эту функцию с этим параметром. Замучаешься имя искать))) Скорее новое создашь, и еще одну вставку сделаешь)
Ну или
of63
RELEASE m.lksdljhsfhgdfkjhskdfj && уничтожим переменную для дальнейшего штатного поведения функции RELEASE m.lksdljhsfhgdfkjhskdfj && уничтожим переменную для дальнейшего штатного поведения функции
забудешь.
Хотя решается все элементарно. Добавляешь еще параметр, и проверяешь его существование.
При простом алгоритме, можно сделать функцию вызова старой функции, либо нового алгоритма.

В принципе то же что у тебя, только без внешних примочек.
FUNCTION функция
PARAMETERS старые_параметры, новый_параметр
...
IF TYPE("новый_параметр")="U" && типичное поведение функции.
r = 1
ELSE && атипичное поведение функции. Можно и в значении условленной переменной что-то передать...
r = -1
ENDIF
RETURN r
По поводу проверки существования.
У меня это часто. Все вызываемые из объекта, объекты, возвращают значения в один метод.
И там часто приходится проверять, откуда вернулось значение. Именно таким способом)


------------------
Ratings: 0 negative/0 positive
Re: Функция проверки существования переменной
Crispy

Сообщений: 18571
Дата регистрации: 16.05.2005
Как-то вообще никогда не было необходимости проверять существование переменной.
Возможно нужно при псевдослучайном именовании. Но само такое именование, на мой взгляд, не слишком хорошо. Всегда лучше знать - кого как зовут. ;) Это все равно что в паспортном столе тут же выдавать паспорта всем желающим, кто только заглянет и попросит.

Единственное, что приходится проверять - существование объекта с каким-то нормированным именем при создании его в классе. Недоработка, на мой взгляд, от создателей фокса. Могли бы дать возможность и молча, с указанием например доп.параметра, перезаписывать старый объект новым с таким же именем. Упростило бы в ряде случаев код.

Аспид
У меня это часто. Все вызываемые из объекта, объекты, возвращают значения в один метод.
И там часто приходится проверять, откуда вернулось значение. Именно таким способом)

Так проверять, откуда вернулось, можно же в принципе и проще. Если конечно я правильно понял о чем речь.


------------------
В действительности все иначе, чем на самом деле.
                                      (Антуан де Сент-Экзюпери)
Ratings: 0 negative/0 positive
Re: Функция проверки существования переменной
of63

Сообщений: 25256
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
Аспид,

1. С введением нового параметра в функцию - это понятно, но это не то о чем был спич. Именно имелось ввиду: НЕ МЕНЯЯ ИНТЕРФЕЙС ВЫЗОВА функции изменять ее поведение. Возникает, когда написано много кода с вызовами этой функции, и параметров у нее много, и влезать в код проги, добавляя/вставляя новый параметр в вызовы этой функции - бывает некомильфо...

2. В принципе то же что у тебя, только без внешних примочек.
FUNCTION функция
PARAMETERS старые_параметры, новый_параметр
...
IF TYPE("новый_параметр")="U" && типичное поведение функции.
r = 1
ELSE && атипичное поведение функции. Можно и в значении условленной переменной что-то передать...
r = -1
ENDIF
RETURN r

Есть много способов передавать необязательные параметры. В твоем примере я бы добавил PCOUNT():
IF PCOUNT()>=2 .AND. !ISNULL(новый_параметр) && атипичное поведение функции.

ISNULL() позволит добавить еще и 3й необязательный параметр, при том "опускать" передачу второго, задавая его значение NULL.

...Не рассматриваем ситуацию, когда надо передать параметр, и именно NULL...



Исправлено 1 раз(а). Последнее : of63, 27.04.18 08:33
Ratings: 0 negative/0 positive
Re: Функция проверки существования переменной
akvvohinc

Сообщений: 4224
Откуда: Москва
Дата регистрации: 11.11.2008
Аспид
Хотя решается все элементарно. Добавляешь еще параметр, и проверяешь его существование.
При простом алгоритме, можно сделать функцию вызова старой функции, либо нового алгоритма.

В принципе то же что у тебя, только без внешних примочек.

Совсем не то же самое.

В твоем варианте:
- во-первых, править придется все 100500 вызовов функции, где это требуется;
- во-вторых, в скорее, во-первых - как ты определишь, в каких случаях надо добавить этот новый аргумент при вызове функции? Ведь эта функция вызывается иначе не обязательно в той процедуре, в которой он определял переменную, а из любой процедуры, лежащей ниже в стеке вызовов:
1) Из процедуры C вызывается функция F.
2) При этом, если C вызывается из процедуры A (не обязательно напрямую), то функция F должна отработать иначе, чем когда C вызвана, минуя А.



Исправлено 4 раз(а). Последнее : akvvohinc, 27.04.18 08:57
Ratings: 0 negative/0 positive
Re: Функция проверки существования переменной
akvvohinc

Сообщений: 4224
Откуда: Москва
Дата регистрации: 11.11.2008
Crispy
Возможно нужно при псевдослучайном именовании.

Поясни примером, что ты имеешь в виду.
Ratings: 0 negative/0 positive
Re: Функция проверки существования переменной
Taran

Сообщений: 13626
Откуда: Красноярск
Дата регистрации: 16.01.2008
Crispy
Единственное, что приходится проверять - существование объекта с каким-то нормированным именем при создании его в классе. Недоработка, на мой взгляд, от создателей фокса. Могли бы дать возможность и молча, с указанием например доп.параметра, перезаписывать старый объект новым с таким же именем. Упростило бы в ряде случаев код.

Серьезные обвинения создателей.
И где прикажете указывать этот доп параметр?
И addobject() и newobect() содержит список параметров "произвольной" длины. Т.е. параметр на перезаписывание должен быть первым.
И в миллионе случаев, когда он не нужен, его все-равно пришлось бы указывать.
Так что не надо ля-ля. Все ровно сделано.
А ежели так уж хочется автоматом пересоздавать объект, то что мешает сделать свой метод, который бы удалял старый объект и создавал новый?
Не думаю что таких классов прям мульён. Да и в любом случае базовых классов то всего чуть-чуть.

P.S.
Упс, пардон. Пост писал в случае когда объект как свойство другого объекта.

Но в любом случае, CreateObject() также имеет список "неопределенной" длины. И лишний параметр в Init(), куда все они попадут - явно лишний.



Исправлено 1 раз(а). Последнее : Taran, 27.04.18 09:04
Ratings: 0 negative/0 positive
Re: Функция проверки существования переменной
lulgu

Сообщений: 1838
Дата регистрации: 30.11.2016
Аспид
Вы бы сначала хоть бы проверили свой код, прежде чем мериться.
У вас всегда возвращается одно значение.

of63
Чтобы избежать трудных имен переменных, можно использовать такую конструкцию:
LOCAL puParam1
PRIVATE puParam1
? функция()
и переменная исчезнет сама.

Найти применение флаг-переменной можно найти - к примеру, поставить ей в соответствии наличие флаг-файла, объекта.



Исправлено 1 раз(а). Последнее : lulgu, 27.04.18 10:12
Ratings: 2 negative/0 positive
Re: Функция проверки существования переменной
Crispy

Сообщений: 18571
Дата регистрации: 16.05.2005
akvvohinc
Crispy
Возможно нужно при псевдослучайном именовании.

Поясни примером, что ты имеешь в виду.

Ну скажем, когда именуют от балды. Если же имя имеет вполне конкретное значение, какой смысл проверять его существование. В крайнем случае, если сомневаешься, не употреблял ли ранее, можно глянуть через поиск в проекте при написании кода.


Taran
Серьезные обвинения создателей.
И где прикажете указывать этот доп параметр?
И addobject() и newobect() содержит список параметров "произвольной" длины. Т.е. параметр на перезаписывание должен быть первым.
И в миллионе случаев, когда он не нужен, его все-равно пришлось бы указывать.
Так что не надо ля-ля. Все ровно сделано.

Да разве ж это серьезные обвинения. \m/ Серьезных тоже можно при желании найти много. Но это не оно. [sm128]
А что недоделка - так это правда ж таки. Можно было бы и первым параметром сделать, ничего страшного. Можно было бы и SET для такого случая сделать, ну если уж так хочется по старинке. Тут ведь как. SET SAFETY OFF распространяется только на все старое, а на все подобное как бы уже нет. Оно и понятно в принципе.
А насчет нужности - вот что бы ты делал скажем без того же SET SAFETY?
Или тоже хотел бы за каждым разом не переписывать просто молча скажем тот же файл, а писать целую процедуру, только для одного того, чтобы она переписывала вместо старого файла новый? ;)
В этом отношении в FPD еще неплохо придумали с SET SAFETY. Тот же VBS в ряде функций не может переписать старый файл. Из-за чего нужно горлдитль огород. Оно правда как-то относительно недавно сослужило и хорошую службу. Есть такой вирус, подгружаясь в память почти мгновенно прописывает свое тело во все(!) html в системе в хвост файла в виде скрипта со своим же телом. И загрузка любого из них снова заражает систему. Как выяснилось из экспериментов, скрипт не может обрабатывать файлы с атрибутом "только чтение". Т.е. отличной защитой стало простое присвоение атрибута всем html (через ТС делает парой кликов) на данном компе, а их там море, причем ненужных, пользователь никогда ничего не создает, но с программами всякая ерунда абсолютно не нужная ставится, типа хелпы на всех языках, вплоть до мумбу-юмбу, тысячи файлов в итоге, и все с вложенной заразой становятся. Антивирусы с данным вирусом во многом слишком уж лояльны были, возможно он не творил ничего деструктивного, либо удаляли, а он заново возрождался блин из пепла, благодаря вот такой просто студенческой хитрости его создателей, воспользовавшихся дубизмом создателей языка html. Но простая невозможность уже скриптового языка переписать файл с атрибутом, оказалась решающей. Это все может не для данной ветки. но так, к слову. [sm128]


------------------
В действительности все иначе, чем на самом деле.
                                      (Антуан де Сент-Экзюпери)
Ratings: 0 negative/0 positive
Re: Функция проверки существования переменной
of63

Сообщений: 25256
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
> Чтобы избежать трудных имен переменных, можно использовать такую конструкцию:
LOCAL puParam1
PRIVATE puParam1
? функция()
и переменная исчезнет сама.[/quote]

Лулгу, ты не прав )
Ratings: 0 negative/1 positive
Re: Функция проверки существования переменной
lulgu

Сообщений: 1838
Дата регистрации: 30.11.2016
[quote of63]> Чтобы избежать трудных имен переменных, можно использовать такую конструкцию:
LOCAL puParam1
PRIVATE puParam1
? функция()
и переменная исчезнет сама.[/quote]

Лулгу, ты не прав )[/quote]

Лулгу всегда прав.
Команда Private не объявляет переменные, она скрывает объявленные переменные.
Ratings: 1 negative/0 positive
Re: Функция проверки существования переменной
Аспид

Сообщений: 3475
Откуда: Москва
Дата регистрации: 01.04.2005
akvvohinc Ей богу не понимаю!
akvvohinc
В твоем варианте:
- во-первых, править придется все 100500 вызовов функции, где это требуется;
С какой же стати?
Те вызовы что были раньше, так и будут работать как раньше!
Про второй случай, не очень понял. Ясно только что много старой логики рушится, и подходить надо тщателнЕЕ
of63
С введением нового параметра в функцию - это понятно, но это не то о чем был спич. Именно имелось ввиду: НЕ МЕНЯЯ ИНТЕРФЕЙС ВЫЗОВА функции изменять ее поведение
Неееее....))))
Это условие ты придумал)
С какой это стати не менять?
Crispy
Так проверять, откуда вернулось, можно же в принципе и проще. Если конечно я правильно понял о чем речь.
Есть базовые классы. Когда их вызывает кто то другой, они знают, что вернуть свои данные, надо в определенный метод вызвавшего объекта.

Есть некий объект Q. Ему понадобились данные из другого Z.
Он его создает, и передает ему ссылку на себя. После чего - отдыхает, ждет когда Z разрешится от бремени.
Z Возвращает в Q свои данные.
Проблема в том, что Q может вызвать 123 различных объекта.)
И ему надо знать, кто же вернул ему значения.
Вот часто и использую, уникальность возвращаемых свойств.


------------------
Ratings: 0 negative/0 positive
Re: Функция проверки существования переменной
lulgu

Сообщений: 1838
Дата регистрации: 30.11.2016
Аспид
Те вызовы что были раньше, так и будут работать как раньше!

Конечно, у вас ведь ничего не меняется от вашей переделки.
Типичная ошибка - вы проверяете параметр, а не переменную.
Ratings: 2 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 31 (Гостей: 31)

© 2000-2024 Fox Club 
Яндекс.Метрика