- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
struct Dir {
Dir(const char* name) {
d = opendir("/var/log");
}
~Dir();
const char* next();
bool operator== (DIR* other);
private:
DIR* d;
};
...
Dir var_log("/var/log");
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+1001
struct Dir {
Dir(const char* name) {
d = opendir("/var/log");
}
~Dir();
const char* next();
bool operator== (DIR* other);
private:
DIR* d;
};
...
Dir var_log("/var/log");
absolut 03.06.2010 16:56 # 0
Dummy00001 03.06.2010 21:25 # +1
у нас в софтине в одном месте одна константа всегда была 0. потом ей дали другое значение - сразу в стольких местах повылазило что народ на протяжении многих лет вместо этой константы просто 0 писал. и более того нашлось место где код ожидал что константа будет 0 и использовал ее не по назначению вместо 0.
это часто происходит когда пишется навороченно абстрактный код, который в жизни используется только по одному конкретному назначению. почему я и пытаюсь народ учить сначала писать конкретный код и потом из него по мере необходимости делать абстрактный, переиспользуемый, а не наоборот. ан нет, крутых книжек поначитаются и начинают городить огороды.
absolut 04.06.2010 00:39 # 0
del 04.06.2010 08:24 # +1
absolut 04.06.2010 09:42 # 0
guest 04.06.2010 13:00 # +1
del 04.06.2010 13:58 # 0
Просто я бы делал opendir() не в конструкторе, а в другом методе, чтобы можно было заранее обработать ошибку на этом этапе.
guest 04.06.2010 14:52 # 0
absolut 04.06.2010 19:11 # −1
guest 04.06.2010 22:09 # +1
ололо! а для чего ж они?
Надеюсь, Вы не из тех макак, которые всё API строят на эксепшенах, называя это "архитектурой сооьшений"?
absolut 04.06.2010 22:31 # −1
Почитайте Страуструпа. Раздел 14.5.
P.S. Надеюсь, Вы тоже не обезьяна. А то с приматами общаться не получается.
guest 05.06.2010 00:48 # +1
guest 05.06.2010 03:42 # 0
while (someCondition) {
...
if (poraVihodit) someCondition = false
nil 05.06.2010 10:10 # 0
xaionaro 05.06.2010 16:01 # +3
1.) Если делать с дополнительной переменной в условии надо будет добавлять эту переменную во все уловиях для уровней вложения (кроме разве что последнего), что вообще говоря неудобно
2.) Лично мне goto будет действительно удобнее воспринимать во многих ситуациях, чем с дополнительной переменной в условиях.
3.) Хоть это и копейки, но компьютеру надо будет выполнять меньше операций на полный цикл.
Т.е. это оптимальнее, нагляднее и быстрее пишется для рассмотренного случая, чем добавление переменной в условия. Хотя справедливости ради стоит заметить, что, как уже сказали выше, эту же проблему можно решить вынеся эти циклы в отдельную функцию, на что некоторые с дуру могут возразить, что это спровоцирует дополнительные вызовы функций, что в свою очередь можно решить добавив inline по надобности.. однако это решение иногда делает код менее наглядным, либо требует передачи тонны переменных туда и обратно, что тоже иногда очень неудобно.
Однако, IMHO, это вопрос строго стиля программирования. И спорить на эту тему абсолютно бесполезно. А единственные две объективные величины для хуже/лучше, которые мы можем замерить это:
1.) производительность;
2.) работоспособность.
Конкретно в данном случае меняется только первое. Соотвественно, единственное, что можно делать при стремлении к идеалу, в данной ситуации надо, IMHO, просто проверять что выполняется быстрее. Но, как известно, если слишком сильно загоняться на оптимальности, код становится иногда слишком сложночитаемым... я, конечно, извиняюсь, что озвучиваю столь очевидные вещи, однако похоже, тут некоторые анонимусы любят принимать решения строго на религиозных соображениях.
guest 05.06.2010 16:05 # 0
xaionaro 05.06.2010 16:06 # 0
guest 05.06.2010 16:09 # 0
ты код также пишеш? китаец штоле?
xaionaro 05.06.2010 16:15 # 0
nil 05.06.2010 16:33 # 0
А комментарии — да!:)
nil 05.06.2010 16:32 # 0
Насчет догматов — они хороши при первоначальном ознакомлении с предметом, для выработки ориентиров. Потом, когда научаешься отличать «добро» от «зла», приходит осознание, что мир серый, и что из любого правила будут исключения.
Это нормально, это вроде как в БИ концепция сю-ха-ри. Ненормально, когда индивидуум застревает на этапе «сю».
guest 05.06.2010 18:24 # +1
xaionaro 05.06.2010 18:35 # 0
xaionaro 05.06.2010 18:39 # 0
Выкладываю результат по ссылке:
guest 05.06.2010 22:37 # 0
pushkoff 06.06.2010 19:48 # 0
guest 05.06.2010 00:49 # 0
del 05.06.2010 11:55 # 0
try
{
Dir d("/path/to/gigantic/hui");
}
catch(super_exc e)
{
}
так чтоли?
А если такая область видимости не подходит?
guest 05.06.2010 18:09 # 0
del 06.06.2010 14:28 # 0
legolegs 06.06.2010 15:17 # 0
guest 04.06.2010 10:45 # 0
guest 04.06.2010 14:47 # −2
guest 04.06.2010 14:54 # +6
guest 04.06.2010 17:25 # 0
absolut 04.06.2010 19:02 # 0
Объект - это по сути любой экземпляр класса, структуры или встроенного типа.
В С++ ключевые слова class и struct взаимозаменяемы. Разница только в правах доступа по-умолчанию к членам.
В структурах - public, в классах - private.
guest 05.06.2010 06:31 # 0
Тогда, спрашивается, нахрена нам нужны классы вообще? Если теперь модно у структур делать методы. Не совсем уверен насчёт наследования, оно там есть? (Искать лень, если честно, да и не настолько я цппбой).
Второй вопрос. Если у классов - объекты, что тогда у структур? Структуры?
guest 05.06.2010 09:59 # 0
Есть.
В С++ структуры почти не отличаются от классов.
Отличаются лишь тем, что в классе всё поумолчанию имеет private модификатор, а структуре public.
guest 05.06.2010 03:43 # +5
Ух ты, какие серьезные вопросы на говнокоде обсуждаются