Salut,
Juste une petite question ou j'arrive pas a trouver le meilleur.
Vaut-il mieux utiliser Nothing ou "" ???
Je sais je cherche la petite bete, mais bon tant qu'a faire, autant faire bien![]()
Salut,
Juste une petite question ou j'arrive pas a trouver le meilleur.
Vaut-il mieux utiliser Nothing ou "" ???
Je sais je cherche la petite bete, mais bon tant qu'a faire, autant faire bien![]()
C'est pas si c'est mieux ou pas ca dépend de ta variable.Envoyé par Danyel
Nothing c'est pour détruire un objet et "" c'est pour "détruire" une chaine de caractère.
Exemple :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 Dim Obj as new ArrayList Obj = Nothing 'detruit le tableau Dim PassWord as String = "toto" PassWord = nothing 'a aucun sens ! et genèrera une erreur il faut faire : PassWord = ""
Qui ne tente rien n'a rien !
Ce qui ne nous tue pas nous rends plus fort !!
Mon projet ZELDA en C++/Allegro
http://www.tutoworld.com - Le Forum -
Mes ressources Dotnet (cours, sources, tutos)
--------------------------------------------
+
+
=
Ne pas oublier le Tag!
Hmmm es-tu vraiment sur de cela, car mettre nothing à un string ne provoque pas d'erreur meme en explicit et strict sur ON.Envoyé par Aspic
Alors oui Nothing est de type object, mais realise la meme chose que "" à des chaines ou nombres ...
idem pour string.text = nothing !!!
Pour ce genre de questions existencielles, il y a la méthode :
Code : Sélectionner tout - Visualiser dans une fenêtre à part String.IsNullOrEmpty(string)
Besoin d'un MessageBox amélioré ? InformationBox pour .NET 1.1, 2.0, 3.0, 3.5, 4.0 sous license Apache 2.0.
Bonnes pratiques pour les accès aux données
Débogage efficace en .NET
LINQ to Objects : l'envers du décor
Mon profil LinkedIn - MCT - MCPD WinForms - MCTS Applications Distribuées - MCTS WCF - MCTS WCF 4.0 - MCTS SQL Server 2008, Database Development - Mon blog - Twitter
Affecter String.Empty ou null à une chaine n'a pas du tout le même résultat. Dans beaucoup de situations, la distinction est importante entre une variable non initilialisée (cad null) et une variable contenant une chaine vide. Il y a cette même distinction dans les champs d'une table d'un SGBD.Envoyé par Danyel
Besoin d'un MessageBox amélioré ? InformationBox pour .NET 1.1, 2.0, 3.0, 3.5, 4.0 sous license Apache 2.0.
Bonnes pratiques pour les accès aux données
Débogage efficace en .NET
LINQ to Objects : l'envers du décor
Mon profil LinkedIn - MCT - MCPD WinForms - MCTS Applications Distribuées - MCTS WCF - MCTS WCF 4.0 - MCTS SQL Server 2008, Database Development - Mon blog - Twitter
Moi, je n'en suis pas si sur. Nothing ou la chaine sont bien deux valeurs distinctes. La chaine vide n'est pas la même chose que RIEN.mais en vb.net, un string non initialisé est à nothing, mais il est aussi = à ""
ATTENTION : toute variable doit être initialisée avant utilisation (c'est un principe fondamental de la programmation) car normalement on ne peut pas prévoir la valeur que notre variable aura avant .... Donc ton exemple repose sur un état ambigüe.
Et tu réponds toi même à la question
Nothing <> ""par contre, assigné à "" il n'est plus nothing
j'ai pas dit que nothing = ""
j'ai dit qu'un string non initialisé est à nothing
dim s as string
s is nothing renvoie true
mais il est aussi vide
s = "" renvoie true
je l'ai testé je dis pas nimp
et sinon vb initialise les variables de types par valeur, un integer sera = à 0 au début du prog, et ce depuis plusieurs génération de vb au moins (pas le cas sur tous les langages en effet)
le but d'un logiciel c'est de faire les choses à la place de quelqu'un, initilialiser les variables non objets est une chose que je trouve normal de la part d'une technologie de développement
Il n'a jamais été conseillé de laisser au compilateur décider. Mieux vaut écrire le code de manière explicite puisque le jour ou le compilateur change, et bien c'est la m.... Petit exemple : VB depuis plusieurs génération avait comme passage de paramètre par défaut, ByRef, ce qui n'est plus le cas dans VB.NET. Quand tu n'as pas pris soin d'écrire explicitement les Byref et Byval, le passage d'un compilateur à l'autre pose des problèmeset sinon vb initialise les variables de types par valeur, un integer sera = à 0 au début du prog, et ce depuis plusieurs génération de vb au moins (pas le cas sur tous les langages en effet)![]()
Et logiquement si :
ets is nothing renvoie true
alorss = "" renvoie true
Nothing = "" ou Nothing Is ""
Ce qui a priori est FAUX donc l'état de départ de s est ambigüe.
De plus un programme travaille rarement sur des variables n'ayant jamais reçu de valeur (tout juste créées) et lorsque l'on a assigné une valeur à s, VB différencie le Nothing et la chaine vide.
l'ambiguité vient de vb, microsoft fait bien les choix qu'il veut sur ses logiciels
et donc apparement le fait qu'un string = "" alors qu'il est nothing vient du fait que c'est un semi objet et donc = et is ne pointe pas sur la meme chose
quand on change de compilateur il est rarement conseillé de garder le meme code, et de toute facon c'est rarement le cas puisque c'est rarement possible de changer de compilateur
donc si le compilateur marche d'une certaine manière, autant l'utiliser de la manière dont il fonctionne
vb est depuis le début un langage qui essaie de simplifier les choses
le but d'un programme est de faire abstraction de comment les choses se passent en amont, vb va dans ce sens là, moi ca me va, je n'irais pas dire que mon integer est = à 0 ! lol
Dans un cas, la variable n'a pas de référence. C'est à dire qu'aucune mémoire n'est allouée à la variable. Dans l'autre cas, de la mémoire est allouée à la variable, mais ne contient pas de valeurs
Dans le cas suivant :
MonString n'a pas de référence, donc si tu fais
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2MonString = Nothing
cela ne fonctionnera pas.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 MonString = MonString.ToUpper
Dans la cas suivant :
MonString sera référencé.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2MonString = ""
En fait c'est come si tu affecté un tableau de caractère vide à la variable
MonString = "" => MonString = Tableau de caractère avec aucun caractère...
Si tu fais,
Cela fonctinnera, même si le tableau de caractère est vide..
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 MonString = MonString.ToUpper
J'espère avoir été clair, car c'est pas évident à expliquer, d'autant que VS considère que "" = Nothing, au même titre que 0 = Nothing ou #1/1/1# = Nothing
En fait pour répondre à la question ...
Si tu veux initialiser une variable String, tu dois faire
au même titre que n'importe quel objet.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 MonString = "" ' Equivaut à MonString = New String(Chr(0), 0)
Si tu veux détruire un objet String
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 MonObject = New Object
au même titre que
Code : Sélectionner tout - Visualiser dans une fenêtre à part MonString = Nothing
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2MonObjet = nothing
ou encore
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 monString = System.String.Empty
Pourquoi se prendre la tete sur ce sujet?
Sincerement pour moi :
Et c'est tout
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 MonString = "" MonObjet = nothing![]()
Qui ne tente rien n'a rien !
Ce qui ne nous tue pas nous rends plus fort !!
Mon projet ZELDA en C++/Allegro
http://www.tutoworld.com - Le Forum -
Mes ressources Dotnet (cours, sources, tutos)
--------------------------------------------
+
+
=
Ne pas oublier le Tag!
Tout simplement parce que ce n'est pas la même chose ...![]()
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 Dim i As String i = Nothing MsgBox(IsNothing(i)) ' Renvoi True i = "" MsgBox(IsNothing(i)) ' Renvoi False
lol qui aurait pu croire que j'allais mettre le feu avec ma question à la c..![]()
En tout cas, ca prouve bien vu tous les commentaires pour et contre, qu'il y a sujet à discussion.
Partager