Home All Groups Group Topic Archive Search About

Integer Functions that return Nothing?

Author
17 Feb 2006 10:37 PM
gregory_may
Is it possible to return "nothing" from an Integer function?  This seems to
give me "0" rather than "nothing".

Private Function MyFunction() As Integer


Return Nothing

End Function

Author
17 Feb 2006 11:14 PM
AlanT
'Nothing' is not a value per se, but a keyword which reprensents the
default value for a given data type.

For integers this is 0, so Return Nothing, is equivalent to Return 0.


hth,
Alan.
Author
17 Feb 2006 11:15 PM
Chris
gregory_may wrote:
> Is it possible to return "nothing" from an Integer function?  This seems to
> give me "0" rather than "nothing".
>
> Private Function MyFunction() As Integer
>
>
> Return Nothing
>
> End Function
>
>

Since an Integer is not a Reference type, no you can't.

Nothing can only be returned for "pointers"

Chris
Author
17 Feb 2006 11:41 PM
gregory_may
So, how could I define this function to return "nothing" or an integer?  Is
this possible?

Show quoteHide quote
"Chris" <no@spam.com> wrote in message
news:eRnjpfBNGHA.3144@TK2MSFTNGP11.phx.gbl...
> gregory_may wrote:
>> Is it possible to return "nothing" from an Integer function?  This seems
>> to give me "0" rather than "nothing".
>>
>> Private Function MyFunction() As Integer
>>
>>
>> Return Nothing
>>
>> End Function
>>
>>
>
> Since an Integer is not a Reference type, no you can't.
>
> Nothing can only be returned for "pointers"
>
> Chris
Author
17 Feb 2006 11:59 PM
Chris
gregory_may wrote:
Show quoteHide quote
> So, how could I define this function to return "nothing" or an integer?  Is
> this possible?
>
> "Chris" <no@spam.com> wrote in message
> news:eRnjpfBNGHA.3144@TK2MSFTNGP11.phx.gbl...
>
>>gregory_may wrote:
>>
>>>Is it possible to return "nothing" from an Integer function?  This seems
>>>to give me "0" rather than "nothing".
>>>
>>>Private Function MyFunction() As Integer
>>>
>>>
>>>Return Nothing
>>>
>>>End Function
>>>
>>>
>>
>>Since an Integer is not a Reference type, no you can't.
>>
>>Nothing can only be returned for "pointers"
>>
>>Chris
>
>
>

No, you will have to return a reference type to check for nothing.  If
you are trying to catch when something bad happens and can not return a
value like -1 to indicate it, you can throw an exception.

Chris
Author
18 Feb 2006 12:28 AM
gregory_may
That's a good idea.

Thanks!

I did find this:
http://nullabletypes.sourceforge.net/

But, not sure I want to tackle it.



Show quoteHide quote
"Chris" <no@spam.com> wrote in message
news:e62Mv2BNGHA.456@TK2MSFTNGP15.phx.gbl...
> gregory_may wrote:
>> So, how could I define this function to return "nothing" or an integer?
>> Is this possible?
>>
>> "Chris" <no@spam.com> wrote in message
>> news:eRnjpfBNGHA.3144@TK2MSFTNGP11.phx.gbl...
>>
>>>gregory_may wrote:
>>>
>>>>Is it possible to return "nothing" from an Integer function?  This seems
>>>>to give me "0" rather than "nothing".
>>>>
>>>>Private Function MyFunction() As Integer
>>>>
>>>>
>>>>Return Nothing
>>>>
>>>>End Function
>>>>
>>>>
>>>
>>>Since an Integer is not a Reference type, no you can't.
>>>
>>>Nothing can only be returned for "pointers"
>>>
>>>Chris
>>
>>
>>
>
> No, you will have to return a reference type to check for nothing.  If you
> are trying to catch when something bad happens and can not return a value
> like -1 to indicate it, you can throw an exception.
>
> Chris
Author
18 Feb 2006 3:42 AM
_AnonCoward
Show quote Hide quote
"gregory_may" <None> wrote in message
news:%23eo$U%23BNGHA.3896@TK2MSFTNGP15.phx.gbl...
:
: "Chris" <no@spam.com> wrote in message
: news:e62Mv2BNGHA.456@TK2MSFTNGP15.phx.gbl...
: >
: > gregory_may wrote:
: >>
: >> "Chris" <no@spam.com> wrote in message
: >> news:eRnjpfBNGHA.3144@TK2MSFTNGP11.phx.gbl...
: >>
: >>> gregory_may wrote:
: >>>
: >>>> Is it possible to return "nothing" from an Integer function?
: >>>> This seems to give me "0" rather than "nothing".
: >>>>
: >>>> Private Function MyFunction() As Integer
: >>>>
: >>>>
: >>>> Return Nothing
: >>>>
: >>>> End Function
: >>>>
: >>>>
: >>> Since an Integer is not a Reference type, no you can't.
: >>>
: >>> Nothing can only be returned for "pointers"
: >>>
: >>> Chris
: >>
: >>
: >> So, how could I define this function to return "nothing" or
: >> an integer?  Is this possible?
: >
: > No, you will have to return a reference type to check for nothing.
: > If you  are trying to catch when something bad happens and can not
: > return a value  like -1 to indicate it, you can throw an exception.
: >
: > Chris
:
: That's a good idea.
:
: Thanks!
:
: I did find this:
: http://nullabletypes.sourceforge.net/
:
: But, not sure I want to tackle it.


