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

Langage Delphi Discussion :

Constructeur qui renvoie NIL


Sujet :

Langage Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut Constructeur qui renvoie NIL
    Bonjour

    Comment fait-on dans un constructeur pour rien construire
    et renvoyer nil (bien qu'un constructeur ne renvoie rien) ?

    Merci

    Jean-Philippe

  2. #2
    Expert confirmé

    Avatar de sjrd
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2004
    Messages
    4 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Suisse

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2004
    Messages : 4 517
    Par défaut
    Tu ne peux pas, c'est impossible.
    Si tu veux indiquer qu'un constructeur a échoué, déclenche une exception au sein du constructeur, que tu traites là où tu l'appelles.
    sjrd, ancien rédacteur/modérateur Delphi.
    Auteur de Scala.js, le compilateur de Scala vers JavaScript, et directeur technique du Scala Center à l'EPFL.
    Découvrez Mes tutoriels.

  3. #3
    Membre Expert
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Par défaut
    Citation Envoyé par sjrd Voir le message
    Tu ne peux pas, c'est impossible.
    Si tu veux indiquer qu'un constructeur a échoué, déclenche une exception au sein du constructeur, que tu traites là où tu l'appelles.
    Si tu lance une exception dans le constructeur ... alors le constructeur echoue donc d'une certaine maniere renvoie NIL, du moins si les choses sont faite proprement. Je vois mal un constructeur renvoyer une adresse invalide ....

  4. #4
    Expert éminent
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Par défaut
    Citation Envoyé par jpppaps Voir le message
    Bonjour

    Comment fait-on dans un constructeur pour rien construire
    et renvoyer nil (bien qu'un constructeur ne renvoie rien) ?

    Merci

    Jean-Philippe
    je ne sais pas si ça répond à ton besoin, mais une fonction peu peut-être t'aider...ou une fonction de classe si tu préfères

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    function CreateMonObject:TMonObject;
    begin
     if (Condition=TRUE) then Result:=TMonObject.Create else Result:=nil;
    end;
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  5. #5
    Membre Expert
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Par défaut
    D'ailleur quel est le but de cette operation ?
    Pourquoi souhaite tu renvoyer Nil ?

    Peut etre que nous pourrions trouver d'autres solutions plus propre a ton probleme

  6. #6
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 104
    Par défaut
    Lorsque tu as une exception dans un constructeur, cela appele normalement un Destroy (il doit géré les libérations partiellement via Assigned et nil)

    je pensais qu'il manque un inherited dans ton constructeur

    sinon dans l'idée de Paul TOTH, j'ai fait ceci, une méthode de classe qui sert d'encapsulation à un constructeur (c'est pas comme ça que je voulais faire au début mais bon)

    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
    {* -----------------------------------------------------------------------------
    La Fonction Load renvoie une Instance de Persistant selon un ID, la Classe Receveuse de la Méthode détermine l'ancêtre Minimum à récupérer
    @param ID AutoInc Primary Key identifiant l'Objet dans sa Table
    @return Renvoie un Persistant ou nil si pas Trouvé
    ------------------------------------------------------------------------------ }
    class function TEpcPersistant.Load(const ID: TepcPersistantIDType): TEpcPersistant;
    begin
      Result := Self.Create(nil);
      if TEpcPersistantDBProvider.Provider.Load(Result, ID) and Assigned(Result) and Result.InheritsFrom(Self) then
        Result.InternalLoad(ID)
      else
        if Assigned(Result) then
        begin
          Result.Free();
          Result := nil;
        end;
    end;
    "TEpcPersistantDBProvider.Provider.Load" peut ré-instancier l'objet (ou libérer et affecter à nil car erreur), la classe permet d'identifier la table, mais celle-ci peut contenir plusieurs classes héritées ...
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

Discussions similaires

  1. requette qui renvoi des ligne double
    Par fehmitn dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 13/09/2004, 22h36
  2. [bioinfo] fonction qui renvoie chaîne à autre fonction
    Par perlaud dans le forum Bioinformatique
    Réponses: 11
    Dernier message: 16/07/2004, 15h06
  3. function qui renvois un objet ?
    Par mattmat dans le forum ASP
    Réponses: 4
    Dernier message: 23/04/2004, 11h35
  4. Problème requête qui renvoie plusieurs
    Par dai.kaioh dans le forum Langage SQL
    Réponses: 6
    Dernier message: 01/04/2004, 10h07
  5. [VB6] Comment faire une fonction qui renvoie 2 résultats
    Par tazarine dans le forum VB 6 et antérieur
    Réponses: 10
    Dernier message: 15/01/2004, 00h13

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