Is it time to abandon loops?

Posted by Jonathan Allen  From/InfoQ

With the addition of LINQ, extension methods, and improved anonymous delegates, many algorithms no longer need explicit loops. In a post titled "If you are using a loop, you're doing it wrong", Chuck Jazdzewski looks at a possible future for C#.

Chuck Jazdzewski opens with the source of his quote, a college professor teaching APL. APL is a language from the 60's that focused heavily on vector and matrix operations. While loops existed, they were generally not needed. Chuck continues,
It is similar with LINQ, if you are using a loop you are doing it wrong. I find myself doing a lot of prototyping lately and I am forcing myself to use LINQ; not because I don't like it, far from it, I really like LINQ, but using loops is so ingrained into my psyche that I have to stop myself and force myself to think in LINQ. Every time I am tempted to write a loop that involves a collection or an array I ask myself, could I use LINQ instead? Programmers with more of a database background seem to take to LINQ like a duck to water. They think in sets and vectors, I don't, but I am getting there.
While Chuck relies heavily on LINQ expressions and extension methods, he does not eliminate loops entirely. In one case he has to move them into IEnumerable extension method that hides the complexity from the calling function. This is done for his generic function Reduce, which takes a list of items and combines adjacent items that 'match'. Both the criteria for matching, and how to actually combine them, are passed in as anonymous functions. This makes it unnecessary for anyone to ever write a similar function.

The goal of the code Chuck shows is to create a function that takes a sequence of ranges, text and a name like "Whitespace" or "Keyword", and apply styles to them. In the end his function is reduced to three query statements:
  • Merge whitespace regions with the preceding region.
  • Map styles to ranges.
  • Merge adjacent ranges with the same style.
While most commenter's where positive, not everyone was convinced this is the right way to go. Holger Flick writes,
The headline should be "If you are using a loop, somebody might still be able to read your code without need to analyse it" :)


 感谢原创者的辛勤劳动,希望对您有所帮助,转载请注明原出处。
 您可能对 [Linq] 的这些文章也感兴趣:

深入浅出学Linq:Linq to SQL How do I(4)
LINQ可视化查询编辑器: VLinq
LINQ to SQL真的已死?
LINQ to SQL活学活用(1):这要打破旧观念
深入浅出学Linq:Linq to SQL Provider的初始化
LINQ体验(17)——LINQ to SQL语句之动态查询
LINQ体验(2)——C# 3.0新语言特性和改进(上篇)
LINQ 从数据库读数据生成 XML
LINQ解 爱因斯坦迷题
一个linq to sql的泛化模板