Why not? The nullable type sounds like it may serve your needs. Consider the
following code block (note that this is new to version 2.0 of the
framework):


    '------------------------------------------------
    Option Strict

    Imports Microsoft.VisualBasic
    Imports System

    Public Module [module]
      Public Sub Main()

        Dim n0 As Nullable(Of Integer)

        n0 = GetNullValue()
        PrintValue(n0)

        n0 = GetValue()
        PrintValue(n0)

        Dim n1 As Integer = CType((GetValue), Integer)
        PrintValue(n1)

        Dim n2 As Short = CType((GetValue), Short)
        PrintValue(n2)

        PrintValue(Nothing)

        PrintValue(100)

      End Sub

      Public Sub PrintValue(n As Nullable(Of Integer))

        If n.HasValue Then
          Console.WriteLine("n = " & n.Value)
        Else
          Console.WriteLine("n is a null value")
        End If

      End Sub

      Public Function GetValue() As Nullable(Of Integer)
        Return 0
      End Function

      Public Function GetNullValue() As Nullable(Of Integer)
        Return Nothing
      End Function

    End Module
    '------------------------------------------------


This generates the following output:


    '------------------------------------------------
    n is a null value
    n = 0
    n = 0
    n = 0
    n is a null value
    n = 100
    '------------------------------------------------


The earlier suggestion of using -1 or throwing an exception are valid
approaches but exceptions can penalize performance and should be used
sparingly. Exceptions are for exceptional conditions. If what your are
trying to capture with the null value is a normal event, throwing and
catching exceptions may be excessive.


On the other hand, using a value such as -1 to flag something only works
if -1 isn't a valid value otherwise. And it has the additional drawback of
requiring anyone using the function to know the significance of that value
before hand.


If any of these limitations adversely affect what you are trying to do, I'd
say try the nullable type approach and see what it does for you.


HTH


