Кроме однозначной ясности, почему должен, мы придерживаемся:
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)
.
Та несправедливость всегда (просто опускающий "получение")?
Спасибо за любые объяснения.
Если я позвонил 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.
Что, если вы намерены вызвать сеттер, но забудьте поставить в аргумент? Код действителен, поэтому компилятор не жалуется, и он не бросает немедленную ошибку времени выполнения; Это бесшумная ошибка.
Конечные ориентиры вашего кода должны Будь это:
Если эти 4 балла покрыты, я не могу представить, почему у кого-то будет проблемой с ним. Большая часть «лучших практик», как правило, ориентирована на достижение этих 4 баллов.
Используйте, какой стиль для вас работает, просто будет соответствовать этому, и вы должны быть в порядке.
Технически невозможно, поскольку преобразование может включать операцию перекоса , которая превращает изображение в параллелограмм, и угол поворота больше не определяется.
В любом случае, поскольку матрица поворота генерирует
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] вычисляется следующим образом:
- Evaluate MemberExpression.
- Вызов GetValue (результат (1)).
- Вычислить выражение.
- Вызов GetValue (результат (3)).
- Вызов ToObject (результат (2)).
- Вызов ToString (результат (4)).
- Возвращает значение типа 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 в наши дни.
Это соглашение Java имеет соглашение геттеров и сеттеров C# имеет свойства, python имеет публичные поля, а JavaScript-фреймворки имеют тенденцию использовать field() для получения и field(value) для установки
.Нет правильного ответа, это дело в стиле, и в конечном итоге это не имеет значения. Проведите свои циклы мозга в другом месте.
FWIW Я предпочитаю класс . On () для Getter и Class.verb () для установки. Иногда глагол просто установлен (), но в других случаях нет. Это зависит от существительного. Например:
my_vector.size()
возвращает размер, а
my_vector.resize(some_size)
меняет размер.
Вы делаете что-то фанк с цепью классов классов? Вы звоните Стажером ()
на кучу строк?
FYI, Objective-C использует CAR.SPEED ()
и CAR.SETSPEED (55)
(за исключением различного синтаксиса, [Скорость автомобиля]
и
[Автомобильная настройка: 55]
.
Это все о конвенции.
Я предпочитаю активные объекты, которые инкапсулируют операции, а не с помощью 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
Если вы едете на автомобиль, вы можете установить ускоритель, сцепление , тормоза и выделение передач, но вы не устанавливаете скорость. Вы можете прочитать скорость со спидометра. Это относительно редко, чтобы хотеть как сюжету, так и добыча на объекте с поведением.
IMHO Стиль Свойства Свойства в виде синтатического сахара для получения и установочных методов является наиболее выразительным.
Гроовитный подход к свойствам является довольно превосходным ИМХО, http://grovy.codehaus.org/groovy+beans
кроме однозначной ясности, почему мы должны придерживаться: car.getspeed () и car.setspeed (55) Когда это можно было бы также использовать: car.speed () и car.speed (55)
, потому что на всех языках я столкнулся, Car.speed ()
и CAR.SPEED (55)
одинаковы с точки зрения синтаксиса. Просто смотрите на них так, оба могут вернуть значение, которое не верно для последнего, если это должно было быть установкой.
. () Означает, что это глагол. нет () означает существительное.
car.Speed = 50;
x = car.Speed
car.Speed.set(30)
car.setProperty("Speed",30)
Но
car.Speed()
подразумевает команду превышать ограничение скорости.