随笔分类 - 编程范式
各种应用场合采取的策略
摘要:看到很多人喜欢写注释,当然也有很多人不喜欢写。很多人喜欢写复杂的文档,甚至做了漂亮的图片来说明问题,花了相当大的精力去文档上面。为什么?写文档又不能运行,对不?写文档的作用我想主要是用来整理思路。人类的智力有限,尤其是记忆力有限,因此需要很多外部存储体来帮助我们缓冲“中间数据”。那些精心制作的文档,看上去好像没啥作用,纯浪费精力,但是如果没有这些精美清晰的文档,你的思路会一团糟,结果花了更多时间在debug之上。做文档的人都是聪明人,任何时候,写文档都比写程序要容易得多,因为文档可以容错,格式可以自由。文档也有一个要求,那就是你对编码要有信心,如果你写得文档和编码能力差太远,根本无法实现文档描
阅读全文
摘要:lambda是匿名函数,因为没有名字,也没有关键字引用自身,因此递归的编码就成了问题。一、最简单有效的方案是:Func<int,int> f =null; //变量须先赋值才能使用f = n=> n==0?1:n*f(n-1);f(11); //==39916800有人担心f会被恶意修改,因为就是一个委托变量,而且认为f是委托,而不是匿名函数自身,所以不算匿名函数递归。我觉得,虽然是委托,但是引用的就是匿名函数,函数指针调用的函数难道不是函数自身吗?二、要避免变量被恶意修改,方案是:Func<int,int> f = null;f = n =>{Func&l
阅读全文
摘要:题目起的好吧。结构类型可以在栈分配空间,而引用类型只能分配指针。通过数组,结构类型可以分配一个连续的空间和一个指针。数组结合引用类型只能分配连续的指针,和零散的空间。这是性能问题的一个潜在点。因此要做序列化的东西,而又比较在意性能,数组结合结构类型是有必要的。没有指针,可以用下标来访问,也就是枚举数组的元素,需要返回数组本身(指针)和他当前的下标(自然数)两样东西,这没有指针方便,但基本可以满足要求。问题是,很多数据结构的api并不返回数组和下标,而是返回值本身。如果该值是引用类型,那么还能当指针来使用,如果该值是值类型,那就不能枚举元素了。也许我们不需要枚举元素,只需要改变元素,提取值类型元
阅读全文
摘要:一、主函数一个程序解决一个问题。那么就可以用一个主函数解决这个问题。二、子程序这个函数会变得很长,读起来很辛苦,咋办?分解成若干子程序,让主函数调用他们。那么怎么划分?基于什么原则?子程序的划分,基于逻辑层次;阅读是基于一定层次的,比如事件的概要和事件的细节的差别;文章的目录和文章的内容的区别;要想快速的了解一件事,只需要知道概要便可以。主函数就是记录概要的地方,而子程序是具体的内容;假如子程序还是太复杂,那么还能细分成子子程序,由子程序在它的层面上去提取概要信息。是否可以无限的细分下去?直到子程序变得足够简单?最好不要!子程序是一个片段,相当于把一个完整的流程给片面化,那么这个子程序本身就是
阅读全文
摘要:强类型的好处是在编译期就能发现问题。应该善用这个优势。函数入口经常要检测参数是否合法。我觉得主要原因在于算法无法处理类型的所有实例,而只能处理部分实例,所以要判断参数的值。那么为何不去构造更严格范围的新类型,而避免参数值判断呢?比如算法只能处理偶数就不要用int,而用新的偶数类。
阅读全文