crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

3 страниц V  < 1 2 3  
Ответить в данную темуНачать новую тему
> Упрощение кода, написание того или иного кода более понятно и просто
Tonal
  опции профиля:
сообщение 11.8.2008, 11:07
Сообщение #21


Активный участник
***

Группа: Участник
Сообщений: 452
Регистрация: 6.12.2007
Из: Новосибирск
Пользователь №: 34

Спасибо сказали: 69 раз(а)




Репутация:   17  


1) После проверок где...
Код
if(...) isContinue = false;

заменить на
if(...) 
  return false;

2) Проверку на..
Код
if(isContinue && init_gaps) {

заменить на
if(!init_gaps)
  return true

3) Изменение, которое после checkStatusDist...
У тебя 3 ветки. Если смотреть на код этих веток после if(isContinue && init_gaps)... то ясно что третья ветка - это объединение первых 2. Стало быть мы выносим этот код из 1ий и 2ой ветви в отдельные функции а в третьей ветви вызываем обе этих функции.
4) Ну и из...
Из кода (time_t)fabs(double(next -> time_marker - cur -> time_marker));
Делаем функцию timeDist
5) Функции checkStatus* переименовываем в isStatus*.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 11.8.2008, 14:54
Сообщение #22


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

Спасибо сказали: 70 раз(а)




Репутация:   17  


Теперь это выглядит более внятно и легче править. Спасибо!
Source

/// Проверка статусов координат и времени для подсчета расстояния (временного или же километрового)
bool ScrTrack::isStatusDist(const GEOPOINT current, const GEOPOINT next)
{
    bool f = false;
    if(next.status_lat != PS_FAIL && next.status_lon != PS_FAIL && current.status_lat != PS_FAIL
         && current.status_lon != PS_FAIL && next.status_lat != PS_NODATA && next.status_lon != PS_NODATA
         && current.status_lat != PS_NODATA && current.status_lon != PS_NODATA)
        f = true;

    return f;
}

/// Проверка статусов координат для метки о том, что из цикла надо выйти
bool ScrTrack::isStatusBreak(const GEOPOINT current, const GEOPOINT next)
{
    bool f = false;
    if(next.status_lat == PS_NONE || next.status_lon == PS_NONE || current.status_lat == PS_NONE
         || current.status_lon == PS_NONE)
        f = true;

    return f;
}

/// Добавление значения времени в вектор
bool ScrTrack::addTimeValue(vector<GEOPOINT>::iterator cur, vector<GEOPOINT>::iterator next)
{
    if(isStatusBreak(*cur, *next)) return false;
    time_t time_diff = (time_t)fabs(double(next -> time_marker - cur -> time_marker));
    if(time_diff > readed_time) return false;

    if(!init_gaps) return true;
    if(isStatusDist(*cur, *next))
        q_calc.maxTime += time_diff;

    PARAMVALUE val;
    val.value = (double)time_diff;
    val.status = next -> status_lat;
    x_data.time_x.push_back(val);

    return true;
}

/// Добавление значения расстояния в вектор
bool ScrTrack::addDistValue(vector<GEOPOINT>::iterator cur, vector<GEOPOINT>::iterator next)
{
    if(isStatusBreak(*cur, *next)) return false;
    double pos_diff = diffDist(cur, next);
    if(pos_diff > readed_dist) return false;

    if(!init_gaps) return true;
    if(isStatusDist(*cur, *next))
        q_calc.maxDist += pos_diff;

    PARAMVALUE val;
    val.value = pos_diff;
    val.status = next -> status_lat;
    x_data.dist_x.push_back(val);

    return true;
}

/// Перебор возможных вариантов разрывов и их обработка
bool ScrTrack::enumPossible(vector<GEOPOINT>::iterator cur, vector<GEOPOINT>::iterator next)
{
    ScrTrack::GAPTYPE gapType = checkGaps();
    bool isContinue = false;

    switch(gapType)
    {
    case ScrTrack::GT_NONE:
        readed_time = 10;
    break;
    case ScrTrack::GT_TIMEGAP:
        isContinue = addTimeValue(cur, next);
    break;
    case ScrTrack::GT_DISTGAP:
        isContinue = addDistValue(cur, next);
    break;
    case ScrTrack::GT_TMDSTGAP:
        isContinue = addTimeValue(cur, next);
        isContinue = addDistValue(cur, next);
    break;
    }

    return isContinue;
}



