IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Test de pointeur a null


Sujet :

C#

  1. #21
    Membre Expert Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Par défaut
    Citation Envoyé par Bluedeep Voir le message
    Ben, ça existe.

    struct c'est pas fait pour les pingouins
    Pingouins ? Tu sais, grâce à Mono même les linuxiens ont accès à .Net

    Les structs répondent à un certain nombre de besoins, mais sont trop différentes des classes, nécessitent une syntaxe lourde pour être passées en référence, n'autorisent pas l'héritage... Suffit de voir le faible usage qu'en fait le framework.

  2. #22
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Par défaut
    2) T'abuses quand même, tu le vois une fois, tu l'apprends et c'est bon... C'est dans les 3/4 des langages. Je sais pas si t'as déjà fait du C++, mais avec les surcharges d'opérateurs de partout, tu prendrais peur
    J'ai commencé par apprendre le c, puis le c++ (ensuite java et .net)
    J'ai comemencer à avoir peur en c lorsque certain faisait tenir en une ligne de code 5 lignes de code.
    En c++ je n'ai jamais trop fait de la surcharge d'opérateurs, mais je conçoit qu'en abuser peut être inquiétant.
    Bref tout cela rend la maintenance difficile.
    Vous allez me dire que c'est comme les noms de variables : Certain prèfère V1, V2, V3, ... un choix comme un autre et d'autre des nom clair pour chaque variable, et certain des phrases comme nom de variable (ils abusent de la complétion propose par l'editeur)
    Mais bon qu'en tu arrives à V50 en nom de variable, tu ne comprends plus rien au code. Je ne l'ai pas vécu mais quelqu'un qui l'a vécu me l'a raconté. Il était très enchanté de maintenir un tel code .... Il n'a rien compris a code et à tout réécrit, cela prenais moins de temps.

    3) monIcone = estContent ? "Content.ico" : "pasContent.ico", je trouve ça clair et élégant. Les blocs if then else sont tellement courants qu'il se conçoit très bien d'en simplifier la syntaxe pour les cas les plus simples.
    je reprendrai cette phrase :
    C'est un peu pareil pour les operateurs ternaires, les methodes anonymes etc , certains trouvent ca clair, d'autres pas, toujours la meme chose, affaire de gout. =)
    Néanmoins si l'on veut être profesionnelle, il vaut mieux penser à la maintenance du code, que l'on ne fera pas forcement nous même.

    C'est comme pour les tests, beaucoup de boite ne font pas bcp de test, faute de temps. Cela alourdi la maintenance qui revient très couteuse.
    Je peux vous dire que lorsqu'elles ont décrochés le contrat pour se soft avec inclus dedans la phase de maintenance, elles peuvent perdre de l'argent.
    Celles qui ont compris cela effectue des tests plus appronfondis pour limiter cette maintenance.

  3. #23
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Par défaut
    Les structs en c# exitent uniquement pour jouer le rôle d'instance de classe dont nous n'avons pas besoin de conserver les données des arguments jusqu'à l'arret de l'application.
    Cela évite de gacher de la mémoire pour des objets qui ne sont utilisés que sur une phase précise de l'application.

  4. #24
    Membre Expert Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Par défaut
    Je suis d'accord avec toi que des lignes comme "while (*p++ = *q++);"(si je me souviens bien) sont trop cryptiques. Je suis d'accord aussi que chaque développeur a ses goûts, et c'est pour cela qu'il est possible de faire la même chose de n façons différentes toutes aussi valables les unes que les autres (en C++ notamment ).
    Mais je ne pense pas que ce soit une raison suffisante pour niveller par le bas son code. A la limite si il doit être maintenu ponctuellement par quelqu'un dont le C# n'est pas la spécialité. Mais bon quand on choisit un outil (en l'occurence un langage de programmation), c'est aussi pour tirer profit de ses caractéristiques. Je n'ai pas de position rigide sur le sujet, ça se discute et ça dépend entièrement des projets (mais on s'éloigne un chouïa du sujet initial du thread là, désolé Seth77 )

  5. #25
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Par défaut
    Ce n'est pas grave ce genre de discussion est importante, et montre un manque flagrant dans l'hamonisation des règles de codage.
    Mais je ne pense pas que :
    soit d'un plus bas niveau que :
    La seule vraie raison qui rend i++ plus intéressant que i = i +1 a été donné et c'est le cas où le compilo n'est pas optimisé.
    Pour ce qui ont fait du c++ je ne critique aps ++i qui apporte un fonctionnement différent de i++ .
    Le problème vas être la mise en production des outils développés.
    Ce qui intervienne sur ces outils en production, ils vont corriger en live le code, recompiler et redéployer.
    Donc une maintenance super rapide doit être faite. Imagine toi que ces personnes est un jour du :
    ou du :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    // L'équivalent de while (*p++ = *q++) en développé, moi je ne sais pas faire cela
    Ils n'est pas forcément simple de switcher de l'un à l'autre rapidement.
    C'est pour cela que le code est "homogénéiser" avant de passer en production, on appelle cela une phase d'industrialisation.
    Et le coût de cette industrialisation dépend de l'état du code s'il est proche d'un code industrielle.
    Normalement durant cette phase tous les truc que permet le c++, toutes les contractions, bah on les vire ....
    le code doit être simple à lire et rapide.

    Bref tout cela pour dire que tu travailles rarement pour toi mais en général pour quelqu'un d'autre. Et donc il faut se mettre dans la peau de cette personne et imaginer ce qu'elle attend, que cela soit au niveau code, architecture, fonctionnalité du produit, IHM, ....

  6. #26
    Membre Expert Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Par défaut
    Citation Envoyé par ced600 Voir le message
    La seule vraie raison qui rend i++ plus intéressant que i = i +1 a été donné et c'est le cas où le compilo n'est pas optimisé.
    Je ne suis pas d'accord. Le verbe "incrémenter" existe, c'est pourquoi quand je parle je dis pas "j'ajoute 1", je dis "j'incrémente". Là, c'est pareil Tu écris pas for(int i = 0 ; i < n ; i = i +1), non ?
    Citation Envoyé par ced600 Voir le message
    ... Donc une maintenance super rapide doit être faite.
    Certes, écrire du code qui ne reprend que ce qui est commun à c/C++/java/C# le rendra plus lisible par plus de gens. C'est une raison pour se passer du foreach parce que java le connait pas ? Des delegates, des event, de remoting parce que c'est propre à .Net ? Des templates/generics parce que y'a pas en C ? Et puis les syntaxes "propriétaires" ne sont pas forcément compliquées à comprendre. ??, c'est pas énorme, quand même.

    Donc : ça dépend des projets, et même des modules. Parfois, on favorise la perf pure (bibliothèque de flux financiers, etc.), parfois la relecture facile, parfois l'utilsation du moins de bibliothèques externes possibles, etc.

  7. #27
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    700
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2005
    Messages : 700
    Par défaut
    Je ne pensais pas qu'une entité null pouvait soulever autant de remous codeurien

  8. #28
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Par défaut
    Ne disons pas n'importe koi, lorsque l'on deve en un langage on ne se passe pas de ce qu'il propose c'est stupide.
    Mais il y a les fénéantises du codeur qui pour ne pas fair 5 lignes va utiliser des simplifications qui rendent le code illisible, et il y a des besoins de clarté et de lisibilités sur les sources.
    De toute façon tout cela disparaitra. On se tourne de plus en plus vers un monde où l'on aura des outils pour faire la conception et l'architecture, et c'est le logiciel, personnalisé pour les besoins de l'entrprise, qui développera le code.
    De toutes façons sur les programmes simples actuellement ce genre de programmes codent mieux que nous. Et de plus en plus ils sont capables de générer un code de cette qualité pour des programmes plus complexe tant qu'on les guides en conception.
    Bon c'est un autre débat et tout le monde n'est pas d'accord avec moi la dessus (heureusement sinon on s'ennuirais )

  9. #29
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    Citation Envoyé par ced600 Voir le message
    De toute façon tout cela disparaitra. On se tourne de plus en plus vers un monde où l'on aura des outils pour faire la conception et l'architecture, et c'est le logiciel, personnalisé pour les besoins de l'entrprise, qui développera le code.
    Oui, oui ..... quand j'étais analyste "de base", il y a une vingtaine d'années de cela, on disait déjà cela et ce discours était courant.

  10. #30
    Membre Expert Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Par défaut
    Citation Envoyé par ced600 Voir le message
    Mais il y a les fénéantises du codeur qui pour ne pas fair 5 lignes va utiliser des simplifications qui rendent le code illisible, et il y a des besoins de clarté et de lisibilités sur les sources.
    On est globalement d'accord

    Mais je ne pense pas que ces syntaxes allégées soient de la fainéantise. Maîtrisées, elles facilitent la lisibilité du code. Comme par exemple les fonctions lambda proposées par l'imminent c# 3.0. Le tout est de pas en abuser bien sûr.

    Et pour revenir au sujet principal du thread : supposons que dans une grille de clients à sélection par cellule, je veuille récupérer la ville du client de la cellule sélectionnée :
    ((sender as dataGridView).SelectedCells[0].OwningRow.DataBoundItem as Client).Ville
    Bon j'ai exagéré en faisant tout tenir en une ligne , mais c'est le genre de situation où on veut renvoyer null quand l'une des propriétés enchaînées est nulle (pas de cell sélectionnée, pas d'objet métier attaché, etc.). Ca serait pratique si il y avait un moyen syntaxique d'assurer qu'une propriété d'un objet n'est jamais nulle, comme par exemple la propriété Rows de DataGridView.

  11. #31
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Par défaut
    On est d'accord sur pas mal de points, sauf sur la lisibilité qu'apporte ces syntaxes, mais arrêtons de polémiquer la dessus
    Ca serait pratique si il y avait un moyen syntaxique d'assurer qu'une propriété d'un objet n'est jamais nulle, comme par exemple la propriété Rows de DataGridView.
    Lors d'un développement correct un attribut d'objet n'est accessible que par sa propriété, et celle-ci peu tester la nullité de la propriété après affectation.
    Si tu associe à la propriété un booleen pour la nullité, dont tu affecte la valeur par la propriété de ton attribus, tu peux simplifier les choses pour l'utilisateur de l'objet.
    Ainsi l'utilisation de la propriété peut se faire ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    If (MyObject.MyPropertyIsNotNull)
    {
         MyObject.MyProperty = .... ;
    }
    Par contre l'objet contiens plus d'attribut, et c'est un peu plus lourd pour le construire, mais avec une bonne dénommination de tes attributs, cela reste assez bien maintenable.
    Maintenant si C# propose l'équivalent je ne suis pas au courant.

  12. #32
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Par défaut
    Bon ok je suis un peu bète, ce serait moins gouramand de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    If (MyObject.MyProperty != null)
    {
         MyObject.MyProperty = .... ;
    }
    Mais bon j'aime bien réinventer le roue.
    Mais qu'elle est le problème de faire un telle test ?
    Franchement est ce si chiant que cela ?
    Ce serais comme dire que fermer un stream c'est lourd, qu'on l'oublie tout le temps et qu'il faudrait qu'ils soient fermer automatiquement.
    Ou je ne sais encore koi d'autre.
    Mais tu auras quelqu'un qui va arriver et qui te diras ouais mais c mieux de laisser la liberteé pour patati et patata.
    Bref un langage est telle qui l'est, il faut l'utiliser comme il est ou en cahnge, ou faire le siens (bon courage pour le compilateur )
    Le mieux que l'on puisse faire est de définir la meilleur façon de coder avec pour telle ou telle situation avec telle ou telle objectif.

  13. #33
    Membre Expert Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Par défaut
    Non, ce n'est pas chiant de faire ce test, c'est juste que j'ai vu pas mal de projets bourrés de tests de nullité le plus souvent inutiles, et j'aime pas le code avec 15 niveaux d'indentation

    Il y a des propriétés des objets du framework qui ne sont JAMAIS nulles. Notamment les propriétés de type collection, qui sont quasiment toujours vides à la création de l'objet, mais pas nulles. Cette non-nullité pourrait être indiquée à l'utilisateur de la classe d'une façon ou d'une autre, ça serait pratique.

  14. #34
    Membre émérite

    Profil pro
    Inscrit en
    Février 2004
    Messages
    862
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2004
    Messages : 862
    Par défaut
    Citation Envoyé par Guulh Voir le message
    Cette non-nullité pourrait être indiquée à l'utilisateur de la classe d'une façon ou d'une autre, ça serait pratique.
    Je prendrais plutôt l'option inverse : la possible nullité d'un objet devrait être indiquée dans les commentaires.
    L'utilisateur d'une classe doit partir du principe que les objets proposés en interface ne sont pas null et les cas particuliers doivent être documentés.

  15. #35
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    Citation Envoyé par Keihilin Voir le message
    Je prendrais plutôt l'option inverse : la possible nullité d'un objet devrait être indiquée dans les commentaires.
    .
    Ce n'est pas nécessaire : il y a justement les types nullables pour cela.

  16. #36
    Membre émérite

    Profil pro
    Inscrit en
    Février 2004
    Messages
    862
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2004
    Messages : 862
    Par défaut
    Citation Envoyé par Bluedeep Voir le message
    Ce n'est pas nécessaire : il y a justement les types nullables pour cela.
    oui mais bon...le 2.0 n'est pas encore partout.

    Et puis c'est différent, les types nullables ont été introduits pour les types valeurs qui, justement, ne pouvaient pas être null...

  17. #37
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    Citation Envoyé par Keihilin Voir le message
    oui mais bon...le 2.0 n'est pas encore partout.
    C'est vrai; il y a quelques mois j'ai exhumé un programme en Fortran 66

  18. #38
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    Citation Envoyé par Guulh Voir le message
    Les structs répondent à un certain nombre de besoins, mais sont trop différentes des classes, nécessitent une syntaxe lourde pour être passées en référence, .
    Euh ... justement on utilise les struct pour déclarer des types valeurs.

  19. #39
    Membre Expert Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Par défaut
    Citation Envoyé par Bluedeep Voir le message
    Euh ... justement on utilise les struct pour déclarer des types valeurs.
    J'ai jamais dit le contraire
    Bon, je résume :
    .Net1 => séparation entre struct (type valeur, jamais null, passé par valeur aux fonctions avec possibilité de passage par référence grâce au mot clé "ref") et class (type référence, peut être null, toujours passé par référence).
    .Net2 => ajout d'une syntaxe permettant de traîter une struct comme une class via les nullable (bien que Nullable<T> soit une struct, d'ailleurs)
    un jour ? => possibilité de traîter une classe comme une struct du point de vue du rapport à la nullité sans devenir pour autant des types valeur.

Discussions similaires

  1. [AC-2007] Test sur une Date nulle
    Par fredo6951 dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 13/09/2014, 00h37
  2. Test d'une valeur nulle
    Par Z4ng3tsu dans le forum Débuter
    Réponses: 5
    Dernier message: 29/12/2011, 10h18
  3. test de pointeur non null
    Par czezko dans le forum Delphi
    Réponses: 24
    Dernier message: 06/04/2007, 17h04
  4. Pointeur sur NULL par défaut en parametre.
    Par KernelControl dans le forum Débuter
    Réponses: 3
    Dernier message: 15/12/2005, 10h09
  5. Réponses: 4
    Dernier message: 06/04/2004, 21h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo