3 votes

Quelle est la motivation des propriétés ?

Je suis un peu confus quant à la raison pour laquelle les langues en ont. Je suis un programmeur Java et je suis au début de ma carrière. Java est donc le seul langage dans lequel j'ai écrit depuis que j'ai commencé à le comprendre.

En Java, bien sûr, nous n'avons pas de propriétés et nous écrivons des méthodes getThis() et setThat(...).

Que gagnerions-nous à avoir des propriétés ?

Merci.

EDIT : autre question : quelles sont les conventions de dénomination dans les langues avec des propriétés ?

9voto

Coincoin Points 12823

Lequel vous semble le plus naturel ?

// A
person.setAge(25)
// B
person.age = 25;
// or
person.Age = 25; //depending on conventions, but that's beside the point

La plupart des gens répondront B.

Il ne s'agit pas seulement d'un sucre syntaxique, mais aussi d'une aide à la réflexion ; vous pouvez en effet faire la différence entre les données et les opérations sans avoir recours au nom des méthodes.

Voici un exemple en C# pour ceux qui ne sont pas familiers avec les propriétés :

class Person
{
    public int Age
    {
        set
        {
            if(value<0)
                throw new ArgumentOutOfRangeException();

            OnChanged();
            age = value;
        }

        get { return age; }
    }

    private int age;
    protected virtual void OnChanged() { // ... }
}

En outre, la plupart des gens utilisent toujours les propriétés plutôt que de promouvoir un membre public ultérieurement pour la même raison que nous utilisons toujours get/set ; il n'est pas nécessaire de réécrire l'ancien code client lié aux membres de données.

7voto

Jordan Miner Points 1476

La syntaxe est beaucoup plus agréable :

button.Location += delta;

que :

button.setLocation(button.getLocation() + delta);

6voto

TofuBeer Points 32441

Editar:

Le code ci-dessous suppose que vous faites tout à la main. Dans mon exemple, le compilateur génère les méthodes simples get/set et convertit tous les accès directs aux variables en ces méthodes. Si ce n'était pas le cas, le code client devrait être recompilé, ce qui va à l'encontre d'une grande partie du but recherché.

Original :

Le principal argument en faveur des propriétés est qu'elles suppriment la nécessité de recompiler votre code si vous passez d'une variable à une méthode.

Par exemple :

public class Foo
{
    public int bar;
}

Si nous décidions par la suite de valider le "bar", nous devrions procéder de la sorte :

public class Foo
{
    private int bar;

    public void setBar(final int val)
    {
        if(val <= 0)
        {
            throw new IllegalArgumentException("val must be > 0, was: " + val);
        }

        bar = val;
    }

    public int getBar()
    {
        return (bar);
    }
}

Mais ajouter la méthode set/get casserait tout le code. Si cela se faisait via les propriétés, vous pourriez ajouter la validation après coup sans casser le code client.

Personnellement, je n'aime pas cette idée - je suis beaucoup plus heureux avec l'idée d'utiliser l'annotation et d'avoir le simple set/get geterated automatiquement avec la possibilité de profiler vos propres implémentations set/get si nécessaire (mais je n'aime pas les appels de méthode cachés).

3voto

cletus Points 276888

Pour deux raisons :

  1. une syntaxe nettoyée et allégée
  2. Il indique plus clairement à l'utilisateur de la classe la différence entre l'état (propriétés) et le comportement (méthodes).

2voto

Chris Klepeis Points 4292

En Java, les getters et setters sont en fait des propriétés.

Dans d'autres langages modernes (c#), etc., la syntaxe est simplement plus facile à travailler et à comprendre.

Ils sont inutiles et il existe des solutions de contournement dans la plupart des cas.

C'est vraiment une question de préférence, mais si le langage que vous utilisez les supporte, je vous recommande de les utiliser :)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X