for flooders
:: Главная :: Решения :: Статьи :: Сайт М. Дроздова :: Файловый архив :: Книга по VFP 9 :: Русский Help Online :: OFF-LINE Форум
   Л и с о в о д ы   в с е х   с т р а н,  о б ъ е д и н я й т е с ь !!!  

Список Форумов  :: Visual Foxpro, Foxpro for DOS
   :: Помощь сайту :: 

Функция проверки существования переменной
novik
Автор

Сообщений: 44
Дата: 25.04.18 17:04:12ОтветитьЦитировать
Уважаемые знатоки! Заранее извиняюсь за вопрос ...
Подскажите пожалуста функцию проверки существования переменой.
==================
С уважением!
Ratings: 0 negative/0 positive

Re: Функция проверки существования переменной
PaulWist

Сообщений: 12913
Дата: 25.04.18 17:17:05ОтветитьЦитировать
?TYPE('asdff')


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

Re: Функция проверки существования переменной
novik
Автор

Сообщений: 44
Дата: 25.04.18 17:23:52ОтветитьЦитировать
Спасибо Большое! )
Ratings: 0 negative/0 positive

Re: Функция проверки существования переменной
akvvohinc

Сообщений: 2783
Откуда: Москва
Дата: 25.04.18 19:57:16ОтветитьЦитировать
Непонятный вопрос, непонятный ответ...

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



Исправлено: akvvohinc, 25.04.18 20:03
Ratings: 0 negative/1 positive

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

Сообщений: 19313
Дата: 25.04.18 20:30:56ОтветитьЦитировать
Судя по ответу "Спасибо Большое", ответ устроил.

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

Re: Функция проверки существования переменной
Igor Korolyov

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


------------------
WBR, Igor
Ratings: 0 negative/0 positive

Re: Функция проверки существования переменной
TAS

Сообщений: 804
Откуда: Москва
Дата: 26.04.18 10:26:39ОтветитьЦитировать
Так не лучше?

? VARTYPE(m.test)
Ratings: 0 negative/0 positive

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

Сообщений: 19313
Дата: 26.04.18 10:29:19ОтветитьЦитировать
Еще не факт, что ТС имел в виду VFP. В FPD такой функции вообще нету
Ratings: 0 negative/0 positive

Re: Функция проверки существования переменной
akvvohinc

Сообщений: 2783
Откуда: Москва
Дата: 26.04.18 15:07:08ОтветитьЦитировать
TAS
Так не лучше?

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

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

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

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

Re: Функция проверки существования переменной
lulgu

Сообщений: 530
Дата: 26.04.18 17:27:50ОтветитьЦитировать
akvvohinc
TAS
Так не лучше?

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

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

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

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

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

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

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

Re: Функция проверки существования переменной
Igor Korolyov

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


------------------
WBR, Igor
Ratings: 0 negative/0 positive

Re: Функция проверки существования переменной
akvvohinc

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

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

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

Re: Функция проверки существования переменной
akvvohinc

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

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

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



Исправлено: akvvohinc, 26.04.18 19:17
Ratings: 0 negative/0 positive

Re: Функция проверки существования переменной
Taran

Сообщений: 7462
Откуда: Красноярск
Дата: 26.04.18 19:19:06ОтветитьЦитировать
Че развели-то опять?
Человек спросил, второй ответил. Тихо, скромно.
Три поста. Все довольны.

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

Re: Функция проверки существования переменной
akvvohinc

Сообщений: 2783
Откуда: Москва
Дата: 26.04.18 19:22:02ОтветитьЦитировать
Человек спросил, как пишется КОРОВА, ему ответили, но кому это интересно?
А вот порассуждать о животноводстве...
Ratings: 0 negative/1 positive

Re: Функция проверки существования переменной
of63

Сообщений: 11279
Откуда: Н.Новгород
Дата: 26.04.18 21:29:33ОтветитьЦитировать
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

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

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

Re: Функция проверки существования переменной
Taran

Сообщений: 7462
Откуда: Красноярск
Дата: 26.04.18 22:07:58ОтветитьЦитировать
Офигеть. -xxx-. Как трудно с вами. И ведь действительно нужна прослойка манагеров, постановщиков и пр. шелухи.

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

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


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



Исправлено: Taran, 29.04.18 20:50
Ratings: 0 negative/0 positive

Re: Функция проверки существования переменной
of63

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

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



Исправлено: of63, 26.04.18 22:17
Ratings: 0 negative/0 positive

Re: Функция проверки существования переменной
of63

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

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

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



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

On-line: 44 Taran Божья_коровка Simple777 sphinx Crispy  and Guests: 39


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