Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
187 / 180 / 25
Регистрация: 27.01.2012
Сообщений: 1,335

GetObjectsDeletedCopy() против getDeletedObjectsCopy()

04.09.2014, 08:17. Показов 1110. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Предисловие :
До недавних пор я никогда не читал книг по "чистому/совершенному коду", а так же программировал "сам с собой", т.е. некому было прокомментировать мой код.
Сейчас же я и прочитал, и программирую с потенциальными комментаторами и, оказалось, что я придерживаюсь неправильного (как мне сказали) именования переменных/методов/классов/функций и т.д.

Главная часть :
Суть в следующем. Предположим, у нас есть класс
C++
1
Object
и в другом классе есть массив
C++
1
Objects *objects;
. Допустим со временем была добавлена функциональность Undo-Redo, и теперь появилось ещё два массива
C++
1
2
Object *deprecatedObjects;
Object* deletedObjects;
Логика такова, что из objects объекты попадают в deprecatedObjects, откуда они могут быть возвращены при помощи Undo-Redo. Из deprecatedObjects объекты попадают в deletedObjects. Теперь из них можно вытащить только общую инфу (типа id, или прочих маловесящих параметров. Остальное было удалено).

Сейчас я привел то именование, которое мне наставляют:
C++
1
2
3
4
5
Object *objects;
Object *deprecatedObjects;
Object *deletedObjects;
public Object* getDeprecatedObjectsCopy();
/*...и так далее...*/
Моё именование до насильной переделки было таким:
C++
1
2
3
4
5
Object *objects;
Object *objectsDeprecated;
Object *objectsDeleted;
public Object* getObjectsDeprecatedCopy();
/*...и так далее...*/
В чём суть моего именования (плюсы) :
1) Я легко могу получить всё, что является объектом, введя лишь objects - а дальше дело за intellisence, где я легко выберу нужны за доли секунд тыкнув вниз/вверх или сразу enter.
2) Мне не нужно помнить, названа ли переменная Deprecated или Invalid, или её сейчас уже переименовали в Old, а может ещё какая-то чушь. Введя objects я опять-таки получаю список, где, быстренько переведя окончания с англ. на русский, выберу нужный.
3) Строгая перфиксность, подобная иерархии - логична и последовательна.
Минусы :
1) Не читается, как текст. Например: THREADS_FILES_IMAGES_MAX - макс. кол-во потоков для обработки файлов изображений. По сути, чтение происходит с конца. Зато если нужно изменить MAX на MIN, или IMAGES на TEXT (что кстати и присутствует в исходниках), ты всегда знаешь где будет это изменение. А то бывало я встречал нечто вида:
C++
1
2
THREADS_MAX_COUNT_FILES
THREADS_PROJECTS_COUNT_MAX
Где структура? Не понятно

Как говорят мне те, кто комментируют подобное моё именование имен, самый большой недостаток в нём :
1) Если у нас есть один массив deprecatedObjects, но много массивов объектов, то введя objects, нужно будет выбрать, а введя depre... - уже будет выбран нужный
1.5) (эти люди выделяют их в один недостаток) иерархическая применяется никогда и нигде (я и сам никогда не видел ни у кого, кроме себя подобное именование)

С этим минусом я не спорю, но всё же считаю, что иерархичная структура имен позволяет меньше думать, а значит больше времени уделять не "блин, как же именовалась та переменная?", а "какую переменную тут использовать/что тут делать/куда там дальше ветвление" и т.д.

Вопрос :
Как именуете Вы? Что вы думаете об иерархическом именовании? Почему же оно так не востребовано? Быть может, я не знаю чего-то, что сокрыто от меня по причине неопытности?
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
04.09.2014, 08:17
Ответы с готовыми решениями:

БС против ПФ?
Есть сайт, главная в выдаче по многим НЧ, под тайтлом быстроссылки ~6-8штук. Пользователь видя нужный раздел, щелкает по быстроссылке тем...

F-22 против Су-37
_VOFdXO929Q Порадовали однако :)

Изучение C++: за и против
Всем доброго вечера! Часто при прочтении статей о программировании или форумов программирования и вижу слова/ответы, на подобии таких:...

