1.函数参数有效性检查
Example:
① def SetScale(self, s):
assert s > 0.0, s
self.model.scale = math3d.vector(s, s, s)
② def SetTexture(self, textureName):
assert textureName != ''
③ def RotateToHorzDirection(self, dir):
dir.y = 0.0
assert abs(dir) >= 1e-3, dir
2.函数返回值检查,检查函数执行是否有效
Example:
① def OnModelLoaded(self, model):
self.model = model
self.rootbone = self.model.get_root_bone()
assert self.rootbone >= 0
3.执行环境有效性检查
Example:
① def showPrompt(utf8_msg):
assert _WorldProcInst.IM.IsActive()
_WorldProcInst.IM.AddToChatBox(utf8_msg)
② def BindSocket(self, socket, o):
assert self.model is not None
self.model.bind(socket,o)
③ if msg_type == raidprotocol.RD_MSG_SCENE_FOG_PROPERTY_UPDATE:
assert self.scn is not None
self.scn.set_fog(FogType, FogMode, FogColor, FogStart, FogEnd,FogDensity)
④ if msg_type == gsprotocol.GS_MSG_SIGN_OUT_RES_SUCCEEDED:
assert self._proc_state == self.PROC_STATE_NORMAL
self._SwitchState(self.PROC_STATE_SIGN_OUT)
returnFalse
⑤ def __OnPickMember(self, obj):
assert self.squad is not None
4.非法情况检查,非法逻辑分支
Example:
① def ShowStall(self, bShow, type):
if type == gsconsts.STALL_TYPE_COMMON:
self._stall_common=render.model('./meshes/items/sellbag.gim')
elif type == gsconsts.STALL_TYPE_ADVANCE1:
self._stall_common=render.model('./meshes/items/tanwei01.gim')
else:
assert 0, 'unknown stall type'
② def MainSubProc(self):
for v in [self.WorldGame,self.RaidGame, self.Farm.home]:
if v.IsActive():
return v
assert 0, 'should never come tohere'
return None
③ void OnEvent(event, args)
{
switch(event)
{
case EVENT0:
...
break;
case EVENT1:
...
break;
case EVENT2:
...
break;
default:
assert 0 && "invalid event"
}
}
5.防止重入
Example:
① def OnCharacterEnterAOI(self, char_aoi, pet_aoi):
key = char_aoi.char_rtid
assert key not in self.aoiRemoteChar, char_aoi.char_name
② def AddBuffer(self, bufferRtid, typeID, srcRtID, life_Time=0.0,int_Mode=0, real_Mod=0.0):
assert bufferRtid not in self.BufferMap
③ def Initial(self, initChildProcName):
global Instance
assert Instance is None #全局共享数据写保护
Instance = self
return True
6.多个需要保持同步的变量一致性检查
Example:
1) class CString:
def __init__(self,s):
self._str = s
self._len= len(s)
def length(self):
assert self._len == len(self._str)
returnself._len
def set(self,s):
self._str = s
self._len= len(s)