Про названия методов
От: Janis Россия  
Дата: 14.12.03 21:52
Оценка:
Допусим, у нас есть класс A с переменной x. Как правило, для доступа к ней используются методы SetX и GetX:
class A
{
public:
    int GetX () { return _x; }
    void SetX (int x) { _x = x; }
private:
    int _x;
};


А почему не используется полиморфизм, вида:
class A
{
public:
    int X () { return _x; }
    void X (int x) { _x = x; }
private:
    int _x;
};


Мне кажется, что это как-то связано с удобочитаемостью программ. А каково Ваше мнение?
Re: Про названия методов
От: HeaveN Россия  
Дата: 14.12.03 22:23
Оценка:
Здравствуйте, Janis, Вы писали:

J>Мне кажется, что это как-то связано с удобочитаемостью программ. А каково Ваше мнение?


Именно с этим и связано. При чтении видно действие. Ведь гораздо проще воспринимается функция WriteFile, чем, скажем, wf.
... << RSDN@Home 1.1.2 beta 2 >>
Нет такого закона, что человеку летать нельзя...
Re: Про названия методов
От: Aquary Россия https://wmspanel.com/
Дата: 15.12.03 00:11
Оценка: +1
Здравствуйте, Janis, Вы писали:

J>Допусим, у нас есть класс A с переменной x. Как правило, для доступа к ней используются методы SetX и GetX:

.....
J>Мне кажется, что это как-то связано с удобочитаемостью программ. А каково Ваше мнение?

Теперь представь, что тебе в функцию задания переменной захочется сделать значание по умолчанию?


class A
{
public:
    int X () { return _x; }
    void X (int x = 1) { _x = x; }
private:
    int _x;
};


ты вызываешь функцию X(). Посторонний человек, читающий прогу, не сможет сразу "с наскоку" понять о чем речь. Нет, поймет конечно, но удобочитаемость пострадает.

Кроме того, достаточно часто в доках по стилям программирования вообще и по стилям кодирования в частности встречаю фразу о том, что имена функций должны содержать глагол. Опять же, в целях удобочитаемости...
https://wmspanel.com/nimble — Nimble Streamer media server for live and VOD HLS, RTMP, HTTP streaming
https://wmspanel.com/ — Control and reporting panel for Wowza and Nimble Streamer
http://scm-notes.blogspot.com/ — Блог об управлении конфигурацией
Re: Про названия методов
От: Nikto Россия  
Дата: 15.12.03 04:01
Оценка:
Здравствуйте, Janis, Вы писали:

J>Допусим, у нас есть класс A с переменной x. Как правило, для доступа к ней используются методы SetX и GetX:


J>А почему не используется полиморфизм, вида:


J>Мне кажется, что это как-то связано с удобочитаемостью программ. А каково Ваше мнение?


ИМХО, фигня это все — как тебе удобнее так и пиши. Главное!!! пиши всегда одним способом.
Re: Про названия методов
От: Кодт Россия  
Дата: 15.12.03 10:43
Оценка:
Здравствуйте, Janis, Вы писали:

J>Допусим, у нас есть класс A с переменной x. Как правило, для доступа к ней используются методы SetX и GetX:

J>А почему не используется полиморфизм, вида:
J>
J>class A
J>{
J>public:
J>    int X () { return _x; }
J>    void X (int x) { _x = x; }
J>private:
J>    int _x;
J>};
J>


J>Мне кажется, что это как-то связано с удобочитаемостью программ. А каково Ваше мнение?


Используется. В STL: std::stream::rdbuf()
streambuf* rdbuf() const; // текущий буфер
streambuf* rdbuf(streambuf* newbuf); // сменить буфер

Хотя это и не лучший пример для подражания, имхо.

ЗЫ.
Если тебя так колбасит от SetX|GetX, то напиши адаптер
class A
{
private:
  int x_;

