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

Сообщений: 75
Дата регистрации: 30.10.2009
Уважаемые знатоки! Заранее извиняюсь за вопрос ...
Подскажите пожалуста функцию проверки существования переменой.
==================
С уважением!
Ratings: 0 negative/0 positive
Re: Функция проверки существования переменной
PaulWist

Сообщений: 14601
Дата регистрации: 01.04.2004
?TYPE('asdff')


------------------
Есть многое на свете, друг Горацио...
Что и не снилось нашим мудрецам.
(В.Шекспир Гамлет)
Ratings: 0 negative/0 positive
Re: Функция проверки существования переменной
novik
Автор

Сообщений: 75
Дата регистрации: 30.10.2009
Спасибо Большое! )
Ratings: 0 negative/0 positive
Re: Функция проверки существования переменной
akvvohinc

Сообщений: 4203
Откуда: Москва
Дата регистрации: 11.11.2008
Непонятный вопрос, непонятный ответ...

Лучше бы озвучили решаемую проблему.



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

Сообщений: 33855
Дата регистрации: 05.11.2006
Судя по ответу "Спасибо Большое", ответ устроил.

Хотя было нелишне спрашивающему знать, что у переменных есть разные области видимости.
Ratings: 0 negative/0 positive
Re: Функция проверки существования переменной
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
И что кроме переменных есть поля в текущей рабочей области, которые тоже вполне себе доступны "просто по имени", в том числе и для функции TYPE. Да и то что функция TYPE в большинстве простых случаев (когда аргумент только простое имя содержит) заменяется на функцию VARTYPE - более быструю/эффективную, и не требующую кавычек вокруг имени переменной/поля...


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

Сообщений: 851
Откуда: Москва
Дата регистрации: 28.09.2000
Так не лучше?

? VARTYPE(m.test)
Ratings: 0 negative/0 positive
Re: Функция проверки существования переменной
Simple777

Сообщений: 33855
Дата регистрации: 05.11.2006
Еще не факт, что ТС имел в виду VFP. В FPD такой функции вообще нету
Ratings: 0 negative/0 positive
Re: Функция проверки существования переменной
akvvohinc

Сообщений: 4203
Откуда: Москва
Дата регистрации: 11.11.2008
TAS
Так не лучше?

Здесь интереснее другое - по какой причине появляется необходимость в таких действиях?

На моей памяти узнать, есть ли в текущем месте кода переменная с некоторым именем, требовалось лишь из-за лени программистов.
Например, в уже готовом приложении некоторая функция вызывалась множество раз из множества мест. Но вдруг появляется необходимость в дополнительном параметре, и это "новое поведение" функции требуется лишь в нескольких случаях из того множества вызовов.

По-хорошему нужно добавить параметр в функцию, найти и поправить все 100500 строк ее вызовов. Но "хитрые" люди поступают иначе - вместо прямой передачи параметра и выполнения рутинной работы по правке всех вызовов определяют некоторую нелокальную переменную с уникальным именем в тех нескольких местах, при вызове из которых функция должна отработать иначе, чем в остальных. А в теле функции проверяется наличие этой переменной как имитации передачи нового параметра.

Пока с другими причинами использования TYPE() или VARTYPE() не по прямому назначению сталкиваться не приходилось.
Ratings: 0 negative/0 positive
Re: Функция проверки существования переменной
lulgu

Сообщений: 1838
Дата регистрации: 30.11.2016
akvvohinc
TAS
Так не лучше?

Здесь интереснее другое - по какой причине появляется необходимость в таких действиях?

На моей памяти узнать, есть ли в текущем месте кода переменная с некоторым именем, требовалось лишь из-за лени программистов.
Например, в уже готовом приложении некоторая функция вызывалась множество раз из множества мест. Но вдруг появляется необходимость в дополнительном параметре, и это "новое поведение" функции требуется лишь в нескольких случаях из того множества вызовов.

По-хорошему нужно добавить параметр в функцию, найти и поправить все 100500 строк ее вызовов. Но "хитрые" люди поступают иначе - вместо прямой передачи параметра и выполнения рутинной работы по правке всех вызовов определяют некоторую нелокальную переменную с уникальным именем в тех нескольких местах, при вызове из которых функция должна отработать иначе, чем в остальных. А в теле функции проверяется наличие этой переменной как имитации передачи нового параметра.

Пока с другими причинами использования TYPE() или VARTYPE() не по прямому назначению сталкиваться не приходилось.

Но это ведь еще один способ передачи параметра в функцию.

Почему-то издревна считается, что параметры обязательно должны передаваться через LPARAMETERS, а возвращаться через RETURN или по ссылке.
Но это не так.

