今天就工作過程中遇見的爛代碼、壞代碼做一些總結。
公司代碼一:
bool CBusSystem::UpdataBus(BUS_INFO* bus)
{
m_BusMapLock->lock();
CBusInfo* tmp = GetBusByGuid(strutil::format("%d", bus->dwID));
if (tmp)
{
tmp->m_Lng = bus->fLongitude;
tmp->m_Lat = bus->fLatitude;
tmp->m_Visible = bus->bVisible.MapView;
tmp->m_Angle = bus->iAngle;
tmp->m_Speed = bus->iSpeed;
tmp->m_Direct = bus->iDirection;
tmp->m_CurStationName = bus->chStation;
*tmp->m_Gps = bus->busGps;
tmp->m_OnLine = bus->byOnLine;
if (tmp->m_NeedNewAddress)
{
tmp->m_Address = g_DataContain.m_GpsAddressGet->GetAddress(tmp->m_Lng, tmp->m_Lat);
tmp->m_NeedNewAddress = false;
}
}
m_BusMapLock->unlock();
return true;
}
拋開具體功能:
1:指針bus、m_BusMapLock未判斷空就直接使用了。
2:tmp 變量命名。
3:g_DataConain 這種全局變量數據同步,沒有同步的管理。
4:strutil::format("%d", bus->dwID)。通用簡單功能不宜封裝,封裝會增加代碼的閱讀負擔。這種數字格式化輸入反人類。
覺得可以做的改進:
1:指針使用的前的判斷。這個必須加上。
2:全局共享內存數據的處理。可以考慮支持多線程的單例代替全局變量。從架構上應當調整。
3:指針類型變量增加pPointer 標識。(優化,方便後續維護人員的閱讀)
4:命名bus 修改:pBusInfo。tem 修改 :pFindIDBusInfo。(優化,體現變量意圖)
變量名應當體現用途意義
最好可以有的優化。
1:bus 參數的傳遞:指針修改爲引用:const BusInfo &srcBusInfo
2:鎖的使用:使用對象的構造、析構 來管理函數的調用。
3:UpdataBus 修改:Updata**BusInfo(表示具體對象)
4:針對一些關鍵對象的管理,可以構建專門的管理類。
拋開軟件行業知識、軟件開發應用過程使用的技術,寫代碼本身就是一門非常需要打磨的技術。
如果你身邊有這樣寫代碼的大神,你將如何處理呢...?你替他人填過哪些坑呢?