:: Visual Foxpro, Foxpro for DOS
Про соглашения Visual Foxpro
sphinx

Сообщений: 31180
Откуда: Каменск-Уральски
Дата регистрации: 22.11.2006
Очень хочется совместными усилиями допинать черновой проект (готового не было, если у кого есть - делитесь!). Написан по аналогии с корпоративными требованиями к языку Java, все префиксы взял из книги Славы Клепинина. Ну, может еще что-то добавил.

Просьба - покритиковать тщательно (с аргументами, как надо), или дополнить, или разнести в хвост и в гриву отдельные вещи (ну, все - нет, не вариант).

Любым замечаниям буду рад, на то и сообщество, что решаем порой проблемы вместе.

Надо очень. Я был инициатором, дело из=за мелочей не допинали (не моя лень, есть текущие задачи и забывается)... Мне нужно или допинать (но если делать - то НА УРОВНЕ, это все же корпоративный планируется стандарт, или расписаться, что так оставляем. А это явно сырое, нутром чую...
Ну и это уже вес определенный, как автора. Будет и другие веса в нашей системе, но не все сразу. Я-то генерирую идеи.. "Но значит это никому не нужно", если перефразировать классика. А идеи всегда очень просты до неприличия. Но это отдельная тема. Пусть читают коллеги, если заходят под гостем. Я только рад, что посещают такой ресурс.


------------------
"Veni, vidi, vici!"(с)




Исправлено 2 раз(а). Последнее : sphinx, 21.11.20 08:14
Ratings: 0 negative/0 positive
Re: Про соглашения Visual Foxpro
Ydin

Сообщений: 7648
Откуда: Киев
Дата регистрации: 16.12.2005
У нас есть такой пункт
Для полей БД префикс не используется
Для справочников необходимо использовать имя ID для кода строки, Name - текстовое для имени, Short - короткое имя, FullName - полное имя.
Поле ссылки на справочник должно называться именем справочника и по типу соответствовать типу поля ID справочника.

Это оправдало себя многократно
Ratings: 0 negative/0 positive
Re: Про соглашения Visual Foxpro
Владимир Максимов

Сообщений: 14098
Откуда: Москва
Дата регистрации: 02.09.2000
Цитата:
1. СОГЛАШЕНИЯ О СТРУКТУРЕ ПРОЕКТА

Цитата:
Допускается использовать в именах файлов английские буквы, цифры и символ подчеркивания; все символы должны быть в нижнем регистре. Слова в именах файлов разделяются символом подчеркивания.

Насчет нижнего регистра:

1. В общем случае - это невыполнимо. Например, если копировать файлы средствами FoxPro, то они будут конвертированы в верхний регистр
2. Длинные названия в одном регистре - сложны для чтения. А символ подчеркивания как разделитель слов - увеличивает длину. Что может быть критически важным

Тут удобнее было бы без разрывов, но новое слов начинать с заглавной буквы - PersonService.prg

Лично я не стал бы вообще вводить регламентацию именно регистра букв в именах файлов.

- С точки зрения разработки на FoxPro не влияет никак
- С точки зрения работы с файлами из вне FoxPro - сложно и неудобно в сопровождении

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

Цитата:
2. СОГЛАШЕНИЯ О СТРУКТУРЕ ГЛАВНОГО (СТАРТОВОГО) ФАЙЛА ПРИЛОЖЕНИЯ

Цитата:
1) Директивы процессора/препроцессора (создания и освобождения констант времени компиляции, включения файлов заголовка и т.д.).

Область действия директив препроцессора - тот файл, где они указаны. Поэтому директивы, указанные в главном файле, только в этом главном файле и будут работать. Эту строчку следует удалить

Цитата:
2) Команды настройки среды – специальные SET-команды, устанавливающие параметры рабочей среды

В принципе правильно, конечно, но надо помнить что часть SET-настроек действуют только в рамках текущей сессии данных. Т.е. для форм и отчетов, работающих в Private Data Session, часть настроек надо устанавливать заново в этой новой сессии данных.


Цитата:
3. СОГЛАШЕНИЯ ОБ ИМЕНОВАНИИ ПЕРЕМЕННЫХ, СВОЙСТВ, КОНСТАНТ

Цитата:
Префиксы, определяющие область видимости (Scope)

Область видимости для Private - "В текущем модуле" - не совсем корректно. Скорее так: "В текущей и вызванных из нее процедурах".

Область видимости для параметров - Строго говоря, для параметров область видимости зависит от способа их определения. Но если указывать в скобках, как описано далее, то да, это будут локальные переменные. Если же параметры описаны через ключевое слово Parameters - то это Private