Ralf
--
--
----------------------------------------------------------
*             ^~^                   ^~^                  *
*          _ {~ ~}                 {~ ~} _               *
*         /_``>*<                   >*<''_\              *
*        (\--_)++)                 (++(_--/)             *
----------------------------------------------------------
There are no advanced students in Aikido - there are only
competent beginners. There are no advanced techniques -
only the correct application of basic principles.
Author
20 Feb 2006 7:50 PM
gregory_may
I think the nullable types could be a perfect fit, but I need to look at
them in a small "test" project to see what I think.  If they look good, I
may end using them on all my projects.


Show quoteHide quote
"_AnonCoward" <abc***@uvwxyz.com> wrote in message
news:0JwJf.21170$no3.1266@tornado.southeast.rr.com...
> "gregory_may" <None> wrote in message
> news:%23eo$U%23BNGHA.3896@TK2MSFTNGP15.phx.gbl...
> :
> : "Chris" <no@spam.com> wrote in message
> : news:e62Mv2BNGHA.456@TK2MSFTNGP15.phx.gbl...
> : >
> : > gregory_may wrote:
> : >>
> : >> "Chris" <no@spam.com> wrote in message
> : >> news:eRnjpfBNGHA.3144@TK2MSFTNGP11.phx.gbl...
> : >>
> : >>> gregory_may wrote:
> : >>>
> : >>>> Is it possible to return "nothing" from an Integer function?
> : >>>> This seems to give me "0" rather than "nothing".
> : >>>>
> : >>>> Private Function MyFunction() As Integer
> : >>>>
> : >>>>
> : >>>> Return Nothing
> : >>>>
> : >>>> End Function
> : >>>>
> : >>>>
> : >>> Since an Integer is not a Reference type, no you can't.
> : >>>
> : >>> Nothing can only be returned for "pointers"
> : >>>
> : >>> Chris
> : >>
> : >>
> : >> So, how could I define this function to return "nothing" or
> : >> an integer?  Is this possible?
> : >
> : > No, you will have to return a reference type to check for nothing.
> : > If you  are trying to catch when something bad happens and can not
> : > return a value  like -1 to indicate it, you can throw an exception.
> : >
> : > Chris
> :
> : That's a good idea.
> :
> : Thanks!
> :
> : I did find this:
> : http://nullabletypes.sourceforge.net/
> :
> : But, not sure I want to tackle it.
>
>
> Why not? The nullable type sounds like it may serve your needs. Consider
> the
> following code block (note that this is new to version 2.0 of the
> framework):
>
>
>    '------------------------------------------------
>    Option Strict
>
>    Imports Microsoft.VisualBasic
>    Imports System
>
>    Public Module [module]
>      Public Sub Main()
>
>        Dim n0 As Nullable(Of Integer)
>
>        n0 = GetNullValue()
>        PrintValue(n0)
>
>        n0 = GetValue()
>        PrintValue(n0)
>
>        Dim n1 As Integer = CType((GetValue), Integer)
>        PrintValue(n1)
>
>        Dim n2 As Short = CType((GetValue), Short)
>        PrintValue(n2)
>
>        PrintValue(Nothing)
>
>        PrintValue(100)
>
>      End Sub
>
>      Public Sub PrintValue(n As Nullable(Of Integer))
>
>        If n.HasValue Then
>          Console.WriteLine("n = " & n.Value)
>        Else
>          Console.WriteLine("n is a null value")
>        End If
>
>      End Sub
>
>      Public Function GetValue() As Nullable(Of Integer)
>        Return 0
>      End Function
>
>      Public Function GetNullValue() As Nullable(Of Integer)
>        Return Nothing
>      End Function
>
>    End Module
>    '------------------------------------------------
>
>
> This generates the following output:
>
>
>    '------------------------------------------------
>    n is a null value
>    n = 0
>    n = 0
>    n = 0
>    n is a null value
>    n = 100
>    '------------------------------------------------
>
>
> The earlier suggestion of using -1 or throwing an exception are valid
> approaches but exceptions can penalize performance and should be used
> sparingly. Exceptions are for exceptional conditions. If what your are
> trying to capture with the null value is a normal event, throwing and
> catching exceptions may be excessive.
>
>
> On the other hand, using a value such as -1 to flag something only works
> if -1 isn't a valid value otherwise. And it has the additional drawback of
> requiring anyone using the function to know the significance of that value
> before hand.
>
>
> If any of these limitations adversely affect what you are trying to do,
> I'd
> say try the nullable type approach and see what it does for you.
>
>
> HTH
>
>
> Ralf
> --
> --
> ----------------------------------------------------------
> *             ^~^                   ^~^                  *
> *          _ {~ ~}                 {~ ~} _               *
> *         /_``>*<                   >*<''_\              *
> *        (\--_)++)                 (++(_--/)             *
> ----------------------------------------------------------
> There are no advanced students in Aikido - there are only
> competent beginners. There are no advanced techniques -
> only the correct application of basic principles.
>
>
Author
18 Feb 2006 12:27 PM
Herfried K. Wagner [MVP]
Show quote Hide quote
"Chris" <no@spam.com> schrieb:
>> Is it possible to return "nothing" from an Integer function?  This seems
>> to give me "0" rather than "nothing".
>>
>> Private Function MyFunction() As Integer
>>
>>
>> Return Nothing
>>
>> End Function
>>
>>
>
> Since an Integer is not a Reference type, no you can't.
>
> Nothing can only be returned for "pointers"

'Nothing' means "default value" for value types, which is 0 for most numeric
types such as 'Integer'.  'Nothing' for value types in VB.NET is the same as
'default(Integer)' in C#.

--
M S   Herfried K. Wagner
M V P  <URL:http://dotnet.mvps.org/>
V B   <URL:http://classicvb.org/petition/>