Function with Two Values

  • Thread starter Thread starter William Foster
  • Start date Start date
W

William Foster

Good evening all,

I was wondering if there is a way to do a function or different sub
routine that returns two or more values.

I usually use a function to return a boolean value, however, this
sometimes requires me to undertake two functions. I would like to do it
in one operation.

I have thought that I could get the function to reutrn a string, then
simply break-up the string into seperate chunks that mean different
things, but I thought I would ask to see if there is a neater way to do
this.

As an example I would like to return a boolean and an integer from a
function, i.e:

Private Sub Query()

Dim Answer, Answer_Part_1, Answer_Part_2 as String
Answer = Working_Out(Blah, Blah, Blah)
Answer_Part_1 = Left(Answer,3)
Answer_Part_2 = Right(Answer,3)

End Sub

Private Function Working_Out(ByVal Blah1 as String,ByVal Blah2 as
String,ByVal Blah3 as String) as String

Dim Return_String as String
Return_String = "Yes" & 123

Working_Out = Return_String

End Function

Any assistance you may be able to provide would be greatly appreciated.

Yours sincerely,

William Foster
 
There are a number of ways to achieve this.

One way is to use an array to as the return value but this would require
that the type of each element be the same, so as a variation you could use
an Arraylist:

Private Sub Query()

Dim Answer As Arraylist = Working_Out(Blah, Blah, Blah)

Dim Answer_Part_1 As Boolean = CType(Answer(0), Boolean)

Dim Answer_Part_2 As String = CType(Answer(1), String)

End Sub

Private Function Working_Out(ByVal Blah1 as String,ByVal Blah2 as
String,ByVal Blah3 as String) as Arraylist

Dim Answer As New Arraylist

Answer.Add(True)

Answer.Add("123")

Return Answer

End Function
 
return a structure containing a boolean and the other value that you need to
return

hth

guy
 
William: Think "object oriented". Never set yourself up with additional
work by (among other things) concatenating return values requiring you to
immediately break them apart again.

As was pointed out (and is often done) you can pass the variables Answer_1
and Answer_2 by reference to the function which will assign them (leaving
the return value available for some other use.) Better yet though is Guy's
reply. If you "think OOP" (and look at the .Net framework (and other
frameworks for that matter)) you will see they often return "objects" or as
Guy is pointing out a structure (sort of a lightweight object.) They can be
expanded (if you need a 3rd or 4th value) and they are self-documenting as
the "parts" you refer to would be named something like Answer.Text and
Answer.Number.

Tom
 
William,

I don't like it, but to make this thread complete

Private Sub MySub(byval mybool as boolean, byval myint as int)
mybool = true
myInteger = 2
End sub

mybool as booleand = false
myInteg as int = 1
mySub(mybool,mystring)

The bool is now true and the myInt = 2,

But it is confusing to use, therefore I don't like it.

I like more the method with the objects or arrays as is told here as well.

Cor
 
Thank you all for your inpt on a beginner question, I will be
investigating the Structure and Answer as an Array List options when I
get home tonight.

Yours sincerely,

William Foster
 
Back
Top