Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

15 Май 2021, 07:56 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Часто задаваемые вопросы по LibreOffice и Apache OpenOffice.org
 
   Начало   Помощь Поиск Войти Регистрация    задать вопрос  
Страниц: 1   Вниз
  Печать  
Автор Тема: Префиксы переменных  (Прочитано 408 раз)
0 Пользователей и 1 Гость смотрят эту тему.
eeigor
Форумчанин
***
Offline Offline

Пол: Мужской
Сообщений: 550



« Стартовое сообщение: 28 Март 2021, 10:55 »

Если не сложно, приведите свою "выстроенную" систему именования переменных (префиксы).
В своё время я ушел от венгерской системы именования в 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 (?)
 ...
« Последнее редактирование: 28 Март 2021, 11:13 от eeigor » Записан

Ubuntu 18.04 LTS • LO 7.1.1.2 Community
sokol92
Форумчанин
***
Offline Offline

Пол: Мужской
Сообщений: 404


WWW
« Ответ #1: 28 Март 2021, 18:17 »

Использую 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
« Последнее редактирование: 28 Март 2021, 18:27 от sokol92 » Записан

Владимир.
eeigor
Форумчанин
***
Offline Offline

Пол: Мужской
Сообщений: 550



« Ответ #2: 28 Март 2021, 20:54 »

В библиотеке ScriptForge есть небольшой модуль "_CodingConventions".
Записан

Ubuntu 18.04 LTS • LO 7.1.1.2 Community
eeigor
Форумчанин
***
Offline Offline

Пол: Мужской
Сообщений: 550



« Ответ #3: 28 Март 2021, 21:07 »

Оффтоп

у компилятора проблемы с распознаванием объектов
Есть такое... Может, так:
Код:
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

Возможно, эту проблему сможет кто-то разъяснить более детально... Я не знаю. И заодно поделиться своим опытом по теме этой ветки.
« Последнее редактирование: 28 Март 2021, 21:33 от eeigor » Записан

Ubuntu 18.04 LTS • LO 7.1.1.2 Community
Страниц: 1   Вверх
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!