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 :

Besoin de conseil sur l'appel d'une procédure


Sujet :

C#

  1. #1
    Membre Expert

    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2007
    Messages
    3 589
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 589
    Par défaut Besoin de conseil sur l'appel d'une procédure
    Bonjour

    Je me pose une question sur la meilleure manière de coder le retour d'une "fonction".

    Voilà un exemple :

    Solution 1 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
            public void GetConnection(string fileName, out SqliteConnection? sqliteConnection)
            {
                sqliteConnection = new SqliteConnection();
     
                try
                {
                    string connectionString = $"Data Source={fileName}";
                    SQLitePCL.raw.SetProvider(new SQLitePCL.SQLite3Provider_e_sqlite3());
                    sqliteConnection = new SqliteConnection(connectionString);
                }
                catch
                {
                    sqliteConnection = null;
                }
            }
    Solution 2 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
            public SqliteConnection? SqliteConnection2(string fileName)
            {
                var sqliteConnection = new SqliteConnection();
     
                try
                {
                    string connectionString = $"Data Source={fileName}";
                    SQLitePCL.raw.SetProvider(new SQLitePCL.SQLite3Provider_e_sqlite3());
                    sqliteConnection = new SqliteConnection(connectionString);
                }
                catch
                {
                    sqliteConnection = null;
                }
     
                return sqliteConnection;
            }
    Qu'est-ce qui pour vous est le mieux ? Le plus propre, plus académique ... etc
    J-L aka Papy pour les amis

  2. #2
    Membre confirmé
    Homme Profil pro
    sans
    Inscrit en
    Mai 2023
    Messages
    313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : sans

    Informations forums :
    Inscription : Mai 2023
    Messages : 313
    Par défaut
    Salut !
    je suis pas un pro, mais il me parait logique que le return soit placé juste à la sortie de la fonction/procédure.

    et au fait, dans la première, je vois pas le return.

  3. #3
    Expert confirmé
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 557
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 557
    Par défaut
    Bonjour,
    Citation Envoyé par nouby Voir le message
    et au fait, dans la première, je vois pas le return.
    Le type de retour de la première est void, donc il n'y a pas besoin de return.
    Pour moi il est plus logique d'utiliser la seconde syntaxe.

    Ta fonction "génère" une instance de SqlConnection, donc c'est ce qui doit être renvoyé.

    Tatayo.

  4. #4
    Membre Expert

    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2007
    Messages
    3 589
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 589
    Par défaut
    Ta fonction "génère" une instance de SqlConnection, donc c'est ce qui doit être renvoyé.
    Donc la meilleure syntaxe est celle qui renvoie une instance déclarée dans la procédure plutôt que celle passée en paramètre "out".

    Ok merci
    J-L aka Papy pour les amis

  5. #5
    Membre Expert

    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2007
    Messages
    3 589
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 589
    Par défaut
    Citation Envoyé par nouby Voir le message
    Salut !
    je suis pas un pro, mais il me parait logique que le return soit placé juste à la sortie de la fonction/procédure.

    et au fait, dans la première, je vois pas le return.
    pas besoin de return, c'est la variable passée en paramètre qui est créée et récupérée par l'appelant
    J-L aka Papy pour les amis

  6. #6
    Membre Expert
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    1 764
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 1 764
    Par défaut
    Je n'avais pas vu le "out" à la 1ère lecture, je disais que tu passais par une variable globale

    Je pense que les 2 sont équivalentes, mais que le "out" est plutôt à utiliser lorsqu'on veut modifier un paramètre (passage par référence). Ici comme tu créés une connexion, il me semble plus logique de retourner cette connexion via le return

  7. #7
    Membre confirmé
    Homme Profil pro
    sans
    Inscrit en
    Mai 2023
    Messages
    313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : sans

    Informations forums :
    Inscription : Mai 2023
    Messages : 313
    Par défaut
    Merci à vous deux, j'ai appris un bon truc !
    Désolé, ma réponse était pas top, mais bon ça m'a permit d'apprendre

  8. #8
    Membre Expert

    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2007
    Messages
    3 589
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 589
    Par défaut
    Citation Envoyé par nouby Voir le message
    Merci à vous deux, j'ai appris un bon truc !
    Désolé, ma réponse était pas top, mais bon ça m'a permit d'apprendre
    Toute occasion d'apprendre est bonne "à {p} prendre"
    J-L aka Papy pour les amis

  9. #9
    Membre prolifique Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    7 533
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 7 533
    Par défaut
    Salut à tous.

    Ce qui conditionne le choix d'une fonction ou d'une procédure est l'usage que tu vas en faire dans tes traitements.
    J'ai tendance à utilisé une fonction quand je retourne des nombres.
    A l'inverse, j'utilise plutôt une procédure quand je fais soit de la récursivité ou soit de la manipulation de tableaux.

    Dans ton exemple, les deux déclarations sont équivalentes.

  10. #10
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 646
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 646
    Par défaut
    Ma remarque à 2 balles, je ne vois pas l'intérêt de cacher les exceptions à l'appelant, qui lui, doit savoir comment réagir en fonction du type d'exception.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public SqliteConnection getSqliteConnection(string fileName)
    {
        string connectionString = $"Data Source={fileName}";
        SQLitePCL.raw.SetProvider(new SQLitePCL.SQLite3Provider_e_sqlite3());
     
        return new SqliteConnection(connectionString);
    }
    Code qui sera plus proche d'une version plus évoluée qui utilisera toutes les fonctionnalités d'un ".config" (si ça existe encore ).

    P.S.: Je suis pas fan de ce qui m'apparait comme un effet de bord : "SetProvider".

  11. #11
    Membre Expert

    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2007
    Messages
    3 589
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 589
    Par défaut
    Pour moi il n'y a pas de remarque à "deux balles". Tout est bon à prendre en compte.

    Pour le SetProvider, il n'est plus à l'ordre du jour depuis que je suis passé de Microsoft.Data.SQlite à System.Data.SQLite.

    Concernant la potentielle erreur que je voulais traiter à cet endroit, j'ai surement un peu trop l'habitude de découper mon code en éléments imbriqués et parfois, dans la hiérarchie d'appels, j'ai peur de rater une étape dans la gestion des exceptions. Alors je les traite à tort de cette façon. Mais je m'améliore chaque jour
    J-L aka Papy pour les amis

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

Discussions similaires

  1. Besoin de conseils sur une situation inextricable SSII
    Par powen dans le forum Droit du travail
    Réponses: 24
    Dernier message: 11/02/2019, 21h13
  2. Besoin de conseil sur l'architecture d'une application
    Par b_reda31 dans le forum WinDev
    Réponses: 14
    Dernier message: 29/09/2015, 10h09
  3. [Toutes versions] Besoin de conseil sur la modelisation d'une base de données
    Par Bluuuh dans le forum Modélisation
    Réponses: 3
    Dernier message: 20/05/2010, 09h35
  4. Réponses: 5
    Dernier message: 07/02/2008, 22h54
  5. Besoin de conseils sur une application
    Par Jim_Nastiq dans le forum Langage
    Réponses: 12
    Dernier message: 12/04/2006, 12h43

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