9 votes

Retourner Null ou Nothing à partir d'une fonction VBScript ?

J'essaie d'écrire l'équivalent en VBScript d'une fonction similaire à celle présentée ci-dessous :

object getObject(str)
{
    if ( ... )
    {
        return object_goes_here;
    }

    return null;
}

Je dirais plutôt ci-dessous, sauf que je ne comprends pas la différence entre Nothing et Null. En tant qu'appelant, je préférerais tester si la valeur de retour est définie en utilisant IsNull() par rapport à X Is Nothing .

Function getObject(str)
    If ... Then
        Set getObject = object_goes_here
        Exit Function
    End If

    Set getObject = Nothing  // <-- or should this be Null?
End Function

16voto

GSerg Points 33571

La bonne façon de ne pas renvoyer un objet est de renvoyer Nothing et tester les Is Nothing .

VB's Null est une valeur spéciale de type Variante/Nulle. Il existe d'autres valeurs spéciales, telles que Variant/Empty ou Variant/Error. Elles ont toutes leur utilité, mais ce n'est pas la seule.

4voto

Ekkehard.Horner Points 19117

Utilisez le deuxième squelette de fonction. Éviter Null lorsqu'il s'agit d'objets, à cause de l'abomination Set Assignment.

Dim oX : Set oX = getObject(...)
If oX Is Nothing Then
   ...
Else
  nice object to work with here
End If

vs

Dim vX : vX = getObject(...) ' <-- no Set, no object
If IsNull(vX) Then
   ...
Else
   no object to work with here
End If

3voto

AutomatedChaos Points 3895

Dans votre exemple de code, l'objet est toujours Nothing car c'est la dernière action. C'est ainsi que les choses devraient se passer :

Function getObject(str)
     If ... Then
         Set getObject = object_goes_here
         Exit Function
     End If
     Set getObject = Nothing
End Function

ou :

Function getObject(str)
     Set getObject = Nothing  
     If ... Then
         Set getObject = object_goes_here
     End If
End Function

La réponse de GSerg est correcte : vous devez utiliser Nothing. De plus, pour savoir si un objet a une référence nulle, utilisez :

If Not object Is Nothing Then
    '  do something
End If

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X