2 Wolfhound
От: DEMON HOOD  
Дата: 09.02.04 21:14
Оценка:
Дело не в том, что я считаю шаблоны бесполезными....

скажем, если мне нужно запрограмировать две стандартные кнопки, я не буду писать с нуля
А вот другой вариант, я делаю что то, для чего нет готового шаблона, а так-как в моём случае,
код будет использоваться один раз в одной проге, то мне накладно делать что то что не ускорит, а наоборот замедлит дату окончательного
релиза....


Резюме
не всегда правильно всё делать по науке.
... << RSDN@Home 1.1.2 beta 1 >>
Re: 2 Wolfhound
От: WolfHound  
Дата: 10.02.04 06:20
Оценка: 4 (2) +1
Здравствуйте, DEMON HOOD, Вы писали:

DH>А вот другой вариант, я делаю что то, для чего нет готового шаблона, а так-как в моём случае, код будет использоваться один раз в одной проге, то мне накладно делать что то что не ускорит, а наоборот замедлит дату окончательного релиза....

Дело в том что
1)Всегда можно найти код который используется по крайней мере в 2х местах.
2)Ни когда не знаешь понадобится ли тебе этот кусок кода гдето еще
3)Загнать в шаблон не на много дольше чем просто написать
4)Даже если используется один раз то вынесение дополнительной операции из основного алгоритма делает код понятней
Пример: Надо мне было один раз в одной программе получить список файлов из одной папки я не долго думая написал
class C_FindFile
{
    HANDLE            m_find;
    std::string        m_mask;
    std::string        m_file;
public:
    C_FindFile(const std::string& mask)
        :m_find(INVALID_HANDLE_VALUE)
        ,m_mask(mask)
    {}
    ~C_FindFile()
    {
        if(INVALID_HANDLE_VALUE!=m_find)
            FindClose(m_find);
    }
    bool Find()
    {
        WIN32_FIND_DATA    findData;
        if(INVALID_HANDLE_VALUE==m_find)
        {
            m_find=FindFirstFile(m_mask.c_str(), &findData);
            if(INVALID_HANDLE_VALUE==m_find)return false;
            while('.'==findData.cFileName[0])
                if(!FindNextFile(m_find, &findData))
                    return false;
        }
        else
            if(!FindNextFile(m_find, &findData))
                return false;
        m_file=findData.cFileName;
        return true;
    }
    const std::string& FileName()const{return m_file;}
};

и цикл стал выглядить так
C_FindFile find_file(path+"\\*.ggg");
while(find_file.Find())
{
    find_file.FileName();//получаем имя текущего файла
}

Как бы выглядил цикл без этого класса думаю обьяснять не стоит.

С шаблонами таже история только если видишь что класс можно использовать с разными типами то делаешь его шабоном.

Я уже не говорю про различные утилиты (они используются от десятков до тысяч раз) типа смартпоинеров (у меня свои похожие на boost::intrusive_ptr только по наворочение) и статический полиформизм который порой позволяет значительно поднять производительность.
... << RSDN@Home 1.1.3 beta 1 >>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re: 2 Wolfhound
От: e-Xecutor Россия  
Дата: 10.02.04 07:06
Оценка: 1 (1) +1
Здравствуйте, DEMON HOOD, Вы писали:

DH>Дело не в том, что я считаю шаблоны бесполезными....


DH>скажем, если мне нужно запрограмировать две стандартные кнопки, я не буду писать с нуля

DH>А вот другой вариант, я делаю что то, для чего нет готового шаблона, а так-как в моём случае,
DH>код будет использоваться один раз в одной проге, то мне накладно делать что то что не ускорит, а наоборот замедлит дату окончательного
DH>релиза....


DH>Резюме

DH>не всегда правильно всё делать по науке.

Я не Вольфхаунд, но прокомментирую.
Я всегда стараюсь писать код с прицелом на reusability.
Если какой-то класс потенциально может быть применён для
более чем одного конкретного типа — быть ему шаблоном!
При написании кода это не вносит особого замедления,
и код работает ровно с такой же скорость.
Зато когда вдруг возникает схожая задача — вуаля, всё готово
Уже неоднократно несколько минут на "посидеть, подумать" экономили часы работы.
Re: 2 Wolfhound
От: LCR Россия lj://_lcr_
Дата: 10.02.04 09:06
Оценка:
Здравствуйте, DEMON HOOD, Вы писали:

DH>Дело не в том, что я считаю шаблоны бесполезными....


DH>скажем, если мне нужно запрограмировать две стандартные кнопки, я не буду писать с нуля

DH>А вот другой вариант, я делаю что то, для чего нет готового шаблона, а так-как в моём случае,
DH>код будет использоваться один раз в одной проге, то мне накладно делать что то что не ускорит, а наоборот замедлит дату окончательного
DH>релиза....

Можно и я выскажу своё ню

Дело в том, что программирование раньше было скорее искусством, чем ремеслом или наукой. Сейчас многое по-другому и медленно но верно в программировании входит СТАНДАРТИЗАЦИЯ, то есть существующая проблема делится на составляющие части, и эти части уже решаются стандартными средствами. Приведу примеры:
1. Паттерны проектирования
2. Идиомы (начальные и продвинутые)
3. Библиотеки (STL, boost, и пр.)