RS. Если не ошибаюсь, проверка существования переменной выглядит немного иначе:
? VARTYPE(goParam) != 'U'
Ratings: 0 negative/0 positive
Re: Функция проверки существования переменной
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
akvvohinc
По-хорошему нужно добавить параметр в функцию, найти и поправить все 100500 строк ее вызовов.
Совсем не обязательно. PCOUNT и те же TYPE/VARTYPE позволяют без проблем организовать "необязательный" параметр, и не менять вообще ничего в старом вызывающем коде.


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

Сообщений: 4203
Откуда: Москва
Дата регистрации: 11.11.2008
lulgu
Но это ведь еще один способ передачи параметра в функцию.
Почему-то издревна считается, что параметры обязательно должны передаваться через LPARAMETERS, а возвращаться через RETURN или по ссылке.
Но это не так.

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

А вот строить алгоритм, основанный на самом факте наличия/отсутствия переменной, мне представляется совсем не комильфо.
Ratings: 0 negative/0 positive
Re: Функция проверки существования переменной
akvvohinc

Сообщений: 4203
Откуда: Москва
Дата регистрации: 11.11.2008
Igor Korolyov
Совсем не обязательно. PCOUNT и те же TYPE/VARTYPE позволяют без проблем организовать "необязательный" параметр, и не менять вообще ничего в старом вызывающем коде.
Скорее всего я уже забыл детали и привел некорректный пример, но смысл я передал, думаю, правильно.

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

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



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

Сообщений: 13623
Откуда: Красноярск
Дата регистрации: 16.01.2008
Че развели-то опять?
Человек спросил, второй ответил. Тихо, скромно.
Три поста. Все довольны.

Или вам писюны жмут и охота меряться?
На данном этапе вопрошающему достаточно первого ответа.
А вам?
Ratings: 0 negative/0 positive
Re: Функция проверки существования переменной
akvvohinc

Сообщений: 4203
Откуда: Москва
Дата регистрации: 11.11.2008
Человек спросил, как пишется КОРОВА, ему ответили, но кому это интересно?
А вот порассуждать о животноводстве...
Ratings: 0 negative/1 positive
Re: Функция проверки существования переменной
of63

Сообщений: 25161
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
akvvohinc
Igor Korolyov
Совсем не обязательно. PCOUNT и те же TYPE/VARTYPE позволяют без проблем организовать "необязательный" параметр, и не менять вообще ничего в старом вызывающем коде.
Скорее всего я уже забыл детали и привел некорректный пример, но смысл я передал, думаю, правильно.

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

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

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

* ...типичный код. Штатное поведение функции
? функция() && 1
* ...атипичный код. Особенное поведение функции
PRIVATE m.lksdljhsfhgdfkjhskdfj && переменная, наличие которой меняет поведение функции. "Случайность" имени достигнута случайными нажатиями на клавиши. Можно ее имя задефинить в общем INI файле...
m.lksdljhsfhgdfkjhskdfj = 1
? функция() && -1
RELEASE m.lksdljhsfhgdfkjhskdfj && уничтожим переменную для дальнейшего штатного поведения функции
FUNCTION функция
...
IF TYPE("m.lksdljhsfhgdfkjhskdfj")="U" && типичное поведение функции.
r = 1
ELSE && атипичное поведение функции. Можно и в значении условленной переменной что-то передать...
r = -1
ENDIF
RETURN r
Ratings: 0 negative/0 positive
Re: Функция проверки существования переменной
akvvohinc

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

Ну так я именно об этом варианте и написал.
Ratings: 0 negative/0 positive
Re: Функция проверки существования переменной
Taran

Сообщений: 13623
Откуда: Красноярск
Дата регистрации: 16.01.2008
Офигеть. -xxx-. Как трудно с вами. И ведь действительно нужна прослойка манагеров, постановщиков и пр. шелухи.

А я еще тему хотел сегодня поднять. Почему 1С ник стоит дороже всех? Да потому что это не программист в чистом виде, а иносказатель/интерпретатор хотелок.

И он стоит дороже всех программистов....


p.s.
Упс, пардон.



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

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

Доб. Или переводчиков хотелок юзера в язык заданий прогеру? ...Хз, испорченный телефон получится, скорее всего... Хотя, если изобретать ИИ, то, наверное, да, чтобы мильен прогеровскоординировать, надо ставить десятника, сотника, темника, тысячника и т.п. Хотя опять же, должна родиться {гениальная личность, гениальная идея}, типа Эйнштейна, а не 100 манагеров...



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

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

Ну так я именно об этом варианте и написал.

Блин. Когда писал "Я помню чудное мгновение", так и знал, что кто-то уже опередил!
Ratings: 0 negative/0 positive


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

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

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