  friend class A::X;
  int getx() const { return x_; }
  void setx(int x) { x_ = x; }
public:
  class X
  {
  private:
    A* host_;
    X(A* host) : host_(host) {}
    friend class A;
  public:
    operator int() const { return host_->getx(); }
    X& operator=(int x) const // константный, потому что rvalue X(this) приводится к lvalue const X&.
    { return host_->setx(); return *this; }
  };

  int x() const { return getx(); }
  X x() { return X(this); }
};

Естественно, все это можно делать на шаблоне.
Перекуём баги на фичи!
Re: Про названия методов
От: Kluev  
Дата: 18.12.03 09:39
Оценка:
Здравствуйте, Janis, Вы писали:

J>А почему не используется полиморфизм, вида:

J>
J>class A
J>{
J>public:
J>    int X () { return _x; }
J>    void X (int x) { _x = x; }
J>private:
J>    int _x;
J>};
J>


J>Мне кажется, что это как-то связано с удобочитаемостью программ. А каково Ваше мнение?


С точки зрения удобства и логики лучше всего юзать
struct Foo {
    int x_get();
    void x_set( int x );
};


Более подробно:
http://rsdn.ru/Forum/Message.aspx?mid=220266
Автор: Kluev
Дата: 21.03.03
Re: Про названия методов
От: Matvey Россия  
Дата: 19.12.03 10:20
Оценка:
Здравствуйте, Janis, Вы писали:

J>Допусим, у нас есть класс A с переменной x. Как правило, для доступа к ней используются методы SetX и GetX:

J>
J>class A
J>{
J>public:
J>    int GetX () { return _x; }
J>    void SetX (int x) { _x = x; }
J>private:
J>    int _x;
J>};
J>


J>А почему не используется полиморфизм, вида:

J>
J>class A
J>{
J>public:
J>    int X () { return _x; }
J>    void X (int x) { _x = x; }
J>private:
J>    int _x;
J>};
J>


J>Мне кажется, что это как-то связано с удобочитаемостью программ. А каково Ваше мнение?


А в C# вообще такой проблемы нет:


public class A
{
   private int _x;
   
   public X
   {
      get
        {
           return _x;
        }
      set
        {
           _x = value;
        }
   }
}

public class B
{
   private A ma;
   public int x;

   public B()
   {
       ma = new A();
       ma.X = 5;
       x = ma.X * 10;
   }
}
Re: Про названия методов
От: Lloyd Россия  
Дата: 23.12.03 10:15
Оценка:
Здравствуйте, Janis, Вы писали:

J>А почему не используется полиморфизм, вида:

J>
J>class A
J>{
J>public:
J>    int X () { return _x; }
J>    void X (int x) { _x = x; }
J>private:
J>    int _x;
J>};
J>


А где здесь полиморфизм?
... << RSDN@Home 1.1.2 beta 1 >>
Re[2]: Про названия методов
От: Vladimir Khatzkevich Россия  
Дата: 23.12.03 18:33
Оценка:
Здравствуйте, Aquary, Вы писали:

A>Теперь представь, что тебе в функцию задания переменной захочется сделать значание по умолчанию?



class A
{
public:
    int X () { return _x; }
    void X (int x = 1) { _x = x; }  // не надо так делать
private:
    int _x;
};


A>ты вызываешь функцию X(). Посторонний человек, читающий прогу, не сможет сразу "с наскоку" понять о чем речь. Нет, поймет конечно, но удобочитаемость пострадает.

Лично я не пойму И не только я, компилятор не поймёт тоже:

int _tmain(int argc, _TCHAR* argv[])
{
    A a;
    a.X();  // error: 'A::X' : ambiguous call to overloaded function
    return 0;
}


В целом я согласен с Aquary.
ИМХО, лучше использовать имена с "Get"("Is" для булевых переменных) и "Set". Немного жаль, что в C++ нет пропертей.
Любая сложная технология неотличима от волшебства. (Артур Кларк)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.