LINUX.ORG.RU

Get*/Set* отдельными методами или одним, какой вариант более православный?

 


1

5

Приветствую, пишу портянку и всплыл вопрос, какой из двух вариантов на ваш взгляд православней и почему?

class A {
public:
    int  getVal() { return _val; }
    void setVal(int val) { _val = val; }
private:
    int _val;
}

или получение и установку переменной-члена класса объединить в одном методе:

class A {
public:
    int val(int val=-1) { if(val > -1) return _val; else _val = val; }
private:
   int _val;

}
имеет ли второй вариант право на жизнь, или он только для хипстеров волосатых под накуркой? )

★★★★★

Ответ на: комментарий от evilface

А если изменение value надо как-то отметить?

Если надо будет - никогда не поздно написать:

class ValueOwner:
    def __init__(self, value=None):
        self.value = value

    @property
    def value(self):
        return self._value

    @value.setter
    def value(self, value):
        print('Я отметил!')
        self._value = value

    _value = None

foo = ValueOwner()
foo.value = 10
a = foo.value
Esper ()
Ответ на: комментарий от Esper

Прочитай, на что я ответил, а потом внимательно моё сообщение. Особенно обрати внимание на «я знаю» и «если бы не было».

evilface ★★ ()

Второй — говно. Надо так:

template <typename T>
class A {
public:
    const T& val() const { return _val; }
    void val(const T& val) { _val = val; }

private:
    T /*карданный*/ _val;
};

KennyMinigun ★★★★★ ()
Ответ на: комментарий от KennyMinigun

Пойдёт, если все свойства одного типа...

xterro ★★★★★ ()
Ответ на: комментарий от peregrine

+ построение fluent api, типа setX().setY().setZ().doit()

dib2 ★★★★★ ()
Ответ на: комментарий от yoghurt

геттеры и сеттеры не нужны

да

даешь прямой доступ

нет

если уж ссылаешься на меня, то хоть не перевирай

jtootf ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.