Сообщение отредактировал AD - 11.8.2008, 15:06
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Red Devil
  опции профиля:
сообщение 12.8.2008, 10:12
Сообщение #23


Студент
*

Группа: Участник
Сообщений: 68
Регистрация: 6.6.2008
Из: Saint-Petersburg
Пользователь №: 194

Спасибо сказали: 1 раз(а)




Репутация:   3  


Код
class ScrTrack: public TImageClass
{
private:
    std::string m_sIniFileaame;
    int         nReadTime;          
    int         nReadDist;          
    bool         m_IsEventPicture;      
    bool         m_IsEventNamePress;    

protected:
    typedef std::vector <GEOPOINT>    GeoPointArray;
    GeoPointArray * m_pGeo;

public:
    enum GAPTYPE { GT_NONE = 0, GT_TIMEGAP, GT_DISTGAP, GT_TMDSTGAP };
    
    SubSahara * m_pSahara;
    bool         m_IsInitGaps;

public:
    ScrTrack(SubSahara* pSah): m_nReadTime(0), m_nReadDist(0), m_pGeo(0), m_pSahara(pSah), m_IsInitGaps(false),
                    bmpSymbol(NULL), m_IsEventNamePress(false), m_IsEventPicture(false) {}
    virtual ~ScrTrack() {}
    virtual void DrawClass(GRAPHIC_DEVICE& device, const CHART_SCOPE& scope, const DRAW_MODE& mode);
    virtual void LoadSymbols();
    virtual void UnloadSymbols();
    
    bool enumPossible(GeoPointArray::iterator cur, GeoPointArray::iterator next);
    bool GapNone();
    bool GapTime(GeoPointArray::iterator cur, GeoPointArray::iterator next);
    bool GapDist(GeoPointArray::iterator cur, GeoPointArray::iterator next);
    bool GapTDM(GeoPointArray::iterator cur, GeoPointArray::iterator next);
    
    bool checkStatusDist(GeoPointArray::iterator cur, GeoPointArray::iterator next);
    bool checkStatusBreak(GeoPointArray::iterator cur, GeoPointArray::iterator next);
};

bool ScrTrack::enumPossible(GeoPointArray::iterator cur, GeoPointArray::iterator next)
{
    switch(checkGaps())
    {
        case ScrTrack::GT_NONE:
            return GapNone();
            
        case ScrTrack::GT_TIMEGAP:
            return GapTime(cur, next);
            
        case ScrTrack::GT_DISTGAP:
            return GapDist(cur, next);
            
        case ScrTrack::GT_TMDSTGAP:
            return GapTDM(cur, next);
    }

    return true;
}

bool ScrTrack::GapNone()
{
    m_nReadTime = 10;
    return true;
}

bool ScrTrack::checkStatusBreak(GeoPointArray::iterator cur, GeoPointArray::iterator next)
{
    return next -> status_lat == PS_NONE || next -> status_lon == PS_NONE || cur -> status_lat == PS_NONE || cur -> status_lon == PS_NONE;
}

bool ScrTrack::checkStatusDist(GeoPointArray::iterator cur, GeoPointArray::iterator next)
{
    return next -> status_lat != PS_FAIL && next -> status_lon != PS_FAIL && cur -> status_lat != PS_FAIL
            && cur -> status_lon != PS_FAIL && next -> status_lat != PS_NODATA && next -> status_lon != PS_NODATA
            && cur -> status_lat != PS_NODATA && cur -> status_lon != PS_NODATA;
}