Префикс "t" для параметра используется не столько для задания области видимости, столько для указания того факта, что это именно параметр. Это бывает важно

Цитата:
Префиксы, определяющие тип данных (Type)

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

Integer - Нет дробной части. Нет округления. Дробная часть отбрасывается
Currency - Всегда 4 знака после запятой и специфический способ округления
Numeric, Float, Double - либо вообще одно и то же (Numeric и Float), либо отличаются лишь способ хранения на диске (Double). С точки зрения работы с этими типами данных в среде FoxPro - отличий нет. Поэтому не требуются разные префиксы

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

n - Numeric, Float, Double - или "f", если это привычнее
i - Integer
y - Currency


Цитата:
4. СОГЛАШЕНИЯ ОБ ИМЕНОВАНИИ МЕТОДОВ, ПРОЦЕДУР И ФУНКЦИЙ

FUNCTION Summa(tFirst as Integer, tSecond as String) as Integer

Здесь у параметров не указана буква с типом данных - это отдельное соглашение или просто забыли?
Теоретически, должно было быть так

FUNCTION Summa(tiFirst as Integer, tcSecond as String) as Integer

Цитата:
Методы и функции возвращающие значение логического типа должны начинаться с префикса “Is”.
Методы используемые для установки и получения значений свойств должны начинаться с префиксов “Get” и “Set”.

Сомнительный путь. Предмет для дискуссии. Вряд ли именно этого правила будут придерживаться. Но, попробуйте...


Цитата:
5. СОГЛАШЕНИЯ ОБ ИМЕНОВАНИИ КЛАССОВ, ОБЪЕКТОВ

Цитата:
Метод Init, выполняющий роль конструктора класса, должен располагаться сразу после объявления класса.

Сортировка методов внутри класса определяется их вызовами. Недопустимо, чтобы вызываемый метод находился выше вызывающего.

Ну, уже сразу второе правило противоречит первому Load вызывается до Init и как тут быть?

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

Т.е. я понимаю, конечно, что цель такого расположения, это упростить чтение кода. Проблема только в том, что это годится только для простых случаев. Да и по любому "с листа" разобраться в коде класса будет тяжело. Вне зависимости от того, как там будут расположены методы

Ну и наверное, для особо "одаренных" следует заметить, что это правило для классов, которые создаются вне дизайнера. Не визуальными средствами, а напрямую в коде PRG


Цитата:
6. СОГЛАШЕНИЯ ПО ИСПОЛЬЗОВАНИЮ ВСТРОЕННОГО ЯЗЫКА SQL

Ой мутно это все и неоднозначно.

Цитата:
- Зарезервированные слова (операторы SQL) выравниваются по правому краю. (?)

Именно по "правому"? Не по "левому"? Или имеется в виду выровнять в столбик?

select
field1 as Field1,
fieldLongName as Field2
from MyTab

Т.е. вот здесь опции as сознательно сдвинуты вправо для удобства чтения. Это имелось в виду?

Цитата:
- Не допускается использование порядковых номеров колонок в выражении ORDER BY

Это не всегда возможно. Например, если поле сортировки - это вычисляемое поле имя которого совпадает с именем в поле таблицы-источника

create cursor test (f1 int, f2 int)
insert into test (f1, f2) values (1,2)
insert into test (f1, f2) values (2,1)
select f1*2 as f2 from test order by f2

Цитата:
- Каждый курсор открытый внутри метода должен быть закрыт в конце этого метода

Вопрос в том, для чего курсор открывали. Возможно, как раз для того, чтобы использовать вне метода
Кроме того, для Private Data Session это не имеет значения. Все равно закроется вместе с сессией

Как пожелание такое можно указать, но как требование - нет



Исправлено 2 раз(а). Последнее : Владимир Максимов, 21.11.20 20:34
Ratings: 0 negative/0 positive
Re: Про соглашения Visual Foxpro
lulgu

Сообщений: 1838
Дата регистрации: 30.11.2016
Интересная тема, но что-то "вечные новички" неактивны, нет былого трындежа.
Ratings: 3 negative/1 positive
Re: Про соглашения Visual Foxpro
Ydin

Сообщений: 7648
Откуда: Киев
Дата регистрации: 16.12.2005
m. перед переменными
Ratings: 0 negative/0 positive
Re: Про соглашения Visual Foxpro
Crispy

Сообщений: 18571
Дата регистрации: 16.05.2005
Офтоп (для автора).
В самом начале убийственное:
Цитата:
УТВЕРЖДАЮ
Начальник отд.371

