# Basic: what is returned in a function?

Hi All,

I am confused at to how functions work. I am reading: https://help.libreoffice.org/Basic/Using_Procedures_and_Functions and con not figure out what is returned from the function.

I am comming from Perl 6. What is returned is

return value


But I can't tell what is returned. For instance:

Public Function FILEPATH() As String
' Returns file path excluding trailing separator.
Dim u As String
Dim i As Long
u = ConvertFromURL( ThisComponent.Url )
i = InStrRev( u, GetPathSeparator() )
FILEPATH = Left( u, i - 1 )
End Function


If I was to take a wild guess, the return value is also the same as the function name (FILEPATH). What am I missing?

Many thanks, -T

Edit: can I return two values? If so, what is the syntax?

edit retag close merge delete

Please tag your questions properly, which helps others to find related questions. I just added the basic tag to all your recent questions. Thanks.

( 2018-12-01 16:11:33 +0100 )edit

I get the finger shaken at me when I try to use "basic". Maybe I mispelled it a lot

( 2018-12-02 20:24:29 +0100 )edit

Sort by » oldest newest most voted

It is not difficult.

In fact, the operator "return value" does the same thing — it assigns a "value" to the "function name". This is just a different syntax, the meaning of the last line in the function is the same.

Let's look at a function that returns two values.

Function FilePathAndName() As Variant
' Returns file path excluding trailing separator and file name
' The result is an array of two elements.
Dim sTemp As String  ' temporary string variable - the URL of the current document
Dim aTemp As Variant ' temporary variable of the variant - later it will be an array
Dim sFileName As String, sFilePath As String ' the purpose of these variables is clear from their names
sTemp = ConvertFromURL( ThisComponent.getUrl() )  ' get URL of current document
If sTemp = "" Then ' if document is new (not saved) then URL is empty string
sFileName = "file name undefined"
sFilePath = "file path undefined"
Else
aTemp = Split( sTemp, GetPathSeparator() )
sFileName = aTemp( Ubound(aTemp) ) ' last element of array is a part of string after last PathSeparator
sFilePath = Left( sTemp, Len( sTemp ) - Len( sFileName ) - 1 ) ' rest of URL-string is path
EndIf
FilePathAndName = Array( sFilePath, sFileName ) ' pack both value to array and return it as function name
End Function


You can enter in cell {=FILEPATHANDNAME()} as an array formula and get in two adjacent cells two values ​​returned by the function.

You can use this function in your other functions and procedures. For example,

Function FilePath() As String
' Returns file path excluding trailing separator
Dim aTemp As Variant
aTemp = FilePathAndName()
FilePath = aTemp(0) ' First element of array
End Function

Function FileName() As String
' Returns file name
Dim aTemp As Variant
aTemp = FilePathAndName()
FileName = aTemp(1) ' Second element of array
End Function


You can write each of these functions in a formula in a cell and get the desired result.

There is another way to return multiple values ​​from a single function — you need to list all returned values ​​as parameters by reference. In this case the function (usually, but not necessarily!) returns a boolean value - whether the execution was successful.

Function isFileNameGood(Optional ByRef sFileName As String, Optional ByRef sFilePath As String) As Boolean
sFileName = FileName()
sFilePath = FilePath()
isFileNameGood = (sFileName <> "file name undefined")
End Function


Of course, calling such a function from a table cell will not bring much benefit - you just get True if the current document is saved or False otherwise. You can use the calculated values ​​of the path and name of file only by calling such a function inside your code.

Good luck!

more

Thank you!

( 2018-12-02 20:24:40 +0100 )edit

## Stats

Seen: 33,036 times

Last updated: Dec 01 '18