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 Perl Discussion :

Problème getters et setters


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de Balbuzard
    Profil pro
    Inscrit en
    Août 2008
    Messages
    381
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 381
    Par défaut Problème getters et setters
    Bonjour;

    Je dois faire partager une variable entre plusieurs classes.
    J'utilise donc un getter et un setter.

    Je me suis inspiré de la FAQ, mais je ne dois partager qu'un variable, donc j'ai produit le code suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    sub balance {
    	my $this = shift;
    	$this->{$balance} = shift if (@_);
    	return $this->{$balance};
    }
    et également
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    sub accesseur {
    	my ($this) = shift; #$this contient une référee a l'objet courant
    	my $balance = __PACKAGE__ . "::balance";
    	if ( @_{ $this->{$balance} = shift } ) {
    		return $this->{$balance};
    	}
    }
    Je recherche la valeur avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if($self->balance() == 1)
    Mais lorsque je fais un print de $self->balance() j'obtiens:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Xymov::XymovDBI2=HASH(0x504290)->balance()
    Apparemment j'ai pas tout compris :-S

    Pourquoi je n'obtiens pas 0 ou 1 (valeur affectée à la balance) avec ce print?
    Ai-je mal suivis les instructions?

    Merci pour vos réponses!

  2. #2
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Par défaut
    Peux-tu montrer la ligne de ton print ?

    Je ne comprends pas bien ce que tu cherches à faire ici:http://www.developpez.net/forums/ima...on_redface.gif
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    	my $balance = __PACKAGE__ . "::balance";
    	if ( @_{ $this->{$balance} = shift } ) {
    		return $this->{$balance};
    	}
    Dans cette partie :
    - à quoi sert @_{ ... } dans le if ?
    - tu affectes une propriété $balance à l'objet $this, or $balance contient le texte __PACKAGE__ . "::balance"... je ne vois pas de déréférencement de $balance... j'ai du mal à comprendre ce que tu cherches à faire là

  3. #3
    Membre éclairé Avatar de Balbuzard
    Profil pro
    Inscrit en
    Août 2008
    Messages
    381
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 381
    Par défaut
    mmmh bon pour éviter que d'autres cherchent inutilement;
    Pressé par le temps, j'ai décidé de créer une méthode qui change une valeur $balance; pas vraiment un setter, mais bon, ça faisait la même chose :-S

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    sub set_alive {
    	my ($self) = @_;
    	$alive = 1;
    }
    J'espère que c'est pas trop salement codé lol

    Merci pour ta réponse, Philou67430, et désolé de pas pouvoir chercher d'avantage.

  4. #4
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Par défaut
    Je comprends encore moins

  5. #5
    Membre éclairé Avatar de Balbuzard
    Profil pro
    Inscrit en
    Août 2008
    Messages
    381
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 381
    Par défaut
    OK, j'ai juste besoin d'une bascule; si j'appelle la fonction, elle passe la valeur à 1, si j'appelle set_dead (presque même code) elle passe la valeur à 0.

    Du coup, à partir d'une classe extérieure qui vérifie si l'hôte est vivant ou mort (joignable ou pas) je fixe la valeur à dead ou alive. Le reste de cette classe vérifie régulièrement la valeur de cette variable et en fonction, fait un traitement plutôt qu'un autre.

    $alive est une variable propre à la classe, et c'est la seule à en avoir besoin, donc pas besoin de getter.

    Je pense que mon setter est correct, non? en tout cas, il semble faire ce que je lui demande. Peut-être au niveau du code, c'est pas très propre?

    Merci, pour tes réponses!

  6. #6
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Par défaut
    Je ne comprends pas pourquoi tu n'as pas le même code ou presque qu'un getter/setter de propriété :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    package toto;
     
    my $alive = 0;
     
    sub alive {
      ($alive) = @_;
      return $alive;
    }
     
    1;
    Et pour écrire une bascule, en supposant que tu bascules entre les valeurs 0 et 1, tu peux l'écrire ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    sub alive_switch {
      $alive = 1 - $alive;
      return $alive;
    }
    En espérant avoir été utile.

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

Discussions similaires

  1. Les Getters et Setters en Java
    Par faressam dans le forum Débuter avec Java
    Réponses: 10
    Dernier message: 18/04/2012, 16h40
  2. getters and setters ?
    Par zippeurfou dans le forum Eclipse C & C++
    Réponses: 4
    Dernier message: 12/07/2008, 11h53
  3. Problème avec mon setter
    Par -={-_-}=- dans le forum Débuter avec Java
    Réponses: 9
    Dernier message: 03/06/2008, 10h20
  4. Réponses: 11
    Dernier message: 23/03/2007, 19h38
  5. Generation automatique des Getter et Setter
    Par VAPRO dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 23/03/2007, 12h11

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