_______________Н.А.Каин
Таки он, убив Авеля, к вам туда перебрался, выходит дело.

Ну а по самому описанию, например, такой момент:
Цитата:
Каждый уровень вложенности выделяется отступом в 4 пробела.
А не много ли? Хоть и стандарт умолчания вроде бы.
Однако, визуально при 4 пробелах текст слишком широко расползается по горизонтали.
Мне когда-то в самом начале подсказали 2 пробела, всегда их ставил, и вроде в таком виде компактнее и удобнее. Приятнее - и глазу, и уму.

Также, мне кажется, стоило бы определиться тогда уж и с длиной строки текста (указав, скажем в пределах стандартного экрана, ну или что-то в этом роде) при использовании ";" для переноса.

Кстати странный момент, про "Запуск формы или главного меню".
Получается, запрещен запуск с передачей параметров? Или с возвратом. Т.е. заведомо принципиально снижается функционал самой команды?
Или скажем, почему нельзя (как косвенно можно понять из текста) использовать оператор множественного присваивания STORE...TO... ? Часто он гораздо удобнее и сокращает простыни.
Также и в остальном - наверняка есть куча подводных камней, которые все заведомо не учтешь. Но которые когда-то могут еще аукнуться и вылезть наружу.
Т.е. смысл самого соглашения вообще в чем? Жесткие инструкции. Или же целевые рекомендации.

И тут уже как бы напрашивается второй офтоп из двух частей:
1 часть удивительная: неужто фокспро все еще где-то жив? :al:
и 2 часть философская: и как долго он собирается прожить? (ну если вместе с Каином как говорится, тот вроде так и бродит по земле с тех пор) [sm128]


------------------
В действительности все иначе, чем на самом деле.
                                      (Антуан де Сент-Экзюпери)
Ratings: 0 negative/0 positive
Re: Про соглашения Visual Foxpro
sphinx

Сообщений: 31180
Откуда: Каменск-Уральски
Дата регистрации: 22.11.2006
В общем, есть пища, в основном благодаря усилиям уважаемого Владимира Максимова. :hi:


------------------
"Veni, vidi, vici!"(с)
Ratings: 0 negative/0 positive
Re: Про соглашения Visual Foxpro
Ydin

Сообщений: 7648
Откуда: Киев
Дата регистрации: 16.12.2005
часть удивительная: неужто фокспро все еще где-то жив?
Он жив в других странах, не бывших в СНГ, Советском Союзе, но он жив.
По-крайней мере, по Foxcharts мне еще пишут, хоть я давно не отвечаю.
США, Индия, что-то испано-португальское, т.е. они не пишут страну.
Один просил помочь ему нарисовать "свечки" вместо столбиков. Консультацию хотел. Типа retired, но хочет такое сделать...
Не, я туда уже не вернусь... Стар уже стал, и двигаюсь я уж с трудом ("Мой маленький гном")

Отдельно идет AVFP (Active VFP). Ну, я стар, а чего Вы тут, а ничего не знаете?

Вы же не ходите в гуглах, как я, но Вы тут на этом сайте и от его имени "как авторы" его (Visual Foxpro ) хороните...
Так просто уйдите отсюда тогда, или Курилка у Вас насиженное место, жопа привыкла или еще что-то...
Или хотя бы не хороните сук, на котором сидите, как солитеры в реально живом организме



Исправлено 1 раз(а). Последнее : Ydin, 23.11.20 21:43
Ratings: 0 negative/0 positive
Re: Про соглашения Visual Foxpro
Ydin

Сообщений: 7648
Откуда: Киев
Дата регистрации: 16.12.2005
Речь в конце шла про
Crispy
1 часть удивительная: неужто фокспро все еще где-то жив? :al:

Фокспро потенциально выше многого, что типа живет еще. Это MS своего пасынка похерила - он же не дает прибыли им.
Еще бы, он же конкурент внутри MS и как при нем можно было продвинуть C#?
Ratings: 0 negative/0 positive
Re: Про соглашения Visual Foxpro
Ydin

Сообщений: 7648
Откуда: Киев
Дата регистрации: 16.12.2005
Это было такое "соглашение по Visual Foxpro"
Чиновники в MS такое приняли. А мы тут на этом сайте это "соглашение" не принимали.
Зачем говорить на этом сайте свое "он помер" там где от его имени мы и говорим.
Считаешь, что Фокс помер, так и уйди с этого сайта Джойса, кот. сайт и содержит.
Или так не говори дальше. Не знаю, может, не прав, что высказываюсь так, может завтра сотру тут многое.



