Зачем?
Префиксы помогают разработчикам быстро понять предназначение переменных и функций, что особенно полезно в больших проектах или когда код должен быть понятен новым участникам команды. Вот некоторые из популярных:
-
Префиксы
is
,has
,can
,should
:Улучшают читаемость кода: Ясно указывают на то, что переменная содержит логическое (булево) значение.
Упрощают написание условных конструкций: Программист может легко написать условия, основываясь на этих префиксах, например,
if (canSave) {...}
.
-
Префиксы
min
,max
:Четко определяют ограничения: Помогают установить и соблюдать границы значений для переменных, что важно во многих алгоритмах и бизнес-логиках.
-
Префиксы
prev
,next
:Полезны в алгоритмах и структурах данных: Особенно актуальны при работе с списками, деревьями и другими структурами, где необходимо отслеживать элементы до или после текущего.
-
Префиксы
total
,count
,num
:Описывают количественные характеристики: Идеально подходят для переменных, которые хранят количество элементов, общие суммы и т.д., делая код интуитивно понятным при работе с числами.
Использование этих префиксов не только повышает читаемость кода, но и делает его более структурированным и легким для понимания. Это, в свою очередь, упрощает поддержку и развитие проекта в долгосрочной перспективе.
Переменные
Префикс is
Префикс is
обычно используется для булевых переменных, которые представляют состояние или качество. Этот префикс говорит о том, что переменная содержит ответ на вопрос "Это...?" или "Это в состоянии...?". Примеры:
isActive
— активен ли?isCompleted
— завершен ли?isVisible
— видим ли?isStart
— это начало?
Префикс has
Префикс has
используется, когда переменная указывает на наличие чего-либо. Это может быть свойство, элемент или некоторая возможность. Примеры:
hasChildren
— имеются ли дети (подразумеваются дочерние элементы в дереве компонентов, например)?hasHeader
— имеется ли заголовок?hasStarted
— началось ли что-то?
Примеры выбора
В зависимости от контекста:
Если хотите указать, что процесс или действие началось, правильнее будет использовать
hasStarted
.Если переменная должна указывать на то, что какой-то объект или сущность является "стартом" или начальной точкой, лучше подойдет
isStart
.
Если ваша переменная должна указывать на то, что сейчас идет начало чего-то (например, начало процесса), можно использовать hasStarted
или isStarting
. Если же переменная относится к начальной точке или объекту, который является начальным в каком-либо контексте (например, стартовая позиция), тогда isStart
может быть более подходящим выбором.
Префикс can
Префикс can
используется для переменных, которые указывают на возможность выполнения действия. Это подразумевает разрешение или способность что-то сделать. Например:
canEdit
— может ли пользователь редактировать содержимое.canSave
— может ли пользователь сохранить изменения.canDelete
— может ли пользователь удалить элемент.
Префикс should
Префикс should
часто используется для управления условным поведением, особенно в тестах или в коде, где необходимо выполнить условие. Например:
shouldUpdate
— должно ли обновиться состояние или компонент.shouldRender
— должен ли компонент рендериться.shouldFetchData
— должны ли загружаться данные.
Префикс count или num
Для переменных, хранящих числовые значения, особенно если они относятся к количеству чего-либо, можно использовать префикс count
или num
. Например:
countItems
— количество предметов.numPages
— количество страниц.countErrors
— количество ошибок.
Префикс min и max
Префиксы min
и max
используются для обозначения минимального и максимального значений соответственно. Это может быть полезно в настройках и конфигурациях. Например:
minLength
— минимальная длина.maxHeight
— максимальная высота.minPrice
— минимальная цена.
Префикс prev и next
Эти префиксы используются для отслеживания предыдущего или следующего состояний в реактивных фреймворках или когда нужно сохранять историю изменений. Например:
prevValue
— предыдущее значение переменной.nextItem
— следующий элемент в списке.
Префикс total
Для общих сумм или итоговых значений используется префикс total
. Это помогает в расчетах и подведении итогов. Например:
totalPrice
— общая цена.totalScore
— общий счет.
Префикс to
Для обозначения переменных, которые содержат объекты или коллекции объектов, над которыми нужно произвести определенное действие.
toDelete
— список объектов или индексов, которые нужно удалить.toKeep
— список объектов или индексов, которые нужно оставить.toUpdate
— элементы, которые нужно обновить.
Эти переменные помогают быстро понять, какое действие будет выполнено над данными. Например, переменная toDelete
сразу подсказывает, что она содержит объекты, которые будут удалены.
Выбор правильного префикса помогает улучшить понимание кода и упрощает поддержку и расширение программных решений.
Функции
Правильное наименование функций — ключевой момент в создании читаемого и поддерживаемого кода. Префиксы в именах функций могут помочь быстро определить назначение функции и ожидаемое поведение. Вот несколько распространённых префиксов, которые используются в нейминге функций:
Префикс get
Используется для функций, которые возвращают значение, особенно когда требуется выполнить вычисления или извлечение данных без изменения состояния:
getTotal
getUsername
getFormattedDate
Префикс set
Применяется в функциях, которые устанавливают или изменяют значение:
setUsername
setItemCount
setPreferences
Префикс calc или calculate
Означает, что функция выполняет некоторые вычисления и возвращает результат:
calculateInterest
calcTotalPrice
calculateAge
Префикс create
Используется для функций, создающих новый объект или экземпляр чего-либо:
createUser
createReport
createConnection
Префикс check
Используется в функциях, которые проверяют условие и обычно возвращают булево значение:
checkValidity
checkStatus
checkPermissions
Префикс is или has
Применяется для функций, возвращающих булево значение, указывающее на состояние или наличие чего-то:
isActive
hasChildren
isAvailable
Префикс update
Используется для функций, которые обновляют существующие данные или состояние:
updateProfile
updateRecord
updateSettings
Префикс handle
Часто используется для названия функций-обработчиков, которые реагируют на события:
handleClick
handleInputChange
handleSubmit
Префикс fetch
Применяется для функций, которые получают данные из внешних источников, например, через API:
fetchData
fetchUserDetails
fetchPosts
Префикс remove или delete
Используется в функциях, которые удаляют элементы:
removeItem
deleteUser
removeEventListener
Префикс show или hide
Используется для функций, которые контролируют видимость элементов:
showMenu
hideAlert
showMoreDetails
Префикс toggle
Применяется в функциях, которые переключают состояние между двумя значениями:
toggleCheckbox
toggleVisibility
toggleFullscreen
Префикс/cуффикс to
Используется в именовании функций (методов), особенно когда они связаны с преобразованием или сериализацией данных в различные форматы.
toReadableDate
— преобразование даты в читаемый форматtoDictionary
— преобразование массива объектов в словарь
Суфикс вносит ясности:
serializeToJSON
— сериализация данных в формат JSON.convertToXML
— преобразование данных в формат XML.exportToCSV
— экспорт данных в формат CSV.transformToHTML
— преобразование данных в HTML.
Эти функции ясно указывают, что они выполняют преобразование данных в определенный формат.
Использование этих префиксов помогает улучшить понимание кода, делает его более интуитивно понятным и облегчает поддержку и развитие проектов.
Комментарии (45)
tuxi
16.05.2024 12:44+20Спасибо кэп!!!
teplostanski Автор
16.05.2024 12:44+4Всегда пожалуйста)))
tuxi
16.05.2024 12:44+2В функциях (методах обьекта) если есть возможность сериализации в какой то формат, то стоит именовать метод как toXML(); или toJSON(); , если же форматов много то лучше делать convertTo(formatType) или serializeTo(formatType)
manyakRus
16.05.2024 12:44+21) Min, Max, Total - должен быть суффикс в конце, а не префикс (CountMin, CountMax, CountTotal)
2) toXML - должно быть XMLfrom() - сначала получаемый типteplostanski Автор
16.05.2024 12:44Где должен быть? Пожалуста укажите ссылку на источник, я впервые о таком слышу
Gromilo
16.05.2024 12:44+2А в нашем шарповом мире есть линку и там функции ToArray(), ToList() и т.д.
А почему? потому что екстеншены и можно писать так:myArray.Select(x => x.Id).ToArray();
А у вас какой мир?
teplostanski Автор
16.05.2024 12:44Пишите как вам угодно!
Gromilo
16.05.2024 12:44Спасибо, но это был вопрос к "должно быть XMLfrom".
Мне было интересно где так пишут.
tuxi
16.05.2024 12:44+4MyObject.XMLfrom() ??? Это некрасиво, масло маслянное
Iv38
16.05.2024 12:44+3По мне так не просто некрасиво, а запутывает. Как будто метод должен получить что-то на вход - из чего он собирается сделать XML. А объект тогда, наверное, какой-то сериализатор. Методы с префиксом to, используемые для преобразования - вполне распространённая практика, даже в стандартных библиотеках языков. Если очень хочется придерживаться принципа, что метод должен содержать глагол, то convertToXML.
nronnie
16.05.2024 12:44+3Как по мне, так префикс
is
совершенно не нужен. НапримерActive
это уже само по себе прилагательное, которое указывает на определенную характеристику объекта, а именно "Объект Активен" - добавлять к нему ещеis
это, по-моему, откровенно избыточно.Can
тоже очень спорно. Потому что сразу же вопрос "Кто что Can?" - это сам объект "can" что-то? Или кто-то другой "can" что-то? Почему просто не именовать так:canEdit
->Editable
,canUpdate
->Updatable
? Но это, впрочем, мелочи, потому что я когда-то видел такой шедевр имени свойства, какIsHasЧтоТоТам
.Free_ze
16.05.2024 12:44сразу же вопрос "Кто что Can?" - это сам объект "can" что-то?
На этот вопрос обычно отвечает контекст, к примеру:
user.canDo...
validateUserPermissions() { bool canDo... = ...; }
Почему просто не именовать так: canEdit -> Editable
Сам по себе объект редактируемый или кем-то?
Вы предлагаете префикс заменять на суффикс, те же профильные яйца)nronnie
16.05.2024 12:44Нет, я предлагаю вместо
myDocument.CanEdit
писатьmyDocument.Editable
, что более явно: "мойДокумент редактируемый (то что можно редактировать)". Второй вариант, к тому же, лучше ложится на шаблон: "объект - существительное", "метод - глагол", "свойство - существительное или прилагательное". Вы, конечно, правы в том, что если какой-то префикс хорошо ложится на контекст, то надо его и использовать, но, просто я постоянно наблюдаю как эти все is-has пихают на автопилоте куда ни попадя.Free_ze
16.05.2024 12:44+8myDocument.CanEdit
Выглядит абсурдно, если подразумевается редактируемость самого
myDocument
. Префикс тут если будет, то в видеisEditable
. И тут речь про состояниеmyDocument
, а не про пермишны редактирующего. А там уже будетuser.canEdit...
, разумеется.
teplostanski Автор
16.05.2024 12:44Я никому ничего не предлагаю, это не призыв к действию, это всего лишь рекомендательная памятка.
kalombo
16.05.2024 12:44+5Active
иEditable
как property вроде бы ок смотрятся, по крайней мере плохой пример придумать не смог, понятно, что это is editable. Но вот is_admin поменять на admin - уже большая разница, is_admin - точно булевое, admin - там может и имя быть и ссылка на другой класс и т.п. Да и функцию editable() и active() делать не стоит, гораздо больше неопределенности. В целом, префикс is прямо сообщает нам, что возвращаемое значение в поле/функции булево.Can
тоже очень спорно. Потому что сразу же вопрос "Кто что Can?" - это сам объект "can" что-то? Или кто-то другой "can" что-то?Спорно, если не знаете английский :) Can - это сам объект can что-то, всегда. Может ли объект быть редактируемым - can be editable. Is editable - редактируемый ли в данный момент объект. Passive voice можно почитать на эту тему
Но это, впрочем, мелочи, потому что я когда-то видел такой шедевр имени свойства, как
IsHasЧтоТоТам
Может поэтому вы и не поняли шедевр, там было написано всё нормально, но вы не смогли перевести? Is has - такого быть не может это грамматическая ошибка.
ZirakZigil
16.05.2024 12:44Is editable - редактируемый ли в данный момент объект
Есть другое мнение: https://dictionary.cambridge.org/dictionary/english/editable
kalombo
16.05.2024 12:44Забавно, действительно, моё объяснение можно интерпретировать как "в данный момент документ редактируют", но нет, я не это имел в виду :) Я имел в виду, что на данный момент документ не readonly, его можно редактировать.
evgenyk
16.05.2024 12:44+4Есть слова, которые могут быть прилагательным или глаголом при одинаковом спеллинге, например: bright и to bright. Префикс is или to устраняет неопределенность. isBright или toBright, все ясно.
gun_dose
16.05.2024 12:44Вызов метода toBright заставит объект сиять или сконвертирует его в яркий объект?
evgenyk
16.05.2024 12:44Если объект может быть тусклым, а может быть ярким, то наверное сделает его ярким. Да мне кажется Вы, несмотря на вопрос, так и поняли. Не так ли?
Хотя может выбор слова и не очень удачный.
gun_dose
16.05.2024 12:44Я это и спросил, чтобы показать неудачность вашего выбора. Префикс to может означать только конвертацию или приведение типа. А все вот эти глаголы, наречия и другие герундии не имеют никакого значения, потому что объект, это подлежащее, а метод - это сказуемое, а между подлежащим и сказуемым to не употребляется ни в каком времени. Как частица to применяется только рядом с инфинитивом, поэтому если мы где-то в ООП видим to, то это 100% не частица, а предлог.
tuxi
16.05.2024 12:44setBrighter() тогда уж, но есть есть уровни яркости, лучше явно их передавать, а еще лучше increase делать без аргумента или с аргументом на сколько шагов ярче делать, заодно внутри можно будет инкапсулировать проверку на границы диапазона яркости.
rg_software
16.05.2024 12:44+1Префикс is однозначно намекает на булев тип. В противном случае не всегда понятно, что там внтури. Допустим,
myObj.hyperlink
-- этоisHyperlink
или свойствоhyperlink
, у которого ещё свои свойства есть?nronnie
16.05.2024 12:44Это потому что "hyperlink" это существительное. Я говорил о прилагательных, которые по своей природе "bool-евские". Объект и так может быть только "Active / не Active", или "Enabled / не Enabled".
rg_software
16.05.2024 12:44Это, конечно, так, но тогда у вас половина слов будет с is, а половина без. И каждый раз надо будет соображать, о чём речь. Ну и всякие разночтения возможны, как в примере ниже с empty(). Короче говоря, иногда кривоватый, но однозначно читаемый английский лучше альтернатив, как мне кажется.
fireSparrow
16.05.2024 12:44>> Как по мне, так префикс
is
совершенно не нужен. НапримерActive
это уже само по себе прилагательное,Это хорошо работает только до тех пор, когда слово очевидно является именно прилагательным.
Но в английском языке полно слов, которые могут быть и прилагательным, и глаголом. И вот тут как раз начинаются проблемы.
Некоторое время назад на хабре упоминалась история про багу, которая получилась, когда программист вызвал у контейнера метод .empty(), ожидая, что это очистит содержимое контейнера. Но на самом деле этот метод просто возвращал bool, который показывает - пуст контейнер или нет.
Так что я всячески поддерживаю соглашение о том, что такие методы должны начинаться в "is".
LaptevVV
16.05.2024 12:44В STL есть функция to_array().
Здесь префикс to_ означает: преобразовать в ...
Аналогично to_string() и еще ряд других.
Fedorkov
16.05.2024 12:44+9Для переменных, хранящих числовые значения, особенно если они относятся к количеству чего-либо, можно использовать префикс
count
илиnum
. Например:countItems
— количество предметов.numPages
— количество страниц.countErrors
— количество ошибок.
Тогда уж наоборот, ItemCount, PageCount, ErrorCount.
«CountItems» — это «пересчитать элементы», т. е. глагол, который больше подойдёт для продолжительной или затратной функции.
Mirron11
16.05.2024 12:44Считаю, что за префикс check нужно бить больно и беспощадно, особенно если методы с этим префиксом возвращают bool. Императив "сходи проверь" слишком многозначен. checkValidity может иметь поведение isValid (почему бы так не назвать), а может иметь поведение isNotValid (или это должно называться checkInvalidity?) или isValiditySpecified, isValidityConsisent. Единственное хотя бы немного оправданное поведение для функции/метода check -- бросать исключение, когда очевидно, что из-за значения Validity дальше все точно пойдет не так, но это тоже неочевидно, особенно что конкретно проверяла эта check-функция.
ГОВОРИТЕ ОТКРЫТО И СМЕЛО ПРЯМО В ЛИЦО! is, а не check!
aragaer
Иногда использую префикс to для указания того, что переменная содержит объект (или коллекцию объектов), над которыми нужно произвести определенное действие. Например -- пробежаться по коллекции, для каждого элемента определить, требуется ли ее удалять. Если да, то индекс положить в список toDelete. Альтернативно можно было бы собрать список toKeep и пересоздать новую коллекцию, в которой только эти индексы. Идея именования переменной та же самая. Другие примеры -- toEdit, toPrint, toSend, toUpdate и т.п.
maximw
А я to использую для функций преобразования типа toArray, toString