Your structs should pass by reference unless you purposely pass them by value.

see http://www.pitonyak.org/oooconf/OOoConf_2004_Macro_Presentation.sxi

so, passing these should not be a performance issue. Much will be determined by how many times things are called as to what you should really do.

You can create your own services, but I assume that you would want to implement these in C++ or Java, not Basic.

Johnny Andersson wrote:
I have a question about what is recommended to do and to avoid when writing
macros with StarBasic.

I think that one very convenient thing to do, is to create "structs" (as
they are called in C/C++), such as this one mentioned in another thread a
while ago:

Type PersonType
FirstName As String
LastName As String
End Type

Let's say that we created a rather complex struct with hundreds of variables
and other structs, like this:

Type PersonType
FirstName As String
LastName As String
Status As MyStruct
.
.
.
End Type

Type MyStruct
Test1 As Integer
Test2 As Double
Blah As MyOtherStruct
.
.
.
End Type

Type MyOtherStruct
.
.
.
End Type

.
.
.

(The dots means "and so on"…)

So, now we want to do stuff. We will create a function that needs, say two string variables. The function is only going to be used for this project, so
we don't need to make it general.

So here are two options that I could think of:


1:

Sub Main
Dim A As MyStruct
Sim B As Integer

A.FirstName="Johnny"
A.LastName="Andersson"
.
.
.
B=MyFunction(A.FirstName, A.LastName)
.
.
.
End Sub

Function MyFunction(A As String, B As String) As Integer
Dim C As Integer
.
.
.
'A and B are used to calculate C in some way, how is not important, it's
just an example.
.
.
.
MyFunction=C
End Function

2:

Sub Main
Dim A As MyStruct
Sim B As Integer

A.FirstName="Johnny"
A.LastName="Andersson"
.
.
.
B=MyFunction(A)
.
.
.
End Sub

Function MyFunction(A As MyStruct) As Integer
Dim C As Integer
.
.
.
'A.FirstName and A.LastName are used to calculate C in some way. No other
variables of A are used.
.
.
.
MyFunction=C
End Function

One of the advantages with option 2, is that I don't need to include a lot of parameters when I call the function. In this example it was not that big
difference, but sometimes I need maybe 5 or 10 parameters.

On the other hand, and this is my question: Isn't option 2 more time
consuming? I am not sure how this works, but if the whole structure is
copied every time the function is called, I guess it will run slower. So how
does it work? Are all the variables copied to the function or is that
handled by a reference or something like that?

Should option 2 be avoided for extremely complex structures? Or should
option 1 be avoided?

Can you see more (and better) options for this kind of "problem"?

A bonus question: Is there anything like the C++ "class" in StarBasic? I
think VB use classes too… It feels like objects works like classes. They
have their own methods to handle their own variables, just like C++ classes,
but can I create my own?

Johnny Andersson

--
Andrew Pitonyak
My Macro Document: http://www.pitonyak.org/AndrewMacro.odt
My Book: http://www.hentzenwerke.com/catalog/oome.htm
Info:  http://www.pitonyak.org/oo.php
See Also: http://documentation.openoffice.org/HOW_TO/index.html

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to