Исправлено 3 раз(а). Последнее : Ydin, 24.11.20 10:05
Ratings: 0 negative/1 positive
Re: Про соглашения Visual Foxpro
Simple777
Автор

Сообщений: 33855
Дата регистрации: 05.11.2006
Ydin
может завтра сотру тут многое.

"Рукописи не горят". [sm128]
Ratings: 0 negative/0 positive
Re: Про соглашения Visual Foxpro
Crispy

Сообщений: 18571
Дата регистрации: 16.05.2005
Ydin
Речь в конце шла про
Crispy
1 часть удивительная: неужто фокспро все еще где-то жив? :al:

То, что было мной сказано - это в том смысле, о котором поется в одной хорошей и мудрой песне:
Он принял мои слезы за смех


------------------
В действительности все иначе, чем на самом деле.
                                      (Антуан де Сент-Экзюпери)




Исправлено 1 раз(а). Последнее : Crispy, 24.11.20 10:16
Ratings: 0 negative/0 positive
Re: Про соглашения Visual Foxpro
lulgu

Сообщений: 1838
Дата регистрации: 30.11.2016
Устроили ромашку: жив/не жив.
Аж слезу пустили ...
Ребята, вы же за двадцать лет даже соглашения FoxPro не смогли написать.
Ratings: 0 negative/0 positive
Re: Про соглашения Visual Foxpro
sphinx

Сообщений: 31180
Откуда: Каменск-Уральски
Дата регистрации: 22.11.2006
Владимир Максимов
Цитата:
- Зарезервированные слова (операторы SQL) выравниваются по правому краю. (?)


Именно по "правому"? Не по "левому"? Или имеется в виду выровнять в столбик?

select
field1 as Field1,
fieldLongName as Field2
from MyTab


Т.е. вот здесь опции as сознательно сдвинуты вправо для удобства чтения. Это имелось в виду?

Каждый блок выравнивается по правому краю, а его содержимое - по левому:

SELECT f1, f1, f2
FROM table1 t1
INNER JOIN table2 t2 ON t1.id1=t2.id2
WHERE expr1>0
INTO CURSOR cursor1

Здесь SELECT, FROM и WHERE выравнены по правому краю, а их содержимое - по левому. Только как это грамотно написать?


------------------
"Veni, vidi, vici!"(с)




Исправлено 2 раз(а). Последнее : sphinx, 25.11.20 16:32
Ratings: 0 negative/0 positive
Re: Про соглашения Visual Foxpro
Владимир Максимов

Сообщений: 14098
Откуда: Москва
Дата регистрации: 02.09.2000
sphinx
Каждый блок выравнивается по правому краю, а его содержимое - по левому:

SELECT f1, f1, f2
FROM table1 t1
INNER JOIN table2 t2 ON t1.id1=t2.id2
WHERE expr1>0
INTO CURSOR cursor1

Здесь SELECT, FROM и WHERE выравнены по правому краю, а их содержимое - по левому. Только как это грамотно написать?

Видимо, у нас разное понимание того, что есть "правый край", а что есть "левый край". Я не вижу здесь никакого выравнивания "по правому краю". Может речь об отступе идет?



* Слово Select прижато (выровнено) по левому краю
SELECT f1, f1, f2

	* Слово FROM расположено с отступом, но прижато (выровнено) по левому краю
	FROM table1 t1

		* Слово INNER расположено с отступом, но прижато (выровнено) по левому краю
		INNER JOIN table2 t2 ON t1.id1=t2.id2

* Слово WHERE прижато (выровнено) по левому краю
WHERE expr1>0

* Слово INTO прижато (выровнено) по левому краю
INTO CURSOR cursor1

Нигде в данном примере я выравнивания по правому краю не вижу
Ratings: 0 negative/0 positive
Re: Про соглашения Visual Foxpro
andrewk

Сообщений: 174
Откуда: Красноярск
Дата регистрации: 15.05.2005
Чисто по мелочам.

1. Продукт называется «Visual FoxPro», а в тексте везде «pro» с маленькой буквы. Ну это к тому, что если текст призван установить стандарты, то и сам должен быть максимально корректен.