Конечно, возможна задача, для которой все подобные решения неприменимы (хотя я например такой задачи не встречал), но тебе всё-равно придётся обходится стандартными средствами, если ты собираешься использовать C++.
quicksort =: (($:@(<#[),(=#[),$:@(>#[)) ({~ ?@#)) ^: (1<#)
Re[2]: 2 Wolfhound
От: folk Россия  
Дата: 10.02.04 12:32
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>Я уже не говорю про различные утилиты (они используются от десятков до тысяч раз) типа смартпоинеров (у меня свои похожие на boost::intrusive_ptr только по наворочение)


Интересно, в чем и зачем твои указатели навороченнее intrusive_ptr ?
На самом деле, люди не читают газеты, они принимают их каждое утро, так же как ванну. ©Маршалл Мак-Льюэн
Re[3]: 2 Wolfhound
От: WolfHound  
Дата: 10.02.04 13:17
Оценка:
Здравствуйте, folk, Вы писали:

F>Интересно, в чем и зачем твои указатели навороченнее intrusive_ptr ?

Я с СОМ много работаю и нужны attach/detach (это понятно) и accept
//прототип функции
    STDMETHOD(GetItem
    (/* [in] */                                BSTR                            name
    ,/* [retval][out] */                    ISRCOMM_OPCItem**                item
    ));
...
//Использование
    ref_t<ISRCOMM_OPCItem> item;
    if(FAILED(OPCManager->GetItem(name, ref_accept(item))))
        return 0;
    return item;

И писать меньше что тоже плюс
... << RSDN@Home 1.1.3 beta 1 >>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[2]: 2 Wolfhound
От: DEMON HOOD  
Дата: 10.02.04 21:38
Оценка:
Здравствуйте, LCR, Вы писали:

LCR>Можно и я выскажу своё ню


LCR>Дело в том, что программирование раньше было скорее искусством.......

LCR>LCR>Конечно, возможна задача, для которой все подобные решения неприменимы (хотя я например такой задачи не встречал), но тебе всё-равно придётся обходится стандартными средствами, если ты собираешься использовать C++.
Да в моём коде никакого исскуства нет, стояяла задача сделать прогу заносящие в таблицу ексель данные в нужные ячейки,
программа была написана при помощи комбинаций ктрлЦ ктрлВ, я не использовал там даже простых циклов и т подобное.
Прога работает и будет работать ещё 1000 лет, но мне от этого не перепадёт ни копейки больше чем я получил.
Изменять/сопровождать код, или выпускать прогу версия 2 не предполагалось изначально, и я считаю, что получил максимальную прибыль при минимальных затратах.
... << RSDN@Home 1.1.2 beta 1 >>
Re[2]: 2 Wolfhound
От: DEMON HOOD  
Дата: 10.02.04 21:38
Оценка:
Здравствуйте, e-Xecutor, Вы писали:

EX>Я не Вольфхаунд, но прокомментирую.

EX>Я всегда стараюсь писать код с прицелом на reusability.
EX>Если какой-то класс потенциально может быть применён для
EX>более чем одного конкретного типа — быть ему шаблоном!
EX>Уже неоднократно несколько минут на "посидеть, подумать" экономили часы работы.

в 9 случаях из 10 я угадывал, что этот мой конкретный код никогда не будет использован повторно.... в других проектах
Ну а когда предполагалось повторное использование, то уж конечно и классы и шаблоны и всё что только можно
... << RSDN@Home 1.1.2 beta 1 >>
Re[2]: 2 Wolfhound
От: DEMON HOOD  
Дата: 10.02.04 21:38
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>Как бы выглядил цикл без этого класса думаю обьяснять не стоит.


WH>С шаблонами таже история только если видишь что класс можно использовать с разными типами то делаешь его шабоном.


Да, всё круто!
Я вот вспомнил как писал кучу курсовых, контрольных для студентов-двоечников...
скажешь мне нужно было каждый раз использовать классы/шаблоны для какой нибудь... транспонирование матрицы например?
Да они с трудом защитили прогу с процедурным подходом......
... << RSDN@Home 1.1.2 beta 1 >>
Re[3]: 2 Wolfhound
От: WolfHound  
Дата: 11.02.04 05:57
Оценка:
Здравствуйте, DEMON HOOD, Вы писали:

DH> Я вот вспомнил как писал кучу курсовых, контрольных для студентов-двоечников...

DH> скажешь мне нужно было каждый раз использовать классы/шаблоны для какой нибудь... транспонирование матрицы например?
DH> Да они с трудом защитили прогу с процедурным подходом......
И при чем тут студенты двоечники?
... << RSDN@Home 1.1.3 beta 1 >>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[3]: 2 Wolfhound
От: WolfHound  
Дата: 11.02.04 05:57
Оценка:
Здравствуйте, DEMON HOOD, Вы писали:

DH>в 9 случаях из 10 я угадывал, что этот мой конкретный код никогда не будет использован повторно.... в других проектах

Гм. У меня из проекта в проект переезжает половина кода... Ибо вторая половина это логика, а вся обслуга которой до одури перезжает...
В конце концов я ее просто в отдельную библиотеку выделил.
... << RSDN@Home 1.1.3 beta 1 >>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[3]: 2 Wolfhound
От: Kaa Украина http://blog.meta.ua/users/kaa/
Дата: 11.02.04 06:38
Оценка:
Здравствуйте, DEMON HOOD, Вы писали:

DH>Изменять/сопровождать код, или выпускать прогу версия 2 не предполагалось изначально, и я считаю, что получил максимальную прибыль при минимальных затратах.

В данном топике рассматривается программирование на С++, как явление (занятие, если хочешь) длительное. Твои замечания — не в тему.
Алексей Кирдин
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.