Программистские перлы№ 1
Большой Грызь

Кажется, я начну коллекционировать перлы, найденные мною в чужих программах.
Вне всякой связи с истинно русским подходом к чужим программам а-ля: "если написано не мной, то все плохо и надо переписать с нуля".

Вобщем, буду приводить здесь перлы, мои комментарии по поводу и переписывать эти перлы с нуля. Кто знает - тот поймет.

Начну вот с такого вот перла:

CString sOnlineDataValue;
sOnlineDataValue.Format("%s",ShowBitmap(OnlineData.Status));

Чем руководствовался автор этих строк, когда написал вот это вот: Format("%s"... - я без понятия. О простом присвоении CString-а CString-у он, очевидно не слышал.

Переписано мной:
CString sOnlineDataValue;
sOnlineDataValue = ShowBitmap(OnlineData.Status);


Следующий перл - содержимое упомянутой функции ShowBitmap. Продолжение следует.
 Only those who attempt the absurd will achieve the impossible.. (Escher)
[ 17-01-07, Срд, 11:49:37 Отредактировано: Большой Грызь ]
Профиль 

Программистские перлы№ 2
Большой Грызь

Итак о функции ShowBitmap. Вот ее содержимое:
CString ShowBitmap(BYTE value)
{
    CString sRes;
    sRes.Empty();
    for(int i=7;i>=0;i--)
    {
       if(GetBit(i,value))
             sRes +="1";
       else
             sRes +="0";
    }
    return sRes;
}

Начинаем разбор полетов. Зачем сразу после создания объекта sRes нужно вызывать sRes.Empty()? Т.е. были какие-то сомнения насчет того, что он пустой сразу после создания?

Функция GetBit - очевидно возвращает указанный бит в байте. Зачем для этого писать отдельную функцию - ума не приложу. Впрочем, содержимое этой функции - перл №3.

Вобщем, переписано:
CString ShowBitmap(BYTE value)
{
    CString sRes;
    for (BYTE mask=0x80; mask>0; mask>>=1)
    {
       sRes += (value && mask) ? "1" : "0";
    }
    return sRes;
}
 Only those who attempt the absurd will achieve the impossible.. (Escher)
[ 21-01-07, Вск, 11:35:39 Отредактировано: Модератор ]
Профиль 

Программистские перлы№ 3
Большой Грызь

Перл №3. Упомянутая функция GetBit:
BOOL GetBit(int iIndex,BYTE source)
{
    BYTE mask_array[8] = {0x01,0x02,0x04,0x8,0x10,0x20,0x40,0x80};
    return (BOOL) (mask_array[iIndex] & source);
}

Комментировать не буду. Хорошо, что функция возвращает бит в байте, а не в 64-битном слове. А то бы в этой функции был массив на 64 элемента.
Да, иногда бывают случаи, когда достать элемент из массива намного быстрее, чем сделать какой-то расчет. Но ЭТО - не тот случай.
 Only those who attempt the absurd will achieve the impossible.. (Escher)
Профиль 

Программистские перлы№ 4
Лю Ци

Завораживает..
Как японские иероглифы)))
 Ёрничество - это последний выход для потерявших вход
Ю. Хейфец.

Профиль 

Программистские перлы№ 5
Тигра

переписать это чисто по русски но не всегда правильно в финансовом плане. когда речь о деньгах - главный принцип "Оставь, работает!"
 
[ 21-01-07, Вск, 22:07:49 Отредактировано: Тигра ]
Профиль 

Программистские перлы№ 6
Большой Грызь

Беда в том, что:
а) не всегда работает
б) с ростом кол-во изменений на каком-то этапе вся эта "башня" рушится к чертовой матери и в финансовом плане потом аукается вдесятеро.
 Only those who attempt the absurd will achieve the impossible.. (Escher)
Профиль 


Вы не зарегистрированы либо не вошли в портал!!!
Регистрация или вход в портал - в главном меню.



 Просмотров:   004380    Постингов:   000006