Префиксы переменных

Автор eeigor, 28 марта 2021, 10:55

0 Пользователи и 1 гость просматривают эту тему.

eeigor

Если не сложно, приведите свою "выстроенную" систему именования переменных (префиксы).
В своё время я ушел от венгерской системы именования в VBA... здесь покороче (значительно), но нет стандарта

Required hungarian prefixes

prefix   meaning
r   reference
x   UNO-Reference
p   pointer (including stl-style iterators and any kind of smart pointer but UNO-Reference - they share the same semantic)
a   some kind of value

optional hungarian prefixes for values instead of "a"

prefix   meaning
b/is/has   boolean types (see example below, prefer is/has over b in new code as it "speaks")
c   some kind of character
e   enumeration
f   some kind of floating point value   (Single, Double)
n   some kind of integer (i, l)
s   some kind of string
v   some kind of container (vector)

t - datetime, user struct (?)

В особенности,
какой префикс использовать для UNO-структуры (o - Object)?
f - float или Flags (usually multiple bit values)
a - array (?)
...
Ubuntu 18.04 LTS • LibreOffice 7.5.1.2 Community

sokol92

#1
Использую CamelCase, а не венгерскую запись. Тем, не менее, стараюсь для объектов использовать префикс "o", поскольку, в отличие от VBA, оператор Set для присвоения ссылки объекту не обязателен.
Кстати, у компилятора проблемы с распознаванием объектов:
Function GetValue(ByVal arg As Variant)
 If IsObject(arg) Then
   GetValue=arg.value
 Else
   GetValue=arg
 End If    
End Function

Sub TestGetValue()
 Msgbox GetValue(1)
End Sub
Владимир.

eeigor

В библиотеке ScriptForge есть небольшой модуль "_CodingConventions".
Ubuntu 18.04 LTS • LibreOffice 7.5.1.2 Community

eeigor

#3
Оффтоп

Цитата: sokol92 от 28 марта 2021, 18:17у компилятора проблемы с распознаванием объектов
Есть такое... Может, так:
Function GetValue(ByVal arg As Variant)
   Dim obj As Object
   If IsObject(arg) Then
   '   GetValue = arg.Value
       obj = arg
       GetValue = obj.Value


Для демонстрации такого рода ошибок приведу пример.
Зачем присваивать значение параметра временной переменной?
А компилятор видит, что аргумент в определении функции объектом не является, а с ним в тексте программы "обращаются" как с объектом (да, но до передачи самого параметра!). Как-то так... насколько я могу судить. В VBA такого нет, ведь тип Variant может содержать объект, и это будет ясно только на этапе выполнения.
Код ниже, вроде, от Питоньяка, комментарий мой.
' Уловка используется, чтобы избежать ошибки в LO.
' Эта функция проверяет аргумент, чтобы узнать, поддерживает ли он службу.
' Если объект не поддерживает службу, возникает ошибка времени выполнения,
' которая сообщает, что переменная не установлена. Присвоение аргумента
' временной переменной для вызова SupportsService позволяет избежать ошибки.
' (Ошибка времени выполнения Basic. Объектная переменная не установлена.)
Function IsCalcDocument(oDoc) As Boolean
On Error GoTo Failed
Dim obj: obj = oDoc  'позволяет избежать ошибки

' IsCalcDocument = False
If obj.SupportsService("com.sun.star.sheet.SpreadsheetDocument") Then
IsCalcDocument = True
End If

Failed:
End Function


Возможно, эту проблему сможет кто-то разъяснить более детально... Я не знаю. И заодно поделиться своим опытом по теме этой ветки.
Ubuntu 18.04 LTS • LibreOffice 7.5.1.2 Community