Я столкнулся с проблемой в угловом случае под общим руководством:
- существительные для переменных
- глаголы для функций
В частности, у меня есть случай, когда слово неоднозначно - это может быть глагол или существительное. И в некоторых случаях, когда мы обсуждаем приложение, оно будет использоваться обоими способами в одном предложении.
Я намерен сделать так, чтобы программа оставалась читаемой как для будущих разработчиков, так и для меня, когда я вернусь к разделам кода несколько месяцев спустя.
Один из примеров с battery
. А battery
имеет, charge
и вы также можете charge()
аккумулятор.
Я думаю , что наличие как Battery.Charge
и Battery.Charge(value)
будет сбивать с толку разработчиков в будущем.
Мое текущее решение состоит в том, чтобы просто выбрать другое слово для одного или обоих из этих случаев (переменная и функция). Моя проблема с этим подходом заключается в том, Battery
что переменная и функция объекта charge
не будут согласовываться с обсуждением проекта с участием Battery
.
У меня вопрос, есть ли другой / лучший способ справиться с этим конфликтом в соглашении об именах?
Некоторое дополнительное чтение на предмете. Никто на самом деле не обратился к конкретному моему вопросу.
enqueue
это слово, но это глагол в Java. Как насчетdoCharge
? Он по-прежнему не пройдет тест на симметрию, потому что ваши другие методы не будут иметь этот префиксОтветы:
В подобных ситуациях я пытаюсь найти синонимы. В этом случае я бы использовал «перезарядку» для глагола. «Ре» немного избыточен, но смысл ясен. Использование простого «заряда» для оставшегося заряда в аккумуляторе неоднозначно, потому что оно не указывает никаких физических единиц. Я бы предпочел «availableAmpHours», «hoursUntilRecharge» или что-то подобное. Единицы будут зависеть от того, что удобно для приложения.
Мое личное предпочтение - использовать глаголы только для функций, которые меняют состояние. Я использую существительные для не мутирующих функций. Я полагаю, это зависит от вашей точки зрения. На уровне машины не изменяющие функции что-то делают, а на уровне модели - нет.
источник
Просто добавьте это, но, возможно, решением для этого случая двусмысленности имен является полное удаление этой функциональности из батареи. Я никогда не видел самозаряжающуюся батарею, и для меня было бы больше смысла иметь класс BatteryCharger. Это поможет сохранить ваши проблемы более разъединенными и сделает действие более явным.
battery.Charge(50)
противbatteryCharger.Charge(battery, 50)
Для меня вторая форма гораздо более понятна и хранит весь ваш код "Зарядка" в одном месте, а не разбрасывает его по всем классам батарей.
источник
Battery
это абстракция для системы аккумулятор + зарядка. Наше приложение не требует разделения двух аспектов на отдельные объекты, поэтомуBattery
для удобства они объединены в один (иначе ). В конечном счете, физика заряжаемой батареи диктует, что она имеет какую-то функцию для принятия заряда.Избегайте двойных значений
Вы сознательно выбрали слово, которое имеет более одного значения, и первое решение - это проблема. Есть масса слов, которые проблематичны для программистов. Другой пример будет
phone
. Вы можетеphone
кого-то, или вы могли бы иметьphone
в своем кармане.Используйте геттеры и сеттеры
Стандартным наименованием для большинства объектов являются методы получения / настройки свойств.
Свойства являются состояниями, а не существительными
Я думаю, что вы ошибаетесь, классифицируя свойства объекта как существительные, а переменные также могут рассматриваться как состояния. Это государства, имеющие отношение к локальной сфере их существования.
Вы могли бы описать значение, которое они считают существительным, но я не уверен, что это верно во всех случаях.
В терминологии ООП свойства объекта описывают состояние этого объекта. В вашем случае
Battery
это объект, и этоCharge
состояние. Так что это будет свойство объекта, но это зависит от контекста его использования.Если вам нужно уметь работать
Charge
от батареи, а также знать, какой у нее токCharge
, то у вас проблема.Использование Scope для реализации контекста
Контекст - это то, что прояснит, какое значение слова вы намереваетесь передать методом или свойством. Scope устанавливает доступность свойства / метода извне объекта.
Методы - это глаголы
Вы можете описать метод объекта как глагол, но слово action лучше подходит. В терминологии ООП вы выполняете действия над объектами, используя их методы. Нехорошо модифицировать свойство объекта снаружи объекта. Предпочтительно вызывать метод, который выполняет необходимые действия, которые вызывают изменение его состояния.
Слово
Charge
это глагол, но это также существительное. При использовании для вызова метода действия становится ясно, что глагол используетсяBattery.Charge(....)
.Но контекст очень важен. Хотя слово
Charge()
это глагол, оно не так значимо, какstartCharging()
.Правильные методы
Battery
могут включать в себяCharging
,Discharging
,setCharge
,getCharge
,hasCharge
,Discharge
иCharged
.Простые методы одно слово часто явно не излагают свои действия четко, но есть некоторые случаи , как
open
иclose
где мало объяснения требуется.Так что на самом деле нет правильного ответа относительно того, как называть эти типы свойств / методов. За исключением того, что вам нужно использовать вышеупомянутые методы с умом, чтобы не было путаницы.
источник
StartCharge()
иEndCharge()
подразумевает. Фактически, эта терминология привела бы к значительным накладным расходам при работе с аккумуляторной системой. На каждом интервале это может бытьCharge()
либоDischarge()
.Charge
оказывается наиболее легко понять неоднозначное слово для этой области. Есть несколько других.Добавьте к ним глаголы, которые сделают их глаголом или существительным.
источник
Для глагола, я думаю,
Charge
все в порядке. Для существительного, будет лиgetCurrentChargeLevel
работать на вас?источник
getCurrentChargeLevel()
будет ли по-прежнему ссылаться на внутреннюю переменнуюBattery
, и каким будет имя этой переменной?Battery.currentChargeLevel
может сработать что-то подобное . Вы можете попробовать использоватьBattery.coloumbs
или,Battery.ampereHours
но это может быть не так очевидно ...Charge
это то,Energy
чтоPower
(Вольт * Ампер == Ватт) умножается на время. Так что в этом случае, заряд - это число. Существует также состояние заряда, которое составляет процент.Watt*time
определенно не согласуется с разговорами о дизайне, ноChargeLevel
будет.В большинстве случаев добавление вспомогательного глагола, наречия или прилагательного достаточно для их различения и может помочь в понимании. В случае использования Charge и Charge () на аккумуляторе, делающем это, DeltaCharge () может показать, что это функция, которая может обрабатывать как зарядку, так и разрядку.
Дельта (в случаях, когда есть изменения, но неоднозначные) - это модификатор, который я использую и рекомендую всем остальным для передачи изменений в состоянии (даже если глагол полуочевиден).
источник
Венгерская нотация на помощь. Вы можете иметь
intCharge
иfcnCharge(value)
, таким образом, избежать путаницы и не добавлять сумасшедшее длинное имя, когда три буквы будут работать просто отлично.Или вы можете просто использовать то же имя и позволить IDE справиться с этим. В любом случае создание более длинного или другого имени может быть столь же запутанным в долгосрочной перспективе.
источник