powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / По поводу префикса пемеренных m.
25 сообщений из 48, страница 1 из 2
По поводу префикса пемеренных m.
    #35075746
CTAC-KO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет!

Скажите, кто знает, есть ли смысл в программе указывать сей префикс в операциях, присущих исключительно переменным, таким как, например, присвоение значения (=) или RELEASE?
Понятно что при ссылке на перменную указание префикса ускоряет/оптмизирует работу, а вот что по поводу вопроса, инетересно.
К примеру ясно что так выгоднее:
Код: plaintext
    lcRes = m.lcTextPart1 + LTRIM(m.lcTextPart2)
но есть ли смысл писать вот так (кроме, скажем, принципа там... красивости кода и тп):
Код: plaintext
1.
2.
    m.lcRes = m.lcTextPart1 + LTRIM(m.lcTextPart2)
    LOCAL m.lcRes, m.lcTextPart1, m.lcTextPart2
    RELEASE m.lcRes, m.lcTextPart1, m.lcTextPart2

спасибо!
...
Рейтинг: 0 / 0
По поводу префикса пемеренных m.
    #35075749
CTAC-KO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
пеМЕРЕнных = пеРЕМЕных
...
Рейтинг: 0 / 0
По поводу префикса пемеренных m.
    #35075780
прошелмимо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторускоряет/оптмизирует работу

откуда информация?


Специфрикатор "m." для переменных памяти используется только в тех случаях когда имя переменной совпадает с именем поля в таблице (при создании переменных командой SCATTER MEMVAR).

....

Cпецификатор «m.» перед именем переменной при присвоении значений перемен-ным и при сравнении значений переменных мы не используем. Спецификатор «m.» перед именем переменной мы используем только в тех случаях, когда имя переменной совпадает с именем поля в таблице и при создании переменных командой SCATTER MEMVAR (в старших версиях FoxPro имеется опция в команде Scatter, которая позволяет считывать зна-чения записи курсора в объект Empty, что дает возможность не использовать спецификатор «m.») . Данное соглашение призволит исключить случаи совпадения имен переменных и имен полей в таблицах и курсорах
...
Рейтинг: 0 / 0
По поводу префикса пемеренных m.
    #35075800
прошелмимо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
http://fox.wikis.com/wc.dll?Wiki~EssentialMDot~VFP
...
Рейтинг: 0 / 0
По поводу префикса пемеренных m.
    #35075804
CTAC-KO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну правильно, я так по памяти скажу, типа если указываешь в ссылке имя перменной, то фокса будет СНАЧАЛА искать поле в текущей бд с таким именем, а затем, еси не найдет, будет искать такую перменную. если ты сразу скажешь что это перменная, то и поиск в бд исключатеся = ускорение. вроде так...
...
Рейтинг: 0 / 0
По поводу префикса пемеренных m.
    #35075819
прошелмимо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну и + стандарт
http://www.craigberntson.com/Articles/kb015.htm
...
Рейтинг: 0 / 0
По поводу префикса пемеренных m.
    #35075824
CTAC-KO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
впрочем спасибо за ответ - в операциях, присущих исключительно переменным, идентификатор m. не нужен (он там, впрочем и не помешает само собой).
А вот в операциях с макроподстановкой так и вообще, как я заметил, идентификатор m. почему-то вреден для здоровья
...
Рейтинг: 0 / 0
По поводу префикса пемеренных m.
    #35075828
прошелмимо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
есть соглашение
по им-ю перем-х а есть соглашение по им-ю полей курсоров и таблиц

если придерживаться этих соглашений,
то именованных перем-х и полей не будет
...
Рейтинг: 0 / 0
По поводу префикса пемеренных m.
    #35076220
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Смысл правил не столько в самих правилах, сколько в экономии мышления. Не надо задумываться, а что это программист имел в виду в данном случае? Нет, решение, разумеется, будет найдено. Проблема только в том, что надо будет затратить дополнительные усилия для того, чтобы это решение найти.

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

Если же "здесь придерживаться, а здесь - нет", то возвращаемся к тому, с чего начали. Каждый раз придется затрачивать дополнительные усилия для понимания кода.

CTAC-KOА вот в операциях с макроподстановкой так и вообще, как я заметил, идентификатор m. почему-то вреден для здоровья
При использовании символа макроподстановки "&" первая точка после этого символа воспринимается как символ конкатенации (сложения) символьных строк. Т.е. сначала выполняется макроподстановка, потом к ее результату прибавляется то, что стоит после точки.

Например

Код: plaintext
1.
2.
3.
4.
5.
aa= 1 
aa1= 2 
bb="aa"
?&bb	&& вернет значение  1  из переменной aa
?&bb. 1 	&& вернет значение  2  из переменной aa1

