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 :

Finasserie dans le code


Sujet :

C#

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2022
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mai 2022
    Messages : 109
    Points : 113
    Points
    113
    Par défaut Finasserie dans le code
    Bonjour tout le monde,

    Au départ, j'avais écrit ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    char car1 = String.Format("{0}", (char)34)[0];
    char car2 = String.Format("{0}", (char)65282)[0];
    string strPath = strs[0].Replace(car1, car2);
    Puis j'ai lu l'aide sur les chaînes interpolées, alors j'ai remplacé par ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    string strPath = strs[0].Replace($"{(char)34}", $"{(char)65282}");
    Bon, là le seul commentaire c'est que je me demande bien pourquoi, après avoir sélectionné les deux premières lignes, la pression de Ctrl K, C, me met deux barres obliques juste devant le code sur la première ligne, mais plusieurs tabulations en arrière sur la deuxième.
    Certes dans les deux cas c'est un commentaire, mais ça n'améliore pas la lisibilité.

    Alors après, je vois un petit tournevis dans la marge, où me sont proposées d'autres modifications, dont l'avantage m'apparaît moins immédiatement :
    1. utiliser un type implicite
      remplacer string par var.
      Ah ! Je croyais qu'on utilisait var pour ne pas s'embarrasser à chercher le type exact.
      Mais là, on l'a.
    2. introduire une variable intermédiaire
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      string v= strs[0].Replace($"{(char)34}", $"{(char)65282}");
      string strPath = v
      Ah bon. C'est pour réduire la longueur de la première ligne ?
    3. introduire le paramètre pour FileInfo
      Comme j'ai effectué les manipulations à mesure pour copier le résultat ici, à présent on ne me propose plus cela.
      Je me retrouvais avec un paramètre supplémentaire au constructeur de FileInfo.
      Ça me rappelle un très mauvais souvenir avec un Timer à trois paramètres, dont personne n'a su comprendre le sens, et j'ai été obligé de recommencer le projet. Donc ... Je ne vais pas chercher très longtemps, d'autant que maintenant ça marche.
    4. variable temporaire inline
      sachant qu'un peu plus loin on a
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      fileInfo = new FileInfo(strPath)
      la proposition est d'écrire plutôt :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      fileInfo = new FileInfo(strs[0].Replace($"{(char)34}", $"{(char)65282}"))
      Ah oui là l'avantage apparaît plus clairement, une fois qu'on a bien débugué et qu'on est sûr de ne pas avoir besoin de savoir ce qu'il y a dans la chaîne de caractères. C'est en fait la démarche inverse que de mettre le v en variable intermédiaire.
    Problème de mot de passe réglé pour Gluups.

  2. #2
    Expert éminent sénior

    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2016
    Messages
    2 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2016
    Messages : 2 761
    Points : 10 543
    Points
    10 543
    Billets dans le blog
    21
    Par défaut
    Citation Envoyé par Gluups2 Voir le message
    utiliser un type implicite
    J'évite autant que possible l'usage de var. Ok, c'est pratique dans certains cas, mais c'est aussi le meilleur moyen de se retrouver avec un type qui n'est pas le bon :
    • se trouver avec une classe concrète au lieu de d'avoir une interface par exemple (ou classe abstraite, parente, problème de covariance, etc...)
    • en cas de modification de code, venir modifier implicitement le typage d'une variable. Cela peut être souhaitable, peut être pas. Pour ma part, je préfère le faire explicitement pour m'assurer que le comportement est le bon


    Généralement, le seul endroit où je tolère l'usage de var, c'est pour les requêtes Linq.

    Citation Envoyé par Gluups2 Voir le message
    introduire une variable intermédiaire
    Je n'ai pas spécialement d'avis. Cela peut aider au débogage si nécessaire.

    Citation Envoyé par Gluups2 Voir le message
    introduire le paramètre pour FileInfo
    Pas d'avis sur la question. Je me souviens du Timer à 3 paramètres. Je me demande si tu n'aurais pas une extension qui fout un peu le bazar. Car de mémoire, c'était sur un évènement que tu avais 3 paramètres, alors que Microsoft a toujours été très clair sur le sujet : on fait comme on veut, mais nous, on suit le formalisme (sender, args).


    Citation Envoyé par Gluups2 Voir le message
    variable temporaire inline
    Pour ma part, je trouve que cela commence à faire lourd. La ligne fait plusieurs choses, ce qui rend "pénible" sa lecture (tout est relatif hein !).
    [/QUOTE]



    ------

    Ce qui me "choque", c'est ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    char car1 = String.Format("{0}", (char)34)[0];
    char car2 = String.Format("{0}", (char)65282)[0];
    string strPath = strs[0].Replace(car1, car2);
    J'ai un char, que je converti en string pour prendre le premier caractère de cette dernière afin d'obtenir... un char !

    On peut donc avoir
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    char car1 = (char)34;
    char car2 = (char)65282;
    string strPath = strs[0].Replace(car1, car2);
    ou même plus succinct si on souhaite tout faire tenir sur une seule ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    string strPath = strs[0].Replace((char)34, char(65282));
    François DORIN
    Consultant informatique : conception, modélisation, développement (C#/.Net et SQL Server)
    Site internet | Profils Viadéo & LinkedIn
    ---------
    Page de cours : fdorin.developpez.com
    ---------
    N'oubliez pas de consulter la FAQ C# ainsi que les cours et tutoriels

  3. #3
    Membre régulier
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2022
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mai 2022
    Messages : 109
    Points : 113
    Points
    113
    Par défaut
    Bonjour,

    Bon en gros tu dis comme moi.

    Les suggestions de Visual Studio, à l'occasion ça peut rendre service, mais il ne faut pas foncer tête baissée avec.

    ***

    Ah oui je me disais bien qu'il devait y avoir une syntaxe plus simple pour le caractère. Merci.
    Problème de mot de passe réglé pour Gluups.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [C#] Control user dans le code caché
    Par pc152 dans le forum ASP.NET
    Réponses: 7
    Dernier message: 07/05/2004, 06h36
  2. [langage] algo de bissection dans mon code
    Par killy dans le forum Langage
    Réponses: 5
    Dernier message: 19/01/2004, 18h35
  3. Quel est le problème dans ce code ?
    Par Luther13 dans le forum C
    Réponses: 12
    Dernier message: 26/08/2003, 16h09
  4. Modifier un événement dans le code
    Par HT dans le forum Langage
    Réponses: 6
    Dernier message: 20/06/2003, 09h46
  5. Création multiple table paradox dans le code
    Par scarabee dans le forum C++Builder
    Réponses: 8
    Dernier message: 30/10/2002, 10h17

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