Почему придерживаются получать-набора и не car.speed () и car.speed (55) соответственно?

Кроме однозначной ясности, почему должен, мы придерживаемся:
car.getSpeed() и car.setSpeed(55)
когда это могло использоваться также: car.speed() и car.speed(55)

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

Кроме того, очевидно, я понимаю это car.speed() и car.speed(55) та же функция, которая делает эту несправедливость, но затем в PHP и также в Платформе Зенда, то же действие используется для, ДОБИРАЮТСЯ, POST, обратные передачи.
В VB и C# там "свойства" и используются многими, очень к отвращению пуристов, которых я услышал, и существуют вещи в Ruby как 5.times и .each, .to_i и т.д.
И у Вас есть перегрузка оператора, множественное наследование, виртуальные функции в C++, определенные комбинации которого могли свести любого с ума.

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

Что касается меня, моя причина состоит в том, что это коротко и более чисто для чтения кода.
Я очень неправильно, немного неправильно, это просто нечетно и так не используемое, или что еще?

Если я все еще решаю остаться корректным, я мог бы использовать car.speed() и car.setSpeed(55).
Та несправедливость всегда (просто опускающий "получение")?

Спасибо за любые объяснения.

12
задан crowne 3 November 2010 в 16:40
поделиться

12 ответов

Если я позвонил CAR.SPEED (), я мог бы подумать, что я говорю машину скорости, другими словами, чтобы увеличить скорость и сломать ограничение скорости. Это не явно добыча.

Некоторые языки позволяют вам объявлять объекты const, а затем ограничивать вас только для вызова функций, которые не изменяют данные объекта. Таким образом, необходимо иметь отдельные функции для модификации и чтения операций. Хотя вы можете использовать перегрузки на параметров, чтобы иметь две функции, я думаю, что это будет запутано.

Также, когда вы говорите, что это понятно читать, я могу утверждать, что я должен сделать вид впереди, чтобы понять, как это прочитать:

car.speed()

Я читаю «скорость автомобиля ...», а потом я вижу, что есть Нет номера, поэтому я пересматриваю и думаю, «получить скорость автомобиля».

car.getSpeed()

Я читаю «Для этого автомобиля, получите скорость»

car.setSpeed(55)

Я читаю «для этого автомобиля, установить скорость до 55»

, кажется, вы в основном привели другие функции языка как спутать, а затем использовали это Как защита за получение Getter / Benters более запутанно? Это почти звучит, как признают, что то, что вы предложили, является более запутанным. Эти особенности иногда путают из-за того, насколько они общего назначения. Иногда абстракции могут быть более запутанными, но в конце концов они часто служат целей более многоразовой. Я думаю, что если бы вы хотели спорить в пользу скорости () и скорости (55), вы хотите показать, как это может включить новые возможности для программиста.

С другой стороны, C # имеет что-то подобное то, что вы описываете, поскольку свойства ведут себя по-разному как добыча или установка в зависимости от контекста в том, что они используются:

Console.WriteLine(car.Speed); //getter

car.Speed = 55 //setter

, но пока это одно имущество, есть два Отдельные разделы кода для реализации получении и настройки, и понятно, что это Getter / Setter, а не скорость функции, поскольку они опускают () для свойств. Таким образом, Car.speed () явно функция, а автомобиль. Скорое явно является недвижимостью Getter.

10
ответ дан 2 December 2019 в 04:43
поделиться

Что, если вы намерены вызвать сеттер, но забудьте поставить в аргумент? Код действителен, поэтому компилятор не жалуется, и он не бросает немедленную ошибку времени выполнения; Это бесшумная ошибка.

0
ответ дан 2 December 2019 в 04:43
поделиться

Конечные ориентиры вашего кода должны Будь это:

  1. это работает правильно?
  2. легко исправить, если он ломается?
  3. легко добавлять новые функции в будущем?
  4. это легко для того, чтобы кто-то еще Исправьте / улучшите его?

Если эти 4 балла покрыты, я не могу представить, почему у кого-то будет проблемой с ним. Большая часть «лучших практик», как правило, ориентирована на достижение этих 4 баллов.

Используйте, какой стиль для вас работает, просто будет соответствовать этому, и вы должны быть в порядке.

1
ответ дан 2 December 2019 в 04:43
поделиться

Технически невозможно, поскольку преобразование может включать операцию перекоса , которая превращает изображение в параллелограмм, и угол поворота больше не определяется.

В любом случае, поскольку матрица поворота генерирует

 cos(x)  sin(x)   0
-sin(x)  cos(x)   0
   0        0     1

можно восстановить угол с помощью

return atan2(transform.b, transform.a);
-121--1316102-

Это аналогично разнице между int и Integer в Java.

Согласно стандарту, при попытке вызова метода последовательностей автоматически преобразуются в объекты Последовательностей . См. ECMA 262-3 раздел 11,2,1 ; шаг 5 вызывает ToObject (который определен в разделе 9,9).

