|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
有理由相信是能提供更出色的性能。很多平台无法支持复杂的编译器,因此需要二次编译来减少本地编译器的复杂度。当然可能做不到net网页编程编译器那么简易。跟着LINQ、扩大办法和加强后的匿名代办署理的到场,很多算法已不再必要举行显式的轮回了。在一篇名为“假如你正在利用loop语句,那你就做得不准确”的发贴中,ChuckJazdzewski切磋了C#的一些大概将来。
ChuckJazdzewski援用了他的年夜学传授在讲APL时的一句话作为贴子的开首。APL是60年月次要面向矢量和矩阵操纵的言语,只管loop语句也存在于个中,但一般是用不着的。Chuck写到:
它与LINQ类似,假如你正在利用loop语句,那你就做得不准确。我厥后做了很多原型开辟,我强制本人利用LINQ,不是我不喜好它,相反,我真的很喜好LINQ,但对loop语句的利用习气已在我的内心扎了根,以是我不能不想举措让本人中断这类习气,强制本人用LINQ的体例往思索。每次当我试图利用loop语句去向理一个collection或一个array时,我就会问本人:能不克不及在这里利用LINQ来替换呢?那些具有数据库背景常识的程序员们在利用LINQ时,就像鸭子下水一样安闲,他们就是以了局集和矢量盘算的体例来思索,而我还不是,但我也差未几快到达那种地步了。 只管Chuck十分依附于LINQ表达式和那些扩大办法,但他并没有完全保持loop语句。比方,他在IEnumerable扩大办法中就利用loop语句来埋没挪用函数的庞大性。在示例函数Reduce中就是这么做的,这一函数将一个成员列表和与其相婚配的临近成员举行组合,而婚配的尺度和怎样对它们举行组合,则是由传进的一个匿名函数来完成的。经由如许的完成,别的人就不必再来编写类似的函数了。
Chuck例举的代码是想创立一个函数,猎取一个具着名为“Whitespace”或“keyword”的文本的序列,然后对它们使用某些作风。最初,他的函数就简化到只要三条查询语句:
- 将whitespace地区与预设的地区兼并
- 为一切的局限映照作风
- 兼并相邻的局限,并利用不异的作风
只管年夜多半批评者都对此赐与一定,但也并非一切人都以为应当这么做。HolgerFlick写到:
我以为题目应当改成“假如你正在利用loop,那当他人读到你的代码时就不必往剖析就能够读懂”:) 别误解我的意义,我是常常利用LINQ的,也很喜好它。但是,在这类情形下要想了解代码的意义很坚苦,更别说要利用它!恕我婉言,我宁肯写一个多行的if语句来取代一行的完成办法。 将来的C#编程会完全保持利用loop吗?假如真是那样的话,它会是件功德吗?
检察英文原文:Isittimetoabandonloops?
来自:http://www.infoq.com/cn/news/2008/04/No-more-loops
效率会有不少的变化。而实际上net网页编程是基于堆栈机器来设计,这和我们常见的基于寄存器的本地机器是差异比较大的。总体来说,这是一种虚拟机的设计思路。 |
|