powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / переменные Local, Public, Private!
6 сообщений из 6, страница 1 из 1
переменные Local, Public, Private!
    #34806626
Фотография Alan_Aushev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Какая разница между переменными Local, Public, Private? Если есть вариант показать на примерах!Для сравнения!
Спасибо.
...
Рейтинг: 0 / 0
переменные Local, Public, Private!
    #34806756
Urri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пример:
Код: 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.
public a
? a
private b
? b
local c
? c

a= 1 
b= 2 
c= 3 
? a
? b
? c
do xx
? a
? b
? c
? d
? e
? f

proc xx
? a
? b
? c
a= 11 
b= 12 
c= 13  -- неявное объявление - какой тип?
private d
public e
local f
d= 4 
e= 5 
f=  6 
? a
? b
? c
? d
? e
? f


________
Не дадим распространиться заразе политкорректности!
...
Рейтинг: 0 / 0
переменные Local, Public, Private!
    #34806879
прошелмимо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор
1.1 Использование переменных памяти
Локальные, приватные и глобальные переменные мы объявляем всегда явно.
При разработке … использовали PRIVATE ALL LIKE P* сокращение, когда была потребность в private переменных. При этом теряется быстродействие выполнения кода. При дальнейших разработках и доработках мы будем избегаем этой практики.
Специфрикатор "m." для переменных памяти используется только в тех случаях когда имя переменной совпадает с именем поля в таблице (при создании переменных командой SCATTER MEMVAR).
1.1.1 Глобальные переменные
При реализации дальнейших доработок мы не используем глобальных переменных, т.к. это нарушает принцип инкапсуляции. В ситуациях, когда без глобальной переменной нельзя обойтись, мы будем использовать принципы ООП и создавать объекты на основании базовых классов. Например необходим доступ к «глобальному» атрибуту – настройке во всех формах и процедурах приложения, для реализации этого мы добавляем custom property в объект расположенный на глобальном уровне приложения.
Можно сказать что есть только 2 случая законного использования глобальных переменных:
- объект расположенный на глобальном уровне приложения ;
- глобальный "hook" объект.
Одно из основных использований конструктивного шаблона OOP "hook" - это описание характера поведения(режима), которое будет "hooked" с другим объектом. Часто, много объектов должны быть сцеплены("hooked") с отдельным hook-объектом. Мы видим, что вполне возможно создание одного глобального hook-объекта для общего использования другими объектами/управлениями.
1.1.2 Закрытый (private) переменные
Т.к. … эволюционировал и разрабатывался на ранних версиях Visual Foxpro, группа разработчиков активно использовала переменные данного типа. Также разработчики использовали неявное объявление переменных, что привело к сложностям и коллизиям при сопровождении ПО, при реализации последующих доработок.
При сопровождении ПО и доработках мы private переменные также не используем, т.к. они слабо отражают суть объектного программирования. Единственное исключение, технический прием по получению значения из форм основанных на VCX. Но даже в этом случае можно избежать применения private переменных путем прямого считывания значения свойств объекта (формы) в вызывающей процедуре.
1.1.3 Локальные переменные
Мы используем только локальные переменные в процедурах и функциях, для процедурных библиотек и в методах объектов, а для передачи параметров мы используем lParameters.
1.2 Именование переменных
При формировании имени переменной мы используем «венгерский стандарт».
Наше основное соглашение состоит в том, что все имена переменных начинаются с общей приставки из 2–х символов. При присвоении переменным имен мы используем следующий рекомендуемый формат:
[Видимость][Тип]VariableName
Первый символ определяет область действия, второй символ определяет тип данных
Рекомендованные коды приведены в таблицах ниже по тексту. Имя переменной должно как можно точнее характеризовать назначение переменной. Рекомендуется коды вводить в нижнем регистре, а значимые (составные) слова в имени переменной должны начинаться с верхнего регистра (принцип смешанной записи). При возможности не делать сокращений.
Все префиксы вводятся маленькими буквами.
Префиксы, соответствующие областям видимости переменных в VFP
Префикс Область видимости
L Local (локальная)
P Private (Частная)
G Global (Глобальная)
Дополнительные модификаторы входящих параметров функций для режима передачи по ссылке.
V Private по ссылке
T Local по ссылке
Дополнительные префиксы, соответствующие областям видимости свойств в VFP
Префикс Область видимости
H Hidden (скрытая)
P Protected (Частная)
G Public (Глобальная)
Префиксы, соответствующие типам переменных в VFP
Префикс Тип данных
A Array (Массив)
C Character, Varchar, Varchar (Binary) (символьный)
L Logical(логический)
N Numeric (числовой)
Y Currency (денежный)
I Integer (целые знаковые числа)
D Date (Дата)
T DateTime (ДатаВремя)
B Double
O Object (объект, в том числе и OLE объект)
f Float
q Varbinary, Blob (бинарный)
U Тип данных неопределён, т.е. может меняться по ходу программы