16
Каратель
Эксперт С++
6610 / 4029 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
04.09.2014, 10:06
Цитата Сообщение от nexen Посмотреть сообщение
3) Строгая перфиксность, подобная иерархии - логична и последовательна.
вот эта префиксность + человеческий фактор и будет приводить к ошибкам
0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
04.09.2014, 10:58
Вот это
Цитата Сообщение от nexen Посмотреть сообщение
1) Не читается, как текст.
не соответствует
Цитата Сообщение от nexen Посмотреть сообщение
логична и последовательна.
0
187 / 180 / 25
Регистрация: 27.01.2012
Сообщений: 1,335
04.09.2014, 15:32  [ТС]
Avazart, Почему же? Не читается код, как текст в направлении лево-право. А в остальном он несет больше информации

Не по теме:

p.s Так и не разобрался, где цитаты. Случайно запись в блоге создал :/



Добавлено через 37 секунд
Jupiter, человеческий фактор в обычном коде не присутствует получается?
0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
04.09.2014, 15:48
Цитата Сообщение от nexen Посмотреть сообщение
Не читается код, как текст в направлении лево-право
Ну в этом и нелогичность.
0
187 / 180 / 25
Регистрация: 27.01.2012
Сообщений: 1,335
04.09.2014, 16:05  [ТС]
Avazart, зато читается как иерархия имен, что более важно программисту? Или кто-то перед сном любит код почитать, вместо "Войны и Мира"? О_о
0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
04.09.2014, 16:10
А для чего пишут ? Для того что бы читали. (а не расшифровывали грамоты)
0
Каратель
Эксперт С++
6610 / 4029 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
04.09.2014, 16:29
Цитата Сообщение от nexen Посмотреть сообщение
человеческий фактор в обычном коде не присутствует получается?
присутствует всегда. где-то больше, где-то меньше. с такими префиксными именами вероятность ошибки больше
0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
04.09.2014, 16:39
Кстати возможно лучше убрать get как префикс, будет короче
C++
1
deprecatedObjectsCopy();
Добавлено через 4 минуты
Кстати это что
C++
1
2
3
Object *objects;
Object *deprecatedObjects;
Object *deletedObjects;
указатели на массивы?
0
187 / 180 / 25
Регистрация: 27.01.2012
Сообщений: 1,335
04.09.2014, 16:46  [ТС]
Avazart, да, выделенные при помощи new[] например. (это просто для примера). Вот другой пример. Я использую такие имена :
C++
1
2
3
4
5
long ticks;
long ticksCurrent;
long ticksElapsed;
long ticksPrevious;
Time timeElapsed;
и т.д.

Добавлено через 48 секунд
Jupiter, если не секрет, какой такой ошибки? Неправильная последовательность частей имен в иерархии что ли?
0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
04.09.2014, 16:56
C++
1
public Object* getObjectsDeprecatedCopy();
Тогда сразу возникает вопрос нафига Objects в имени если видно и так что возвращается указатель на Object и что означает Сopy в имени?
0
187 / 180 / 25
Регистрация: 27.01.2012
Сообщений: 1,335
04.09.2014, 17:52  [ТС]
Avazart, где видно? Если смотришь в класс, да, видно, если же вызываешь метод getDeprecatedCopy() - то вообще не понятно, что Deprecated. Никогда не видел подобных именований в контексте "несколько массивов - несколько методов для их получения".
Copy означает, что будет выдана копия массива, а не оригинал. Имеется ввиду deepcopy
0
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
04.09.2014, 18:05
Лучший ответ Сообщение было отмечено nexen как решение

Решение

