一张图说明不写备注的重要性

来源:互联网 发布:c语言地址符号 编辑:程序博客网 时间:2024/05/16 14:05

“音乐是全世界同行的语言”


写了几年代码,这才是我见过的第二份备注极少,却很容易阅读,而且扩展健壮的代码的

第一份是08年的时候一个澳洲老写的给财务用的代码,vba写的命名极长,一个简单功能代码很多,却就算被一个不是计算机的人乱改,框架还是健在

第二份就是我手上这份手游代码了

大概是这个样子的

if (OnTheRunFuelManager.Instance.Fuel <= 0 && !OnTheRunFuelManager.Instance.IsFuelFreezeActive())            {                if (PlayerPersistentData.Instance.FirstTimeFuelFinished && OnTheRunDataLoader.Instance.GetFirstFuelGiftEnabled())                {                    OnTheRunUITransitionManager.Instance.OpenPopup("FuelGiftPopup");                }                else if (OnTheRunCoinsService.Instance.IsFreeFuelVideoAvailable())                {                    OnTheRunUITransitionManager.Instance.OpenPopup("FuelRefillPopup");                }                else                {                    Manager<UIRoot>.Get().ShowWarningPopup(UICurrencyPopup.ShopPopupTypes.Fuel);                }            }            else            {                if (OnTheRunTutorialManager.Instance.TutorialActive)                {                    if (currentSetIndex != 0 || currentCarsList != Cars_EU || categorySelectedCar[currentSetIndex] != 0)                        OnTheRunTutorialManager.Instance.LocationAndCarChanged = true;                    backupCurrentSetIndex = currentSetIndex;                    backupCurrentCarsList = currentCarsList;                    backupCategorySelectedCar = categorySelectedCar[0];                    currentSetIndex = 0;                    currentCarsList = Cars_EU;                    categorySelectedCar[currentSetIndex] = 0;                    //SetupParkingLot();                    backupSliderPosition = Cars_EU_Scroller.transform.localPosition;                    Cars_EU_Scroller.gameObject.SetActive(true);                    Cars_EU_Scroller.transform.localPosition = Vector3.one;                    if (!OnTheRunFuelManager.Instance.IsFuelFreezeActive())                        OnTheRunFuelManager.Instance.Fuel--;                }                this.StartCoroutine(this.StartPlay());            }

即使你完全不懂C#,完全不懂游戏逻辑,也是没关系的,只要你懂一点点英文,你就能很简单的看懂这段代码,知道如何做二次开发

这段代码明显的逻辑就是,先判断体力(或者有没体力冻结的BUFF,就是玩家有没充值),如果玩家都不满足以上条件,扣1个体力,并开始游戏

整段代码不需要一点备注,因为英文本身就是一种语言,本来就是用来沟通的,并不是说一定只能是程序员和硬件沟通的语言

我们真的能够很容易地从代码里面读懂原代码程序员的思想

也并不是所有代码都可以的,起码我写的代码你们可能读不懂,或者国内很多程序员写的代码都晦涩难懂,以至于某外行人,部分内行人觉得应该写备注要不鬼知道你在写什么

事实就摆在眼前,这段代码写的吊的地方在于哪里呢(我并不是要和你研究算法多牛,用最少的代码做最多的事情,优化做得多么好)


首先我的理解,1段代码写的好坏在于写这代码的人的个性,和他有没做优化工作没关的(很多人都说重写,重构,我真没见过一个成熟的商业团队有重构的时间的,商业程序员是被付费,做有偿的程序开发劳动的)

然后我们来分析一下这段代码,首先用了面向对象和设计模式,只是最简单的面向对象即可,class和单例

if (OnTheRunFuelManager.Instance.Fuel <= 0 && !OnTheRunFuelManager.Instance.IsFuelFreezeActive()){//就是这么简单的Instance判断而已,只要你是个程序员都能看出class里面的属性Fuel不是是布尔变量而是int吧//然后.IsFuelFreezeActive()也告诉你例这个方法是做什么用的}


所以我得到的很大启发就是,只要用面向对象,类,属性和方法名命名得稍微好一点,这样代码维护就很有效率,(并不是说面向对象多么优雅,性能多好,多容易扩展这些屁话)备注不用写,甚至文档也不用写了(事实上很多成功游戏工作室也不会有这个东西),因为策划需要的功能,都在代码里有体现了(文档是文字,代码也是文字,代码简化原则之一,能只写一份,为什么要维护2份捏,你也维护不过来,甚至还有人认为要写备注的,那可是3份文字啊)

虽然在国内要做到这种程度不容易,甚至很多功能我简直就不写对象了,一些好的习惯还是可以坚持一下的,说不定理想万一实现了呢


ps.当然很重要一点是1个基础功能很好的IDE能支持开发,各种查找,各种类,方法的跳转,debug功能等等


对于程序员来说,上面说这么多都是废的,其实根本就是一张图就懂了

下面图是反例,你代码写的烂,确实需要备注补救的,可真补救得了么?

要是没有前文后理,没有工具,你能看出来2个SendMessage的区别么?怎么就不能起名起好一点呢

public class GameMain:MonoBehaviour{private GameObject objCubeRight;.....objCubeRight.SendMessage("");.....}


(这个和你是不是U3D初学者没关系的,明显就看出来你是不是程序初学者。。。。

拿这个哥们做反例确实不好意思,这个初哥和上面专业写程序对比不合适,我道歉,我经常也胡乱起名的,我比较懒

至于上面专业写程序的代码也没有我刚说的那么好(重点不在有无备注,上面专业的代码已经比较专业的,但还不够好),至于为什么,我后面的博客再普通)


原图出处: 点击打开链接





                                             
0 0
原创粉丝点击