Средства доступа к свойствам 11,2,1
[...]
Производственное выражение MemberExpression: MemberExpression [Expression] вычисляется следующим образом:

  1. Evaluate MemberExpression.
  2. Вызов GetValue (результат (1)).
  3. Вычислить выражение.
  4. Вызов GetValue (результат (3)).
  5. Вызов ToObject (результат (2)).
  6. Вызов ToString (результат (4)).
  7. Возвращает значение типа Reference, базовым объектом которого является Result (5) и именем свойства которого является Result (6).


9,9 ToObject

Оператор ToObject преобразует свой аргумент в значение типа Object согласно следующей таблице:
[...]
Создать новый ряд, свойству [[value]] которого присвоено значение последовательность. Последовательность см. в разделе 15.5.

Как метод спецификации, это взлом, чтобы объяснить, как последовательности может показаться, что у них есть методы, даже если они на самом деле не являются объектами.

Кроме того, обертывающие объекты не очень полезны. Я не знаю, почему они на языке. Лучше бы их не было.:)

-121--929832-

Это просто вопрос соглашения. В Smalltalk это сделано так, путь вы предлагаете, и я не припоминаю, чтобы кто-нибудь жаловался на это. Скорость автомобиля - скорость автомобиля , а настройка скорости автомобиля до 55 - скорость автомобиля: 55 .

Если бы я рискнул предположить, я бы сказал, что причина, по которой этот стиль не зацепился, в том, что из-за двух строк, которые объектно-ориентированное программирование пришло к нам: C++ и Objective-C. В C++ (ещё более рано в его истории) методы очень тесно связаны с C-функциями, а C-функции условно именуются по линиям setWhather () и не имеют перегрузки для разного количества аргументов, так что общий стиль именования сохранялся. Objective-C была в значительной степени сохранена NeXT (который позже стал Apple), и NeXT склонен предпочитать многословность в своих API и особенно различать различные виды методов - если вы делаете что-либо, кроме просто доступа к свойству, NeXT хотел, чтобы глагол дал понять. Так что это стало конвенцией в Какао, которая де-факто является стандартной библиотекой для Objective-C в наши дни.

1
ответ дан 2 December 2019 в 04:43
поделиться

Это соглашение Java имеет соглашение геттеров и сеттеров C# имеет свойства, python имеет публичные поля, а JavaScript-фреймворки имеют тенденцию использовать field() для получения и field(value) для установки

.
1
ответ дан 2 December 2019 в 04:43
поделиться

Нет правильного ответа, это дело в стиле, и в конечном итоге это не имеет значения. Проведите свои циклы мозга в другом месте.

FWIW Я предпочитаю класс . On () для Getter и Class.verb () для установки. Иногда глагол просто установлен (), но в других случаях нет. Это зависит от существительного. Например:

my_vector.size() 

возвращает размер, а

my_vector.resize(some_size) 

меняет размер.

3
ответ дан 2 December 2019 в 04:43
поделиться

Вы делаете что-то фанк с цепью классов классов? Вы звоните Стажером () на кучу строк?

-121--2316266-

FYI, Objective-C использует CAR.SPEED () и CAR.SETSPEED (55) (за исключением различного синтаксиса, [Скорость автомобиля] и [Автомобильная настройка: 55] .

Это все о конвенции.

3
ответ дан 2 December 2019 в 04:43
поделиться

Я предпочитаю активные объекты, которые инкапсулируют операции, а не с помощью Getter и Benters, поэтому вы получаете семантически богатые объекты.

Например, хотя ADT, а не бизнес-объект, даже в Vector в C ++ имеет парные функции:

size_type capacity() const // how many elements space is reserved for in the vector  
void reserve(size_type n)  // ensure space is reserved for at least n elements 

и

void push_back ( const T& ) // inserts an element at the end
size_type size () const     // the number of elements in the vector

Если вы едете на автомобиль, вы можете установить ускоритель, сцепление , тормоза и выделение передач, но вы не устанавливаете скорость. Вы можете прочитать скорость со спидометра. Это относительно редко, чтобы хотеть как сюжету, так и добыча на объекте с поведением.

4
ответ дан 2 December 2019 в 04:43
поделиться

IMHO Стиль Свойства Свойства в виде синтатического сахара для получения и установочных методов является наиболее выразительным.

8
ответ дан 2 December 2019 в 04:43
поделиться

Гроовитный подход к свойствам является довольно превосходным ИМХО, http://grovy.codehaus.org/groovy+beans

1
ответ дан 2 December 2019 в 04:43
поделиться

кроме однозначной ясности, почему мы должны придерживаться: car.getspeed () и car.setspeed (55) Когда это можно было бы также использовать: car.speed () и car.speed (55)

, потому что на всех языках я столкнулся, Car.speed () и CAR.SPEED (55) одинаковы с точки зрения синтаксиса. Просто смотрите на них так, оба могут вернуть значение, которое не верно для последнего, если это должно было быть установкой.

0
ответ дан 2 December 2019 в 04:43
поделиться

. () Означает, что это глагол. нет () означает существительное.

   car.Speed = 50;
   x = car.Speed
   car.Speed.set(30)
   car.setProperty("Speed",30)

Но

   car.Speed()

подразумевает команду превышать ограничение скорости.

0
ответ дан 2 December 2019 в 04:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: