《我的来世是个包裹》开发日志0324
又发现了自己之前一个很不好的编程习惯……就是if条件判断喜欢用&&把各个条件合并到一起。其实更健康的做法是写两层if。
拿《我的来世是个包裹》的代码来举例。有一段代码是这样的:
if (isStoryModeOn && !GameSlot.IsMsgBoxOn)
{
UpdateShowStorySpeak();
CheckMissionComplete();
CheckItemInAndOut();
CheckExitStoryParagraph();
}
else
{
AutoSave();
}
意思是,非故事模式(调试模式下)调用自动存档判断方法(存档时间间隔在AutoSave方法里处理了,不写在外面),故事模式下且消息框不弹出的时候执行各个逻辑检测流程。
我很惊讶之前放着逻辑漏洞那么大的代码无视。明显不能这么写。这样会导致故事模式下只要一弹出对话框就会自动保存,我脑子真的有坑。正确的写法是:
if (isStoryModeOn)
{
if (!GameSlot.IsMsgBoxOn)
{
UpdateShowStorySpeak();
CheckMissionComplete();
CheckItemInAndOut();
CheckExitStoryParagraph();
}
}
else
{
AutoSave();
}
没错,
if (条件1 && 条件2) {语句1;语句2;……;语句n}
和
if (条件1) { if(条件2){语句1;语句2;……;语句n}}
是等价的。
但是
if (条件1 && 条件2) {语句1;语句2;……;语句n;}else{语句m;}
和
if (条件1) { if(条件2){语句1;语句2;……;语句n}}else{语句m;}
完全不等价!
看了下面这张图你们就明白了:

基本功不扎实的下场……