Является ли «getSomething()» неправильным шаблоном именования метода?

#oop #coding-style #naming-conventions

#ооп #стиль кодирования #соглашения об именовании

Вопрос:

Методы должны указывать объектам, что делать, например:

 circle.paint()
  

Но если я сообщу объекту getSomething() , я бы сказал объекту получить «что-то» (из любого места) и не возвращать «что-то», каково типичное использование get методов ( getName() вернуло бы «имя»).

Я думаю, что правильнее было бы назвать метод returnSomething() .

Так get (как обычно используется) является неправильным шаблоном именования?

Ответ №1:

Соглашение, вероятно, варьируется в зависимости от используемого вами языка, в php (который не поддерживает методы получения / установки) довольно распространено следующее:

$myObject=>setSomething($value) — устанавливает внутреннюю переменную $MyObject, представляющую ‘something’, в $value

$myObject=>getSomething() — возвращает внутреннюю переменную $MyObject, представляющую «нечто»

Это менее распространено в таких языках, как C #, которые поддерживают методы получения / установки, где вы, вероятно, сделали бы следующее:

 public object Something {
  get { return _something; }
  set {  _something = value; }
}
  

Затем вы можете использовать синтаксис dot для доступа к частной переменной:

 myObject.Something="something";
string value=myObject.Something;
  

Комментарии:

1. Это похоже на соглашение Java, но, возможно, эти соглашения плохие с точки зрения ооп.

Ответ №2:

Я лично не использую Get префикс.

Единственный префикс, который я использую для методов, которые что-то извлекают, — это Is для «индикаторов».
Например, оплата.IsOverdue()

Что касается методов установки — они не должны существовать.
Состояние объекта должно определяться само по себе посредством вызываемого поведения.

Get в этом нет необходимости, потому что, когда мы запрашиваем что-то, для именования следует использовать существительные.

Комментарии:

1. Возможно, get это всего лишь плохое решение для языков без свойств.

Ответ №3:

Демон, прежде всего, я думаю, что это как бы зависит от языка.Во-вторых, у меня есть для вас эти рекомендации по именованию методов.

Ниже приведены примеры методов с правильными именами.

removeAll()

GetCharArray()

Invoke()

Я также могу сказать, что в компании, в которой я работаю, мы всегда используем такие имена, как GetSomething() , GetYourAcceptRateHigher() для наших методов.