Т.е. в команде макроподстановки проблема не в префиксе, а в точке. Точнее, в особенностях работы самой команды макроподстановки. Использовать префикс можно, но такими способами

Код: plaintext
1.
2.
3.
4.
?m.&bb
?m.&bb. 1 
?evaluate(m.bb)
?evaluate(m.bb+"1")
...
Рейтинг: 0 / 0
По поводу префикса пемеренных m.
    #35083555
Urri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВладимирМТ.е. в команде макроподстановки проблема не в префиксе, а в точке. Точнее, в особенностях работы самой команды макроподстановки. Использовать префикс можно, но такими способами

Код: plaintext
1.
2.
3.
4.
?m.&bb
?m.&bb. 1 
?evaluate(m.bb)
?evaluate(m.bb+"1")
Ну и еще точка заменяема на "->"
Т.е. можно вот так:
Код: plaintext
?&m->myvar
...
Рейтинг: 0 / 0
По поводу префикса пемеренных m.
    #35084164
CTAC-KO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ага, вот как! Спасибо, буду знать!

я уже заметил что именно первую точку после & фокс обычно "съедает", когда обращался к свойствам/методам объектов через макро. Однако у меня все получилось, когда я перед точкой ставил пробел, т.е.:
(oListBox = SomeListBox)

пробовал безуспешно и с немалым удивлением :)
thisform.&oListBox.Init - не канает, т.к. на выходе получицо thisform.SomeListBoxInit

так сейчас у меня:
thisform.&oListBox .Init - проканает, т.к. на выходе получицо thisform.SomeListBox.Init

а вот так, видимо, будет правильнее (я уже такое видел, но не понял зачем там 2 точки)?
thisform.&oListBox..Init - на выходе получицо thisform.SomeListBox.Init
...
Рейтинг: 0 / 0
По поводу префикса пемеренных m.
    #35084222
Sergey Sizov.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
(я уже такое видел, но не понял зачем там 2 точки)?
thisform.&oListBox..Init - на выходе получицо thisform.SomeListBox.Init
Первая точка завершает макоподстановку, вторая должна тут быть по месту.
А лучше не заниматься всеми этими извращениями и хорошенько продумывать свои проги.
...
Рейтинг: 0 / 0
По поводу префикса пемеренных m.
    #35085446
CTAC-KO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не, без мп - никак! практически все это используют :)
...
Рейтинг: 0 / 0
По поводу префикса пемеренных m.
    #35085469
прошелмимо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторбез мп - никак!

так, ради интереса ...
короткий пример,
а я покажу как без
...
Рейтинг: 0 / 0
По поводу префикса пемеренных m.
    #35085540
Sergey Sizov.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
не, без мп - никак! практически все это используют :)
Та шо ви бачите?! Кто бы мог подумать! И как это многие за много же лет обошлись без нее?!
Наверно, они что-то не так делают. :)
...
Рейтинг: 0 / 0
По поводу префикса пемеренных m.
    #35085611
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CTAC-KOне, без мп - никак! практически все это используют :)
Поаккуратней на религиозные темы высказывайся, а то война начнется страниц на пять
...
Рейтинг: 0 / 0
По поводу префикса пемеренных m.
    #35085621
Фотография Aleksey-K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey Sizov. не, без мп - никак! практически все это используют :)
Та шо ви бачите?! Кто бы мог подумать! И как это многие за много же лет обошлись без нее?!
Наверно, они что-то не так делают. :)
В принципе можно и без префикса переменной, но.. как только вы начинаете писать свое приложение с использованием классов, то без нее практически уже не обойтись. Открые курсоры и их поля, фактически, представляются как PUBLIC переменные в пределах своих DataSession и нет никакой гарантии, что где-то в методе вашего класса у нас переменная не совпадет с полем текущего курсора (таблицы).
С уважением, Алексей.
...
Рейтинг: 0 / 0
По поводу префикса пемеренных m.
    #35085628
CTAC-KO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да, ладно, давайте не будем обсуждать все используют мп или многие или только я :)
Лучше скажите - обязательно ли завершать точкой мп?
т.е.
Код: plaintext
WITH this.parent.&lcLenLabel
или
Код: plaintext
WITH this.parent.&lcLenLabel.
...
Рейтинг: 0 / 0
По поводу префикса пемеренных m.
    #35085659
