sum:
如果一个信息是包含在数据中的,那么即便读取这个信息要多谢两行代码,但是还是应该直接去使用它,而不是通过记忆来获得和保持一致。
这样更简洁,更具扩展性。
而记忆方式在代码量达到一定程度之后会带来质变级的脑力负担和出错几率。
details:
昨天出现的一个错误就是搞错了render target的size。
本身的实现大致是这样:
//config
RenderTargetSize size;
xxxxSize size0;
xxxxSize size1;
//init
RenderTarget* rt = CreateRenderTarget(size.x, size.y, format);
//in another function
vector<u16> data;
data.resize(size.x*size.y);//then read data
从简单例子看没有问题,但是如果size的数量多到一定程度之后,就会很容易出错。
我就中招了。
结果使用了另外一个含义非常像的size。
最后需要debug一段时间。
真正简洁的做法是直接从RenderTarget中拿相关的size和format信息,设计上也更具有扩展性。
这种使用一种类似约定,我知道初始化的时候是什么样的,就会让代码实现的时候容易出错,维护成本也很高。
类似的还有:
std::vector<char> a;
//这个就是容易出错而且类型本身就在a中,强记出来就不好
printf("size %d", a.size()*sizeof(char));
//通过类型来做就好多了
template<class T>
u32 VectorMemSize(const std::vector<T>& v)
{
return sizeof(T)*v.size();
}
printf("size %d",VectorMemSize(a));
所以应该直接的使用直接蕴含在数据中的信息,而不是通过记忆等方式来确保一致。
记忆方式在代码量达到一定程度之后会带来质变级的脑力负担和出错几率。
时间: 2024-10-26 15:23:22