Всё верно, в начале имени должна идти отличительная особенность, глаз после первого прочтения Objects дальше будет его на конце у других пропускать. Читается проще.
Цитата Сообщение от nexen Посмотреть сообщение
1) Я легко могу получить всё, что является объектом, введя лишь objects - а дальше дело за intellisence, где я легко выберу нужны за доли секунд тыкнув вниз/вверх или сразу enter.
Я легко могу ввести dep и выбрать deprecatedObjects, а не вводить полное название объекта в начале.
Более того, я не выберу случайно из предложенного варианта objectsDeleted, а не objectsDeprecated.
Цитата Сообщение от nexen Посмотреть сообщение
2) Мне не нужно помнить, названа ли переменная Deprecated или Invalid, или её сейчас уже переименовали в Old, а может ещё какая-то чушь. Введя objects я опять-таки получаю список, где, быстренько переведя окончания с англ. на русский, выберу нужный.
Если я хочу получить список членов класса, я перехожу в хедер файл и читаю его (в 13 студии можно по щелчку на объект класса прочитать во всплывающем окне). Если честно, такая потребность возникает не часто.
Цитата Сообщение от nexen Посмотреть сообщение
3) Строгая перфиксность, подобная иерархии - логична и последовательна.
Должна быть строгая конвенция именования на проект. Чтобы тот, кто читал код не думал о предпочтениях конкретного человека + исключить вариант когда объявлены objectsDeleted и deletedObjects.
1
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
04.09.2014, 18:34
Цитата Сообщение от nexen Посмотреть сообщение
Avazart, где видно? Если смотришь в класс, да, видно, если же вызываешь метод getDeprecatedCopy() - то вообще не понятно, что Deprecated. Никогда не видел подобных именований в контексте "несколько массивов - несколько методов для их получения".
Copy означает, что будет выдана копия массива, а не оригинал. Имеется ввиду deepcopy
Во первых куда еще можно смотреть как не в определение класса или его доку ?
то вообще не понятно, что Deprecated.
Так становится еще более непонятно если еще ограждать непонятными не значащими словами.
Как бы Deprecated - тут единственное емкое слово.
Вы возвращаете указатель на копию ? Это как бы изначально не верно возвращать указатель на выделенную память во вне.
1
187 / 180 / 25
Регистрация: 27.01.2012
Сообщений: 1,335
04.09.2014, 19:50  [ТС]
Avazart, почему
Цитата Сообщение от Avazart Посмотреть сообщение
Вы возвращаете указатель на копию ? Это как бы изначально не верно возвращать указатель на выделенную память во вне.
?
0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
04.09.2014, 20:37
А как вы удалять его собираетесь? Не факт что пользователь поймет что вы имели ввиду, и что нужно будет освободить память после использования.

Вместо массива используйте вектор с указателям, возможно с применением умных указателей, если конечно политика партии позволяет. Но сама идея выворачивать, то что внутри как бы меня настораживает.
0
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
05.09.2014, 00:37
Цитата Сообщение от nexen Посмотреть сообщение
Как именуете Вы?
Пишу так, чтобы имя максимально точно соответствовало смыслу
(отсутствие множественных толкований) и при этом легко воспринималось
"на слух". Например, GetObjectMediaType или GetMediaTypeOfObject,
но не ObjectMediaTypeGet или GetMediaTypeObject.

В данном случае написал бы "pDeprecatedObjects". Или, если
объекты только ожидают "списания", тогда "pObjectsToDeprecate".

На бонусы от IDE в виде быстрого вбивания имени - плевать.
Читаемость на первом месте, а код читают значительно чаще, чем пишут.
Если при чтении кода возникают хоть малейшие визуальные или мысленные
трудности, значит код написан или структурирован недостаточно хорошо.

Цитата Сообщение от nexen Посмотреть сообщение
Что вы думаете об иерархическом именовании?
Порядок в именовании - это хорошо. Как минимум, он помогает при первом
знакомстве с библиотекой/компонентом угадать, как должна называться функция.
Вот только некоторые страдают ненужным максимализмом и рожают имена-
перевертыши, пытаясь впихнуть их в общую концепцию именования, вместо того,
чтобы сделать маленькое исключение где надо и назвать по-человечески.
А вообще, раздули мы тут из мухи слона

Цитата Сообщение от nexen Посмотреть сообщение
Быть может, я не знаю чего-то, что сокрыто от меня по причине неопытности?
Мы все чего-то не знаем.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
05.09.2014, 00:37
Помогаю со студенческими работами здесь

SEF: за и против
Уважаемые! Что вы думаете о целесообразности использования SEF? Если сайт на Joomla, Яндексом проиндексировано 92 страницы, Гуглем...

ЗА и ПРОТИВ, философия...
Здравствуйте господа! Возник один вопрос по теме использования MySQL в качестве сервера в одной крупной компании, для отдела логистики....

1C против Foxpro
Мне на диплом дали делать задачу склад окса она у них была написана на foxpro под дос мне надо ее сделать на windows,преподаватель сказал...

Многоженство: за и против
В наше время уже никого и никаким развратом и извратом не удивишь: мы равняемся на Запад, мы живём по меркам Голливуда. И разговоры о...

NetBeans - за и против
Кто работал с NetBeans пожалста не напишите свои откровения за и против в сравнении с другими IDE, типа IDEA, JBuilder, и т.д. Заранее...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru