2011-01-11 48 views
1

什么时候谓词合适,什么是最佳使用模式?谓词的优点是什么?什么时候谓词合适,什么是最佳使用模式

在我看来,像大多数情况下,可以使用谓词的紧密循环将完成相同的功能?

我没有看到一个可重用性的参数,因为你可能只会在一个方法中实现一个谓词吗?

他们看起来很不错,但除此之外,他们似乎只在需要对集合类进行快速入门时才会使用它们?

UPDATE

但是,为什么你会一次又一次地改写了紧密的循环?

在我的脑海里/代码,当涉及到收藏我总是落得像

Class Person 
End Class 

Class PersonList 
    Inherits List(Of Person) 

    Function FindByName(Name) as Person 
     tight loop.... 
    End Function 
End Class 

@Ani

通过同样的逻辑,我可以实现的方法,这样

Class PersonList 
    Inherits List(Of Person) 

    Function FindByName(Name) as PersonList 
    End Function 

    Function FindByAge(Age) as PersonList 
    End Function 

    Function FindBySocialSecurityNumber(SocialSecurityNumber) as PersonList 
    End Function 
End Class 

并称之为

Dim res as PersonList = MyList.FindByName("Max").FindByAge(25).FindBySocialSecurityNumber(1234) 

并且结果与代码量及其可重用性大体相同,不是吗?

我不是争辩只是试图理解。

+0

为什么要使用SQL而不是自己在紧密循环中走表?它看起来很不错,但除此之外,似乎只有在需要对数据库进行快速入侵时才会使用它。 – 2011-01-11 03:23:18

+2

(针对您的更新) - 对于一个现实的场景,为什么不实施*紧密的循环?另外,为什么不写`FindByName`,`FindByAge`,`FindBySocialSecurityNumber`?如果用户想要找到24岁到34岁之间的人,该怎么办?你能写出所有可能的过滤器吗?如果循环逻辑更复杂呢? – Ani 2011-01-11 03:39:39

回答

2

谓词的一个主要优点是可组合性。例如,在我的自然语言项目中,我有通过自然语言输入创建的复杂日期时间查询,例如'2010年5月的每个星期四'都会成为通过组合一系列谓词而创建的数据库查询。

与表达式结合时,谓词变得更加强大,因为处理可以推迟到运行时间,甚至可能交给其他系统执行(例如Linq to Entities)。

谓词也是函数式编程的关键。

1

在我看来,像在那里 谓词可以采用紧 循环完成同样的功能 大多数情况下?

的想法是,你会被一遍又一遍地写相同的“从紧”回路“相同相同,但不同”的场景,不同的只是它的“条件”的一部分。为什么不使用框架内置的能力以一种简单的方式指定这个条件,把它作为“循环”方法的一个参数并且用它来完成呢?

1

使用谓词背后的想法/模式是当您需要将一组条件应用于一组数据以转换数据时。您可以编写一个循环来实现相同的最终目标,但通常您只是在查询某些条件集的数据,然后将它的合格部分收集到列表中。通过使用框架支持谓词的能力,扩展代码的新开发人员不必重新创建用于收集合格数据的机制。

相关问题