對一些壞代碼的總結、批判

今天就工作過程中遇見的爛代碼、壞代碼做一些總結。

公司代碼一:

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:針對一些關鍵對象的管理,可以構建專門的管理類。

 

拋開軟件行業知識、軟件開發應用過程使用的技術,寫代碼本身就是一門非常需要打磨的技術。

 

如果你身邊有這樣寫代碼的大神,你將如何處理呢...?你替他人填過哪些坑呢?

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章