bool ScrTrack::GapTime(GeoPointArray::iterator cur, GeoPointArray::iterator next)
{
    if(checkStatusBreak(cur, next))
        return true;

    time_t time_diff = static_cast<time_t>(fabs(double(next -> time_marker - cur -> time_marker)));
    if(time_diff > m_nReadTime)
        return false;
    
    if(!m_IsInitGaps)
        return true;
        
    if(checkStatusDist(cur, next)
        q_calc.maxTime += time_diff;
        
    PARAMVALUE val;
    val.value     = (double)time_diff;                
    val.status     = next -> status_lat;
    x_data.time_x.push_back(val);
    
    return true;    
}

bool ScrTrack::GapDist(GeoPointArray::iterator cur, GeoPointArray::iterator next)
{
    if(checkStatusBreak(cur, next))
        return true;
    
    double pos_diff = diffDist(cur, next);
    if(pos_diff > m_nReadDist)
        return false;
    
    if(!m_IsInitGaps)
        return true;
        
    if(checkStatusDist(cur, next))
        q_calc.maxDist += pos_diff;

    PARAMVALUE val;
    val.value     = pos_diff;
    val.status     = next -> status_lat;
    x_data.dist_x.push_back(val);
    return true;
}

bool ScrTrack::GapTDM(GeoPointArray::iterator cur, GeoPointArray::iterator next)
{
    if(checkStatusBreak(cur, next))
        return true;
    
    time_t time_diff = (time_t)fabs(double(next -> time_marker - cur -> time_marker));
    double pos_diff = diffDist(cur, next);
    if(time_diff > m_nReadTime || pos_diff > m_nReadDist)
        return false;
        
    if (!m_IsInitGaps)
        return true;
        
    if(checkStatusDist(cur, next))
    {
                q_calc.maxDist += pos_diff;
                q_calc.maxTime += time_diff;
    }
    
    PARAMVALUE val;
    val.value = pos_diff;
    val.status = next -> status_lat;
    x_data.dist_x.push_back(val);
    val.value = (double)time_diff;
    x_data.time_x.push_back(val);
    
    return true;
}
Причина редактирования: обернул в тэг expand
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
rich
  опции профиля:
сообщение 13.12.2008, 0:03
Сообщение #24


Участник
**

Группа: Участник
Сообщений: 123
Регистрация: 1.3.2008
Пользователь №: 109

Спасибо сказали: 6 раз(а)




Репутация:   0  


Может кому поможет:
"Рефакторинг. Улучшение существующего кода" Мартин Фаулер.
заказ книг
ещё заказ книг
и ещё заказ книг
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Admin
  опции профиля:
сообщение 13.12.2008, 0:52
Сообщение #25


Администратор
****

Группа: Администратор
Сообщений: 646
Регистрация: 9.10.2007
Из: crossplatform.ru
Пользователь №: 1

Спасибо сказали: 17 раз(а)




Репутация:   2  


rich, а ты темой не ошибся? Причем тут упрощение кода?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
alex977
  опции профиля:
сообщение 13.12.2008, 11:28
Сообщение #26


Активный участник
***

Группа: Участник
Сообщений: 310
Регистрация: 19.6.2008
Из: Россия, МО, г.Мытищи
Пользователь №: 206

Спасибо сказали: 77 раз(а)




Репутация:   8  


Цитата(Admin @ 13.12.2008, 0:52) *
rich, а ты темой не ошибся? Причем тут упрощение кода?


ИМХО, имеет отношение:
http://ru.wikipedia.org/wiki/Рефакторинг
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
rich
  опции профиля:
сообщение 14.12.2008, 18:41
Сообщение #27


Участник
**

Группа: Участник
Сообщений: 123
Регистрация: 1.3.2008
Пользователь №: 109

Спасибо сказали: 6 раз(а)




Репутация:   0  


Цитата(Admin @ 13.12.2008, 0:52) *
rich, а ты темой не ошибся? Причем тут упрощение кода?

ИМХО, не ошибся. :)

Сообщение отредактировал rich - 14.12.2008, 18:43
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

3 страниц V  < 1 2 3
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


4 чел. читают эту тему (гостей: 4, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 25.11.2024, 22:52