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

Скажите, кто знает, есть ли смысл в программе указывать сей префикс в операциях, присущих исключительно переменным, таким как, например, присвоение значения (=) или 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
21.01.2008, 13:18
    #35075749
CTAC-KO
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
По поводу префикса пемеренных m.
пеМЕРЕнных = пеРЕМЕных
...
Рейтинг: 0 / 0
21.01.2008, 13:26
    #35075780
прошелмимо
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
По поводу префикса пемеренных m.
авторускоряет/оптмизирует работу

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


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

....

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

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

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

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

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
24.01.2008, 05:24
    #35083555
Urri
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
По поводу префикса пемеренных m.
ВладимирМТ.е. в команде макроподстановки проблема не в префиксе, а в точке. Точнее, в особенностях работы самой команды макроподстановки. Использовать префикс можно, но такими способами

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

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

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

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

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

так, ради интереса ...
короткий пример,
а я покажу как без
...
Рейтинг: 0 / 0
24.01.2008, 16:22
    #35085540
Sergey Sizov.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
По поводу префикса пемеренных m.
не, без мп - никак! практически все это используют :)
Та шо ви бачите?! Кто бы мог подумать! И как это многие за много же лет обошлись без нее?!
Наверно, они что-то не так делают. :)
...
Рейтинг: 0 / 0
24.01.2008, 16:37
    #35085611
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
По поводу префикса пемеренных m.
CTAC-KOне, без мп - никак! практически все это используют :)
Поаккуратней на религиозные темы высказывайся, а то война начнется страниц на пять
...
Рейтинг: 0 / 0
24.01.2008, 16:41
    #35085621
Aleksey-K
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
По поводу префикса пемеренных m.
Sergey Sizov. не, без мп - никак! практически все это используют :)
Та шо ви бачите?! Кто бы мог подумать! И как это многие за много же лет обошлись без нее?!
Наверно, они что-то не так делают. :)
В принципе можно и без префикса переменной, но.. как только вы начинаете писать свое приложение с использованием классов, то без нее практически уже не обойтись. Открые курсоры и их поля, фактически, представляются как PUBLIC переменные в пределах своих DataSession и нет никакой гарантии, что где-то в методе вашего класса у нас переменная не совпадет с полем текущего курсора (таблицы).
С уважением, Алексей.
...
Рейтинг: 0 / 0
24.01.2008, 16:43
    #35085628
CTAC-KO
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
По поводу префикса пемеренных m.
да, ладно, давайте не будем обсуждать все используют мп или многие или только я :)
Лучше скажите - обязательно ли завершать точкой мп?
т.е.
Код: plaintext
WITH this.parent.&lcLenLabel
или
Код: plaintext
WITH this.parent.&lcLenLabel.
...
Рейтинг: 0 / 0
24.01.2008, 16:51
    #35085659
Sergey Sizov.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
По поводу префикса пемеренных m.
Она завершается точкой или пробелом. Ни то, ни другое читабельности ей не добавляет.
...
Рейтинг: 0 / 0
24.01.2008, 16:52
    #35085663
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
По поводу префикса пемеренных m.
Aleksey-K... нет никакой гарантии, что где-то в методе вашего класса у нас переменная не совпадет с полем текущего курсора (таблицы).
С уважением, Алексей.
При использовании венгерской нотации гарантия 100%. Сложнее защититься от использования одноименных курсоров.
Для переменных название строится [видимость][тип][название]
для полей таблицы и свойств объектов [тип][название]
где [видимость] - область видимости (g, p, t, l)
например:
lcName - локальная символьная переменная
cName - символьное поле из текущего алиаса.
никаких m. никогда не использую. Проблемы бывают иногда если в LOCAL локальную переменную добавить забуду.
...
Рейтинг: 0 / 0
24.01.2008, 16:54
    #35085672
Sergey Sizov.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
По поводу префикса пемеренных m.
Сложнее защититься от использования одноименных курсоров.
Сей проблем довольно неплохо решается сессиями данных. Но ими надо уметь пользоваться. :)
...
Рейтинг: 0 / 0
24.01.2008, 16:56
    #35085688
CTAC-KO
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
По поводу префикса пемеренных m.
прошелмимо авторбез мп - никак!
так, ради интереса ...
короткий пример,
а я покажу как безну давайте. это в любом случае - хорошо и полезно, чем меньше мп, тем надо понимать стабильнее прога?
знач намалевал я класс текстбокса. захотел чтоб ён мне символы считал...
кастомный метод 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
24.01.2008, 17:04
    #35085729
Sergey Sizov.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
По поводу префикса пемеренных m.
Ну как обычно! Вместо того, чтоб работать со ссылкой на объект, работаем с именем объекта.

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

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

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


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