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

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


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

第一份是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初学者没关系的,明显就看出来你是不是程序初学者。。。。

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

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


原图出处: 点击打开链接
















评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

avi9111

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值