代码的简洁与合理

缠绕的逻辑

项目中角色投影有2种状态:圆斑那种的ambient shadow,realtime shadow(但在低配下会被禁止)

在高层针对每个角色进行管理,由于两种阴影的实现是一步步出来的,并且是经过很多修改,所以代码中呈现出比较乱的情况,而且两者的逻辑是在不同的函数中实现,彼此之间互相缠绕在一起,ambient shadow为true的时候会在ambient shadow function里面禁掉realtime shadow,反之realtime shadow函数里也会做类似的事情。

这似乎看起来是一个小事,但是我对此则颇有些忧心忡忡:

  • 类似级别的事情在项目里还是不少的
  • 它带来的消耗远比看起来严重

问题的源头与延伸

这种混乱首先反映了我们所处的编程基本功(或者说是素养)的扎实程度。

比较好的一个情况是,负责ambient shadow和负责realtmie shadow的同事在实现这种处于边界情况下,所做的都是能从”角色shadow设置“这个范围来看待,然后保持实现和逻辑的简洁与合理。

之所以出现逻辑缠绕的情况,就在于前后实现与debug的过程中,只是处理了当前的情况和问题,没有把整体相应的进行干净的调整。

逻辑混乱之后,想要完成同样的功能就需要做冗余的事情,进一步加重逻辑的混乱,并且带来额外的性能消耗。

在整理这一块的时候,紧接着就发现在剧情模式下,设置全实时阴影的时候,使用的是每帧判断是否在剧情里,然后设置的做法。

或许当时做的同事也有这个意识,需要在进出剧情的时候调整下即可,但是或许因为时间,或许怕麻烦(源自逻辑的混乱)。

如果不进行处理,这个部分会一点点扩散出去,最后项目就会一点点腐烂。

返璞归真,以正和以奇胜

我们项目其实做了很多很牛逼的东西,性能在业界也属不错,但是为何还会在基础的地方出现问题?

这里我也尝试着分析下其中的心理因素,或许因为:

  • 整个行业里对于写出简洁合理代码给与了过少的关注

    • 不炫:大家喜欢谈论架构,牛逼算法,效果,效率,但是不谈其间的合理实现,仿佛NBA里大家关注的是扣篮,急速变向等,但是对于扎实的传球跑动给予的关注太少,这个东西不炫
  • 见效慢:
    • 简洁合理总是慢慢的一点点的起作用(正的或者负的),短期内很难量化时间投入的价值,代码写的再简洁合理,不也要debug和优化的么。实现者偷点懒,少点追求似乎也无所谓。

换言之,如果项目时间比较短,要求不是特别高,那么简洁合理的实际效用就偏小,但是如果项目时间足够长,量和范围足够大,简洁合理的力量就会显现的非常大,此时已经不只是程序员信仰的追求了。

所以一些仰仗天赋的球员(奥尼尔比如)在早期靠着天赋各种无所谓,进入到NBA中的高水平竞争之后,就会开始注意基本功的训练也是同样的道理–这个才是赢球的关键所在。

信仰与实践

前面一个文章(http://blog.csdn.net/toughbro/article/details/44497517)也谈到了,写出简洁合理的代码并不只是主观意愿的问题,也是一个积累的问题。

积累就要在平时的一点一滴的实践中得来,在那些可简洁可不简洁的时候,选择信仰,去写出简洁的代码实现出来。

否则在真正的大型项目来临,在压力来临的时候,也只能有心无力了。

时间: 2024-10-27 06:27:20

代码的简洁与合理的相关文章

瀑布流代码,简洁版 带分页

接上一篇   瀑布流代码,简洁版 的功能之上添加分页的功能 Index.cshtml @using PagedList.Mvc @model PagedList.StaticPagedList<int> @{ ViewBag.Title = "瀑布流"; Layout = "~/Views/Shared/_Layout.cshtml"; } @section header{ <script src="~/Scripts/jquery-ui

ASP.NET MVC 5使用Filter过滤Action参数防止sql注入,让你代码安全简洁

在开发程序的过程中,稍微不注意就会隐含有sql注入的危险.今天我就来说下,ASP.NET mvc 5使用Filter过滤Action参数防止sql注入,让你代码安全简洁.不用每下地方对参数的值都进行检查,看是用户输入的内容是否有危险的sql.如果每个地方都要加有几个缺点: 1.工作量大 2.容易遗漏 3.不容易维护 下面我通过写一个过滤防止sql的特性类,对Action执行前对Action的参数进行处理,如果有其值有sql语句,就会这些非法字符替换为空字符串. 一.sql注入的例子: 上面的输入

hdu 2063 过山车 二分图的最大匹配模板。。感觉模板代码很简洁

过山车 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 13092    Accepted Submission(s): 5746 Problem Description RPG girls今天和大家一起去游乐场玩,终于可以坐上梦寐以求的过山车了.可是,过山车的每一排只有两个座位,而且还有条不成文的规矩,就是每个女生必须找个个男生做pa

依赖注入——让iOS代码更简洁

原文链接:https://corner.squareup.com/2015/06/dependency-injection-in-objc.html 本文是自己通过阅读 Dependency Injection:Give Your iOS Code a Shot in the Arm 进行总结+翻译的,有错误之处请不吝啬的指出.下面是正文: 依赖注入可以通过初始化方法(或构造函数)传递所需要的参数,或者通过属性(setter)传递.这里将对这两种方法进行讲解. 初始化方法注入: - (insta

lombok ------让代码更简洁方便

估计在平常写代码中,都会创建entity类的实体来,都是那种创建变量,生成set get 方法,方便外部调用,你以为你很流利的操作快捷键就很方便的了? 其实不然,有一个lombok 工具可以帮我们自动生成,但不显示在我们的代码中,该怎么用呢? 1.安装lombok的插件,很简单:下载lombok.jar,百度lombok,进入官网下载最新版本,版本太低的话,eclipse时不支持的.我使用的是1.16.18,eclipse最新版本支持. 双击lombok.jar运行,它会自动查找你的eclips

瀑布流代码,简洁版

最近想实现数据的延迟加载,网上找一下有很的列子,看了Masonry的例子启发,自己写了一个很简单的例子(仅限于每列的宽固定高一致,并不算是真正意义的瀑布流). View页面. @{ ViewBag.Title = "瀑布流"; Layout = "~/Views/Shared/_Layout.cshtml"; } @section header{ <script src="~/Scripts/jquery-ui-1.8.24.min.js"

利用margin代替小图标的绝对定位;使代码更简洁

1 <!doctype html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>Document</title> 6 <style> 7 *{margin:0;padding:0} 8 #div1{background:black;display: inline-block} 9 .img{width:1

yield让代码更加简洁

不能传入out或ref public IEnumerable<Shop> GetShop() { for (int i = 1; i < 11; i++) { yield return new Shop { ID = i, Name = "Shop-" + i }; } }

从源代码剖析modelDriven拦截器和params拦截器和拦截器prepare 和paramsPrepareParamsStack拦截器栈(使您的Struts2代码更加简洁——怎样培养框架设计能力

源代码文件出处:Web App Libraries/struts2-core-2.3.15.3.jar/struts-default.xml 拦截器modelDriven: <interceptor name="modelDriven" class="com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor"/> 拦截器params: <interceptor name="par