Page 1 sur 1

[R] Attention au type de variable

Posté : mar. 01 sept. 2015 17:03
par jpascal
Bonjour,

Je viens de me rendre compte d'une chose.
Ce script me renvoie "BAD" alors que la variable $a est définie à "ok".

J'imagine que c'est parce que je compare une variable de type String à une valeur de type Integer.
Savez-vous où je peux trouver plus d'info à ce sujet ?

C'est à cause de cela qu'il vaut mieux utiliser la fonction SetError() ?

Code : Tout sélectionner

Local $a = ""
$a = test()
If $a = 0 Then MsgBox(0, "", "BAD")

Func test()
    Return "ok"
EndFunc   ;==>test

Re: [..] Attention au type de variable

Posté : mar. 01 sept. 2015 18:09
par jguinch
Voir dans l'aide : Language Reference / Operators, section Comparison operators (voir note en bas de page)

Re: [..] Attention au type de variable

Posté : mer. 02 sept. 2015 02:38
par orax
jpascal a écrit :C'est à cause de cela qu'il vaut mieux utiliser la fonction SetError() ?
Par exemple, au lieu de faire...

Code : Tout sélectionner

Func _division1($a, $b, ByRef $resultat)
    If $b <> 0 Then
        $resultat = $a / $b
        Return True
    Else
        Return False
    EndIf
EndFunc   ;==>_division1
... on peut faire

Code : Tout sélectionner

Func _division2($a, $b)
    If $b <> 0 Then
        Return $a / $b
    Else
        Return SetError(1)
    EndIf
EndFunc   ;==>_division2
Je me suis inspiré des exemples de Un problème bien ennuyeux. On voit que dans certains cas il ne sera pas facile de retourner une valeur (comme 1, 0, True ou False) indiquant qu'une erreur s'est produite.
En plus il pourrait avoir plusieurs types d'erreurs...

Code : Tout sélectionner

Func _division3($a, $b)
    If $b = 0 Then
        SetError(1)
    ElseIf $a = 0 Then
        Return SetError(2)
    ElseIf $a < 0 Then
        Return SetError(3)
    EndIf

    Return $a / $b
EndFunc   ;==>_division3
Dans cet exemple, on ne pourrait pas retourner un nombre pour indiquer le type d'erreur dans ce cas puisque la fonction _division3 retourne déjà un nombre.

Re: [..] Attention au type de variable

Posté : ven. 04 sept. 2015 11:22
par jpascal
Merci pour ces explications. :)