Sergey Sizov.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Она завершается точкой или пробелом. Ни то, ни другое читабельности ей не добавляет.
...
Рейтинг: 0 / 0
По поводу префикса пемеренных m.
    #35085663
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aleksey-K... нет никакой гарантии, что где-то в методе вашего класса у нас переменная не совпадет с полем текущего курсора (таблицы).
С уважением, Алексей.
При использовании венгерской нотации гарантия 100%. Сложнее защититься от использования одноименных курсоров.
Для переменных название строится [видимость][тип][название]
для полей таблицы и свойств объектов [тип][название]
где [видимость] - область видимости (g, p, t, l)
например:
lcName - локальная символьная переменная
cName - символьное поле из текущего алиаса.
никаких m. никогда не использую. Проблемы бывают иногда если в LOCAL локальную переменную добавить забуду.
...
Рейтинг: 0 / 0
По поводу префикса пемеренных m.
    #35085672
Sergey Sizov.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сложнее защититься от использования одноименных курсоров.
Сей проблем довольно неплохо решается сессиями данных. Но ими надо уметь пользоваться. :)
...
Рейтинг: 0 / 0
По поводу префикса пемеренных m.
    #35085688
CTAC-KO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
прошелмимо авторбез мп - никак!
так, ради интереса ...
короткий пример,
а я покажу как безну давайте. это в любом случае - хорошо и полезно, чем меньше мп, тем надо понимать стабильнее прога?
знач намалевал я класс текстбокса. захотел чтоб ён мне символы считал...
кастомный метод CharsCount
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
LPARAMETERS m.llHide
IF NOT (VARTYPE(this.Value)="C" AND this.MaxLength> 0 ) OR this.ReadOnly
   RETURN .F.
ENDIF

* àâòîïåðåõîä íà äðóãîå ïîëå ïðè äîñòèæåíèè MaxLength
IF EMPTY(this.WasSetConfirm)
   this.Wassetconfirm = SET("CONFIRM")
   SET CONFIRM ON
ENDIF

* 2hide or not2hide da counter
IF VARTYPE(m.llHide) = "U"
   m.llHide = .F.
ENDIF

LOCAL m.lcLenLabel, m.lnWidth, m.lcWasSet
lcLenLabel = this.Parent.Name + this.Name + "LenLabel"
IF m.llHide
   IF VARTYPE(this.parent.&lcLenLabel)="O"
      this.parent.&lcLenLabel..Visible = .F.
      * àâòîïåðåõîä íà äðóãîå ïîëå ïðè äîñòèæåíèè MaxLength
      IF !EMPTY(this.WasSetConfirm)
         lcWasSet = this.WasSetConfirm
         SET CONFIRM &lcWasSet
         this.Wassetconfirm = ""
      ENDIF
   ENDIF
ELSE
   IF VARTYPE(this.parent.&lcLenLabel)#"O"
      this.parent.AddObject(m.lcLenLabel,"Label")
      WITH this.parent.&lcLenLabel
         .Left = this.Left+ 5 
         .Top = this.top- 5 
         .BackStyle =  1 
         .FontSize =  6 
      ENDWITH
   ENDIF
   WITH this.parent.&lcLenLabel
      .Caption = IIF(this.MaxLength> 0 ,LTRIM(STR(LEN(RTRIM(this.value))))+" / "+LTRIM(STR(this.MaxLength)),"")
      .Visible = .T.
      .AutoSize =  1 
      m.lnWidth = .Width
      .AutoSize =  0 
      .Width = m.lnWidth
      .Height =  9 
      .Refresh
   ENDWITH
ENDIF
RELEASE m.lcLenLabel, m.lnWidth, m.lcWasSet
он вызываеццо с GotFocus
Код: plaintext
1.
* Ñ÷åò÷èê ñèìâîëîâ
this.CharsCount()

и с LostFocus
Код: plaintext
1.
* Ñ÷åò÷åã ñèìâîëîâ
this.Charscount(.T.)
...
Рейтинг: 0 / 0
По поводу префикса пемеренных m.
    #35085729
Sergey Sizov.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну как обычно! Вместо того, чтоб работать со ссылкой на объект, работаем с именем объекта.

Код: plaintext
MyLabel = eval(this.Parent.Name + this.Name + "LenLabel")
И дальше вместо this.parent.&lcLenLabel использовать MyLabel.

Это первое и, скажем так, достаточно общее решение.
Но у меня есть подозрения, что это всего лишь this.LenLabel
Угадал?
...
Рейтинг: 0 / 0
По поводу префикса пемеренных m.
    #35085741
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CTAC-KO...
знач намалевал я класс текстбокса. захотел чтоб ён мне символы считал...

Да уж, точно намалевал
...
Рейтинг: 0 / 0
По поводу префикса пемеренных m.
    #35085751
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если к TextBox привязан Label, то надо их собирать в класс-контейнер. Как понимаю у тебя еще есть жесткие правила именования объектов чтобы они правильно меж собой взаимодействовали?
...
Рейтинг: 0 / 0
25 сообщений из 48, страница 1 из 2
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / По поводу префикса пемеренных m.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]