Ниже приводиться пример именования переменных сформированных по приведенным выше принципам:
lcFirstName – локальная переменная символьного типа
lnSum - локальная переменная числового типа
laTmpArray - локальный массив

tdBeginDate – переданный параметром извне параметр типа «дата»
taArrayRowProp – переданный параметром извне массив

.hlOldValue – скрытое свойство – тип логический (имя свойства всегда предваряется либо символом точка, либо ключевыми словами THIS, THISFORM, именем объекта)
При именовании свойств объектов допускается не делать предварительного префикса областям видимости у Public (Глобальная) свойств.
При именовании свойств объектов допускается не делать префиксов у свойств, смысл действия которых, полностью совпадает с аналогичным стандартным свойством Visual FoxPro объекта. Например: ReadOnly, ToolTip, StatusBarText, Value …

Объявление группы переменных директивой LOCAL должно быть помещено в начало исполняемого блока.
Cпецификатор «m.» перед именем переменной при присвоении значений переменным и при сравнении значений переменных мы не используем. Спецификатор «m.» перед именем переменной мы используем только в тех случаях, когда имя переменной совпадает с именем поля в таблице и при создании переменных командой SCATTER MEMVAR (в старших версиях FoxPro имеется опция в команде Scatter, которая позволяет считывать значения записи курсора в объект Empty, что дает возможность не использовать спецификатор «m.») . Данное соглашение призволит исключить случаи совпадения имен переменных и имен полей в таблицах и курсорах.
...
Рейтинг: 0 / 0
переменные Local, Public, Private!
    #34807187
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Александр, Вы хоть авторов-то цитаты указывайте. Буду знать что НЕ рекомендовать для чтения Вполне возможно полностью текст имеет смысл, но в приведенном Вами виде в свете собственно вопроса - это полная бессмыслица.

Alan_Aushev

Вообще-то, подробное описание с примерами есть в HELP по FoxPro. Для каждого типа.

Доступ к переменным памяти

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

По умолчанию, если область видимости переменной не объявлена явно, то любая вновь созданная переменная имеет область видимости PRIVATE. Это значит, что такая переменная будет видна в той процедуре в которой она была создана (созданием является присвоение ей значения) и во всех процедурах вызванных из данной.

При этом, команда PRIVATE не создает новых переменных, а лишь скрывает (прячет) ранее созданные переменные с тем же именем в текущем контексте. По сути, одновременно может существовать несколько одноименных переменных с областью видимости PRIVATE, "вложенных" друг в друга. Как матрешки.

Пример приведен в справке по команде PRIVATE

Команда PRIVATE

Команда LOCAL явно создает переменные памяти. При этом, по умолчанию, все вновь созданные переменные получают значение .F.

Переменные с областью видимости LOCAL видны только и исключительно в той процедуре, где они были объявлены.

Команда LOCAL

Команда PUBLIC также явно создает переменные памяти. При этом, по умолчанию, все вновь созданные переменные получают значение .F.

Переменные с областью видимости PUBLIC видны из любого места приложения с момента их создания.

По возможности, следует избегать создания переменных с областью видимости PUBLIC, поскольку это потенциальный источник трудно отлавливаемых ошибок. Объявили переменную в одном месте, изменили ее значение в другом, а использовали в третьем. Пойди узнай, кто из них "виноват", что программа работает "криво"?

PUBLIC, команда
...
Рейтинг: 0 / 0
переменные Local, Public, Private!
    #34807758
прошелмимо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Alan_Aushev

В старших версиях фокспро:
-cтарайтесь не использовать паблик и приват переменных.
-по-возможности используйте локальные переменные.
-явно объявляйте и явно передавайте переменные
-явно прнимайте переменные в параметры командой Lparameters
-cпецификатор 'm.' используйте если Вы явно уверены в существовании
в курсоре также именованного поля (правильное именование исключает совпадения)

если Вам необходимы примеры,
в которых будет показано, как создавать классы
и строить приложения с использованием принципов ООП, то задавайте вопросы
...
Рейтинг: 0 / 0
переменные Local, Public, Private!
    #34814665
Фотография Alan_Aushev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем спасибо. постараюсь переварить всю эту кухню!!!
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / переменные Local, Public, Private!
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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