当前位置:C++技术网 > 资讯 > 在家呆着半夜不睡没事闲的发个文章

在家呆着半夜不睡没事闲的发个文章

更新时间:2016-08-15 03:07:14浏览次数:1+次

我试图抓住编程中那一点不变的东西写出来

1.函数指针的用处。

函数指针这个东西,具体用在何处比较好?我认为最适合的用法,就是用在调用时参数需要统一(甚至是需要无参调用),但是实际上参数不能统一,也不能无参的地方。常用于一些需要经常增删的 UI 之处。


2.思路

编程的重点我认为是思路的连贯。但是实际上思路的重点是不能连贯的。一般情况下,需要认清一对多的关系。比如游戏里一个人,他身上的背包里有很多装备。存储方法如下:

class Human//人

{

public list<Item*> m_itemList;

//其他所有与此文无关的东西已忽略

};

class Item//装备

{/*...*/};

static Item itemList[] = {/*.......*/};

也就是说,最下边的这个 static 是预设,人穿装备,只需要指向这个数组的某一个变量。这样我们就做到了每个装备只存一次。

我想说什么呢?你可能已经猜到了。一个程序的设计,是从存储结构的设计开始考虑的。存储是一切的根源。存储结构的设计,关键就在于分级。然后使用挂载等技巧,考虑取用等问题,综合设计出来。一个游戏场景,一般物体的存储是多叉树状结构的。这样的好处就在于交互方便,增删也方便。每帧遍历一次所有物体,进行刷新。


存储的设计,除了要考虑效率,更要考虑你能够保持思路清晰的极限。这关系到后面你每一次取用,书写时所花费的时间。所以很多时候我宁可牺牲一部分效率也要保持思路清晰连贯。


比如上面的人和装备。我强调了那是背包里的装备。如果是穿在身上的呢?那么我就会分成多个list。乍一看,分成多个和写成一个似乎没有区别。但是如果不分类,也许就意味着我们在循环(或是其他遍历方式)中的判定多了一个条件。看,一个小小的变化,直接牵动着后面几乎所有代码的取用方便程度,不能不多加注意啊。


3.关于效率

众所周知,最损效率的就是 new 和 delete 的过程。所以我们要尽可能的避免多次重复的 new 和 delete。对于不动的数据,可以多用预设。


4.公有变量

这个问题我在群里聊过。很多情况下,由于需求改变,原本我们不需要判断的情况,突然变得需要判断了起来。所以我建议把所有可能有用的东西都写成公有变量,省很多事。


5.类里东西的书写

很多人把变量写一堆,函数写一堆。我用的是另一种方法。那就是把变量写在(用到此变量的)函数上边。如果变量重复了,就加个注释写到函数上边。这样,功能有交叉的,或者功能一致的数据和函数是写在一堆的,脉络容易把握。


6.关于投机取巧

可以看到,大多数的 UI 都是观察者模式,也就是无论任何情况,时间一到就会来一次消息处理(无论是否有必要)。 这种朴素的做法在很多地方都是值得推崇的。因为很多时候,我们无法知道下一步将会改变哪里。判断的多了,自己反而宕掉了。所以我们往往推崇简单粗暴有效的办法。这种办法在应付大多数需求改变或是增加功能时有奇效。


7.关于注释

我认为注释是没有必要全部写出来的。需要写的往往只有以下部分:

1.代码的脉络。每个函数所代表的意义,和每个函数在本模块中的定位(地位)。

2.需要判定一个情况成立与否的全部有关条件。


8.关于字符转换

字符串类的处理函数往往都很是给力,无需在字符串的内容上花太多的功夫。我只想说,如果需要进行一些编码转换,不要忘记可以使用位运算。位与,位或,位非,非常方便。