|
|
|
Coding style или нет09.02.2012, 19:56. Показов 6240. Ответов 60
Метки нет (Все метки)
Услышал сегодня от коллеги такую интересную вещь: есть блоки кода ограниченные командными скобками {}. Так вот, рекомендуется переменные, используемые в блоках и только в них, объявлять в таких блоках. Я например, как правило объявляю переменные в начале подпрограмм. Привычка. Вопрос такой: это чисто coding style рекомендация или есть какое-то практическое значение подобного действия?
0
|
|
| 09.02.2012, 19:56 | |
|
Ответы с готовыми решениями:
60
border-style нет нужного canvas.не меняется brush.style & pen.style Как удалить стиль определенный между <style></style> |
|
|
|
| 09.02.2012, 22:32 [ТС] | |
|
0
|
|
|
Диссидент
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
|
||
| 09.02.2012, 23:07 | ||
|
Представь себе стек, как стопку книг. Из блока (функции) выходим - книжка (автоматические переменные) снимается. Входим в другую - на стопку кладется ее брошюрка.
2
|
||
|
Заблокирован
|
||||||||||||||||||||||
| 10.02.2012, 08:00 | ||||||||||||||||||||||
Однако, все объявления - только в зоне объявлений участников. Получается, если запрещаю себе создавать сущности непосредственно по месту использования в боевом коде (за искл. индексов циклов for, значения которых не используется после окончания цикла), то как же мне суметь выдержать правило "близкого объявления" ? Очень просто - не раздувать тело функции. Если используемая переменная оказывается слишком далеко от места объявления, значит функция "слишком раздутая". Это красноречивый признак говнокодистости. Значит стоит подумать о том, что алгоритм слишком тяжелый, и возможно он решает не одну задачу, а множество задач. И стоит прочистить его структуру - разбить большую сложную задачу на кучку мелких. Весь мой код внешне состоит из 100500 функций, и все - мелкие. Редко когда туловище функции-члена не влазит целиком на страничку моего экрана. Поэтому всегда можно окинуть мысленным взором функцию целиком. Сразу понять, что она делает. Если нужно при этом ещё понять, как она это делает - можно глянуть какие функции она дергает, что бы увидеть их непосредственную реализацию. Получается, что код читается по принципу: сначала "что делает функция?", затем "как она это делает?" Такой код не сложно читать. С другой стороны, если создавать сущности не в зоне объявлений, а непосредственно по месту использования - такой подход сделает "комфортным" процесс раздувания туловища функций, хоть до бесконечности. В результате получаются функции-тяжеловесы из 100500 строк, которые уже не отвечает на вопросы "что они делают". А сразу отвечают на вопросы "как они делают нечто". Не зная "что", ответ на вопрос "как" становится уже не очевиден. Такой код труднее понять. А учитывая, что такие "раздутые" алгоритмы решают сразу несколько задач - труднее вдвойне.
0
|
||||||||||||||||||||||
|
|
|||||||||
| 10.02.2012, 09:43 | |||||||||
1
|
|||||||||
|
Заблокирован
|
|||||||
| 10.02.2012, 10:09 | |||||||
|
Evg
Получаем функцию, которая выполняет не одну конкретную задачу, а множество разных задач. Выглядит это все как монолитная размазня на 100500 строк. В реальном мире масштабируемая архитектура на весь золота. Потому что позволяет нивелировать потенциальный вред от говнокода за счет продуманной техники его инкапсуляции. Однако и в реальном мире есть показательные примеры. Допустим библиотека LOKI и STL как небо и земля. В LOKI сможет разобраться даже тот программист, который имеет только базовые знания о шаблонах, даже не читая документации. В STL без 100 грамм реально не разберёшься. http://cs10041.vk.com/u226973/... 85123a.jpg А что до меня - я много раз наблюдал за собой такой эффект, когда трудно становится удержать в голове алгоритм выполнения задачи. И чем дальше в лес - тем сложнее. Для меня это сигнал, что нужно остановится, и подумать, как сложную задачу раздробить на кучку мелких. "Разделяй и властвуй".
0
|
|||||||
|
|
||||||||
| 10.02.2012, 11:58 | ||||||||
|
интересный момент
0
|
||||||||
|
|
|||||||
| 10.02.2012, 12:18 | |||||||
|
code
0
|
|||||||
|
|
||||||
| 10.02.2012, 12:58 | ||||||
|
как видишь чисто. и никаких ругательств при сборке не было
дело в том что их не надо где попало вызывать не думая. но их вызов вполне возможен и нужен если необходимо управлять процессом. например аллокаторы они очень даже вызывают деструкторы. да и сам ты если поместишь объект в какую то "свою" область то потом обязан будешь вызвать деструктор самостоятельно а не просто уничтожить область.
0
|
||||||
|
|
||
| 10.02.2012, 13:11 | ||
|
0
|
||
|
|
|||||||
| 10.02.2012, 13:24 | |||||||
|
К тому же он не отображает сути проблемы, возникшей при вызове ~basic_string(). code
0
|
|||||||
|
Заблокирован
|
||
| 10.02.2012, 13:30 | ||
|
Если бы программист после удаления, занулил бы его, то повторный вызов диструктора не привел бы к трагедии. Что до самих явно вызываемых диструкторов, имхо - это плохая идея, если конечно, вы не пишите какой нибудь пул памяти с new placement
0
|
||
|
|
||||||||||||
| 10.02.2012, 13:35 | ||||||||||||
|
и в данном случае s->~Test() служит для очистки, на тот случай если в Test() были переменные указывающие на динамически созданные объекты.
0
|
||||||||||||
|
|
||||||||||
| 10.02.2012, 13:46 | ||||||||||
0
|
||||||||||
|
|
|||||||
| 10.02.2012, 13:48 | |||||||
|
soon, конкретно по твоей ошибке тебе написали уже
Добавлено через 2 минуты и если кровь из носа надо очистить память на которую ссылаются члены класса то вызов деструктора в том месте сделает это. а то что он вызовется второй раз в холостую это конечно не очень хорошо, но краша не будет если в самом деструкторе все ровно, наверно это и имелось ввиду под неудобством?
0
|
|||||||
|
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
|
|
| 10.02.2012, 13:56 | |
|
AzaKendler, деструктор не предназначен для того, чтобы вызывать его вручную. Соответственно обнулять указатель в нём просто так никто не будет, а из этого и следует падение программы, когда пытаемся к указателю на память, которая уже не принадлежит программе, применить delete.
0
|
|
|
|
||
| 10.02.2012, 13:58 | ||
|
почему не предназначен, можешь растолковать? он постоянно вызывается вручную в stl. только мы как пользователи, например vector, это не видим, если не захотим пройтись в дебаге по всему что там происходит, ну или почитать про это
0
|
||
|
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
|
|
| 10.02.2012, 14:00 | |
|
AzaKendler, он вызывается вручную в стл в аллокаторае. А вам уже не раз написали, что аллокатор для создания объекта использует placement new, поэтому проблемы с двойным вызовом конструктора там нет.
0
|
|
|
|
|||||||
| 10.02.2012, 14:00 | |||||||
|
А проблема в общем случае не в том, чтобы освободить память, занимаемую экземпляром класса (как ты приводил в сових примерах). Экземпляр класса std::string занимает совсем немного места. Проблема в том, что экземпляр класса в момент создания внутри себя заводит динамически выделяемую память, которую можно освободить только удалив экземпляр класса. Т.е. на Си я могу написать код:
0
|
|||||||
|
|
||||
| 10.02.2012, 14:07 | ||||
|
silent_1991, там вообще проблем нет. мы рассматриваем можно не можно.
Добавлено через 1 минуту конструктор с++ позволяет вызвать явно если это необходимо. explicit. Добавлено через 4 минуты Добавлено через 1 минуту это наверно какой то случай мегаэкономии памяти должен быть, тогда лучше стринг наверно не использовать там
0
|
||||
| 10.02.2012, 14:07 | |
|
Где хранится element.style или изменить width дива Присвоить div-у атрибут class или style и вписать в них данные SOS Coding Input Good Coding Practices Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Транслитерация текста с кириллицы на латиницу
Maks 11.11.2026
Решил облегчить жизнь себе и коллегам админам при создании электронных почтовых ящиков для пользователей, в результате написал обработку "Транслитерация текста" с кириллицы на латиницу, а в ней. . .
|
Книги по геймдизайну, левел-дизайну, игровым механикам и проектированию игрового опыта
8Observer8 08.11.2026
Содержание блога | English Version
1. 2003 - 06 - Designing Virtual Worlds (1st Edition)
Автор: Richard A. Bartle | Объем: 768 стр.
Ссылки: Amazon
. . .
|
Родители токсичные абьюзеры по отношению к своим детям ругают их оскорбляют не любят
zorxor 08.11.2026
Жить в атмосфере постоянных оскорблений, критики и холодности со стороны родителей — это тяжелое и болезненное испытание, которое оставляет глубокие эмоциональные раны. Токсичное и абьюзивное. . .
|
Как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Ответ от Джемени ИИ.
zorxor 08.11.2026
Джемени, как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы.
Многие люди, возвращаясь домой, сразу переодеваются в максимально свободную одежду или вовсе предпочитают. . .
|
|
Паттерн очереди действий/команд (Action / Command Queue). Система очереди действий и кат-сцен с SDL3 Callbacks, cglm и OpenGL
8Observer8 07.11.2026
Содержание блога | English Version
Руководство для начинающих по реализации паттерна очереди действий/ команд (Action / Command Queue) на C++ (C++20) с использованием официального SDL3 Callbacks. . .
|
Проверка полного ФИО в типовом справочнике
Maks 07.11.2026
Решение реализовано в конфигурации КА2, на примере справочника "КонтактныеЛицаПартнеров".
Задача:
Запрет инициалов.
Не допускаеть использование сокращений вида "И. И. ", "И. И. ", "И И" и. . .
|
Про "Windows must die!"
kumehtar 04.11.2026
Знаете, чет накатило. . . .
Когда-то это было почти боевым кличем: мол, нормальный человек сидит на DOS, OS/ 2 или Linux, а вот это вот - Must Die. А теперь человек произносит «мастдай» с усмешкой - и. . .
|
Красочные поля с номером страницы svg+background-image
russiannick 04.11.2026
Красочные поля с номером страницы не менее важны чем в эпоху бумажных книг.
Посему спешу представить почтеннейшей публике этот важный инструмент который эти поля и формирует.
В процессе разработки. . .
|