2011-01-11 4 views
1

조건부가 적절한시기는 언제이며 가장 적합한 패턴은 무엇입니까? 술어의 장점은 무엇입니까?조건부가 적절한시기와 용도에 가장 적합한 패턴은 무엇입니까

대다수의 경우 술어를 사용하면 동일한 기능을 수행 할 수있는 경우가 많습니다.

한 가지 방법으로 조건부를 구현하는 것일 뿐이므로 재사용 가능성있는 인수가 표시되지 않습니까?

멋진 느낌이 들지만 게다가 컬렉션 수업을 빠르게 해킹해야 할 때만 사용할 수있는 것처럼 보입니다.

UPDATE

그런데 왜 다시하고 다시 꽉 루프를 다시 작성 될 것이다? 이 컬렉션에 올 때 내 마음/코드에서

난 항상 같은

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 
과 방법을 구현할 수 같은 논리에 의해

Class Person 
End Class 

Class PersonList 
    Inherits List(Of Person) 

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

같은 @Ani

와 끝까지

전화 번호 :

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

코드의 양과 재사용 가능성의 결과는 대체로 동일합니까?

나는 이해하려고 애를 쓰지 않고있다.

+0

좁은 루프에서 테이블을 직접 걷는 대신 SQL을 사용하는 이유는 무엇입니까? 외모와 느낌이 좋지만 데이터베이스 외에도 빠른 해킹이 필요한 경우에만 사용하는 것처럼 보입니다. –

+2

(업데이트에 응답) - 사실적인 시나리오의 경우 꽉 루프를 구현하지 않는 이유는 무엇입니까? 또한'FindByName','FindByAge','FindBySocialSecurityNumber'를 쓰지 않으시겠습니까? 그런 다음 사용자가 24 세에서 34 세 사이의 사람들을 찾고 싶어한다면? 가능한 모든 필터를 쓸 수 있습니까? 루프 논리가 더 복잡한 경우 어떻게해야합니까? – Ani

답변

2

술어의 주요 이점 중 하나는 조합 가능성입니다. 예를 들어, 자연 언어 프로젝트에서 나는 자연어 입력으로부터 만들어진 복잡한 날짜 시간 쿼리를 가지고 있습니다. '2010 년 5 월 모든 목요일'은 일련의 술어를 작성하여 만든 데이터베이스 쿼리가됩니다.

표현식을 사용하면 처리가 런타임까지 지연 될 수 있고 실행될 다른 시스템 (예 : Linq에서 엔티티)으로 전달 될 수도 있기 때문에 조건부가 더욱 강력 해집니다.

술어는 기능 프로그래밍의 핵심입니다.

+0

+1 개발자가 함수 프로그래밍을 한 번도 해보지 않았다면 코딩 할 때 파이프 라이닝과 데이터의 기능을 쉽게 이해하지 못합니다. – Achilles

1

그것은 나에게 보인다 술어가 같은 기능을 수행 할 꽉 루프를 사용할 수있다 대부분의 경우처럼?

생각

단지 그것의 "조건"부분을 변경, "동일 - 동일하지만 서로 다른"시나리오에서 또 다시 같은 "꽉"루프를 작성 할 거라고합니다. 왜 프레임웍의 내장 된 기능을 사용하여 그 상태를 succint 방식으로 지정하고, 그것을 "루핑"메소드의 인수로 넘겨서 처리할까요?

1

술어를 사용하는 배후의 아이디어/패턴은 일련의 조건을 데이터 변환에 적용해야 할 때입니다.루프를 작성하여 동일한 최종 목표를 달성 할 수 있지만 일반적으로 일부 조건 집합에 대한 데이터를 조사한 다음 목록에서 해당 조건 집합을 수집하는 것입니다. 술어를 지원하는 프레임 워크 기능을 사용하면 코드를 확장하는 새로운 개발자가 규정 된 데이터를 수집하는 데 사용 된 메커니즘을 다시 만들 필요가 없습니다.

관련 문제