2. Насчёт написания переменных. Пример:
v1 = 1
? v1, " - это переменная"
vv = CreateObject("Empty")
AddProperty(vv, "v2", 2)
? vv.v2, " - это свойство объекта"
Create Cursor vv (v1 n, v2 n)
Insert into vv values (10, 20)
? v1, " - а это уже поле, хотя код тот же"
? vv.v2, " - и это поле"
? m.v1, m.vv.v2, " - зато так не ошибёшься"
В связи с этим считаю разумным взять за правило: если ссылаемся на значение переменной, перед ней пишем "m.".
При присвоении это делать смысла нет, здесь Фокс не запутается: "v = 2*2"
Ratings: 0 negative/1 positive
Re: Про соглашения Visual Foxpro
sphinx

Сообщений: 31180
Откуда: Каменск-Уральски
Дата регистрации: 22.11.2006
Владимир Максимов
sphinx
Каждый блок выравнивается по правому краю, а его содержимое - по левому:

SELECT f1, f1, f2
FROM table1 t1
INNER JOIN table2 t2 ON t1.id1=t2.id2
WHERE expr1>0
INTO CURSOR cursor1

Здесь SELECT, FROM и WHERE выравнены по правому краю, а их содержимое - по левому. Только как это грамотно написать?

Видимо, у нас разное понимание того, что есть "правый край", а что есть "левый край". Я не вижу здесь никакого выравнивания "по правому краю". Может речь об отступе идет?



* Слово Select прижато (выровнено) по левому краю
SELECT f1, f1, f2

	* Слово FROM расположено с отступом, но прижато (выровнено) по левому краю
	FROM table1 t1

		* Слово INNER расположено с отступом, но прижато (выровнено) по левому краю
		INNER JOIN table2 t2 ON t1.id1=t2.id2

* Слово WHERE прижато (выровнено) по левому краю
WHERE expr1>0

* Слово INTO прижато (выровнено) по левому краю
INTO CURSOR cursor1

Нигде в данном примере я выравнивания по правому краю не вижу

Речь идет про выравнивание не по краю СТРАНИЦЫ, а выравнивание служебных слов таким образом, чтобы их границы были на условной вертикальной линии. Тогда их содержимое будет автоматически выравнено вдоль этой условной линии, но слева. Посмотрите внимательнее на мой код. Кроме INNER JOIN (имеет отступ для лучшей читаемости кода) - все СЛОВА выравнены по правому краю.


------------------
"Veni, vidi, vici!"(с)




Исправлено 1 раз(а). Последнее : sphinx, 25.11.20 16:32
Ratings: 0 negative/0 positive
Re: Про соглашения Visual Foxpro
Taran

Сообщений: 13624
Откуда: Красноярск
Дата регистрации: 16.01.2008
По мне так from, inner, order, where лучше выравнивать по левому краю, отступив 2 пробела от Select. Проще и быстрее написать и лучше выглядит и читается. А уже допустим наименования таблиц в from и inner также по левому, регулируя пробелами.
Ratings: 0 negative/0 positive
Re: Про соглашения Visual Foxpro
Владимир Максимов

Сообщений: 14098
Откуда: Москва
Дата регистрации: 02.09.2000
sphinx
Речь идет про выравнивание не по краю СТРАНИЦЫ, а выравнивание служебных слов таким образом, чтобы их границы были на условной вертикальной линии. Тогда их содержимое будет автоматически выравнено вдоль этой условной линии, но слева. Посмотрите внимательнее на мой код. Кроме INNER JOIN (имеет отступ для лучшей читаемости кода) - все СЛОВА выравнены по правому краю.

Поскольку часто работаю с Word/Excel, то под термином "выровнять" я понимаю "прижать". Т.е. "выровнять по правому краю" для меня - это "прижать к правому краю". Ну, как выравнивание абзацев в Word/Excel

Если я правильно понял, о чем ты, то вот это имелось в виду?

SELECT 
	f1, 
	f1, 
	f2

FROM 		table1 t1
INNER JOIN 	table2 t2 	ON t1.id1=t2.id2

WHERE 		expr1>0
		and expr2> 0

INTO CURSOR 	cursor1

Я использую теги "pre", чтобы исключить форматирование и показать "как есть". Ну и несколько избыточно для наглядности

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

Т.е. это, конечно, хорошо, но на практике будет крайне трудно поддерживать такое правило. Особенно в случае сложных запросов и(или) одновременной правке в разных редакторах кода с разными настройками
Ratings: 0 negative/0 positive
Re: Про соглашения Visual Foxpro
sphinx

Сообщений: 31180
Откуда: Каменск-Уральски
Дата регистрации: 22.11.2006
Ну почти... Теперь представь себе, что все служебные слова находятся в столбце А и всех их нужно прижать к правому, а не к левому краю.


------------------
"Veni, vidi, vici!"(с)
Ratings: 0 negative/0 positive


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

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

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