|
|
|
Coding style или нет09.02.2012, 19:56. Показов 5933. Ответов 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 Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет:
1. Использовать системное время и дату,
2. Есть возможность вводить время и дату вручную.
3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
|
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber.
Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
|
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео:
https:/ / vkvideo. ru/ video-240781534_456239017
YouTube:
eY5-5PyI9NM
Текстовая версия
|
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать
Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
|
|
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства.
Родственных связей существует 8 ступеней, такие как:
p - отец
P - мать
q - муж
Q - жена
b - брат
B - сестра
s - сын
S - дочь
|
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире.
Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
|
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С.
Задача:
Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
|
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
|