복붙노트

[SCALA] LINQ에 얼마나 있는가?

SCALA

LINQ에 얼마나 있는가?

내가 LINQ로 찾고 있어요 및 하스켈과 다른 FP 언어 ( '지도'와 '특히 일반화에서 발견 (적어도 표면에) 쿼리 언어가 나타날지도 및 / 또는 지능형리스트의 구현보다 더 아무것도 할 수 ') 스칼라에 대한. 이 올바른지? 보기보다 구문이 있습니까? 여기에 신규 또는 혁신적인 무언가가처럼 내가 읽고 있어요 책 ( "필수 LINQ")의 숨 톤에서 그것은 보인다.

이 백엔드, 파이프 라인, 일차 식 트리 등 LINQ를 구현하는 유형의 전체입니다하지만 내 질문은 쿼리 언어 자체에 관한 것입니다.

건배

해결법

  1. ==============================

    1.기능적 말, LINQ는 아무것도하지만 모나드를 표현하는 구문 단순화 없다. 객체에 LINQ - 당신에 대해 얘기했다있는 (목록-함축도이 이미 매우 유용 할 것이다), (하스켈의 목록-모나드와 유사)이 단지 하나의 가능한 응용 프로그램입니다.

    기능적 말, LINQ는 아무것도하지만 모나드를 표현하는 구문 단순화 없다. 객체에 LINQ - 당신에 대해 얘기했다있는 (목록-함축도이 이미 매우 유용 할 것이다), (하스켈의 목록-모나드와 유사)이 단지 하나의 가능한 응용 프로그램입니다.

    당신이 작성하는 경우

    from x in expr1
    from y in expr2
    select x + y
    

    그것은 아무것도하지만,

    do
        x <- expr1
        y <- expr2
        return $ x + y
    

    하스켈한다.

    수행되는 구체적인 것은 Linq.Enumerable이 IEnumerables을 포함하는 하나의 구현이있는 사용자 정의의 LINQ 공급자 (확장-방법)에 따라 달라집니다.

    하나를 제공함으로써, 당신은 당신의 유형에 대한 완전히 새로운 LINQ-의미를 만들 수 있습니다.

    예 : (널 (NULL) 값을) 실패 할 수 계산에 대한 옵션 유형을 감안할 때, 사람은 그들을 쿼리에 대한 Linq에-제공자를 정의 할 수 있습니다.

    public static class MaybeExtensions
    {
    public static Option<T> ToMaybe<T>(this T value)
    {
        return Option<T>.Some(value);
    }
    
    public static Option<U> SelectMany<T, U>(
        this Option<T> m, 
        Func<T, Option<U>> k)
    {
        return !m.IsNone ? Option<U>.None : k(m.Value);
    }
    
    public static Option<V> SelectMany<T, U, V>(
        this Option<T> m, 
        Func<T, Option<U>> k, 
        Func<T, U, V> s)
    {
        return m.SelectMany(x => k(x).SelectMany(y => s(x, y).ToMaybe()));
    }
    } 
    

    이것은 지금 우리는 코드를 작성할 수 있습니다 것입니다 :

    var sum = from x in ReadNumber("x")
              from y in ReadNumber("y")
              select x + y; 
    

    계산은 모든 계산이 성공한 경우에만 값을 반환하고, 그렇지 않으면 제 실패 하나에서 실패 할 것이다.

    식 트리와 결합, Linq는 매우 강력하고 표현할 수 있습니다 -

    일부 링크 :

    고정 소수점 콤비와 결합, Linq는 완전한 기능 미니 언어 (의 LINQ 레이트 레이서)를 제공합니다.

    참고 스칼라와 F # 모두 유사한 개념을 가지고에 대한-함축하고 계산 식 모두있는 모나드 추상화 :

    규모 :

    for (x <- expr1
         y <- expr2) yield x + y
    

    에프#:

    monad {
        let! x = expr1
        let! y = expr2
        return x + y
    }
    
  2. ==============================

    2.호흡은 아마도 (식 트리와 같은)이 정말 우수 일부는 모든 것을 "명백한"물건을위한 것입니다. 언어는 액세스 단지 수단; 당신은 throw 키워드를 통해 흥분하거나 노출 기능 이상합니까?

    호흡은 아마도 (식 트리와 같은)이 정말 우수 일부는 모든 것을 "명백한"물건을위한 것입니다. 언어는 액세스 단지 수단; 당신은 throw 키워드를 통해 흥분하거나 노출 기능 이상합니까?

  3. ==============================

    3.그것에 대해 책을 읽고 게다가, 당신은 이미 LINQ를 사용 했습니까? 나는 내 일상의 프로그래밍 작업에 엄청난 시간을 절약 할 수 발견. 나를 위해, 그것은 XML 또는 SQL과 같은 "언어"그들과 함께 작업 같은 다른 데이터 소스를 결합하는 데 사용할 수있는 추상화의 다음 단계입니다.

    그것에 대해 책을 읽고 게다가, 당신은 이미 LINQ를 사용 했습니까? 나는 내 일상의 프로그래밍 작업에 엄청난 시간을 절약 할 수 발견. 나를 위해, 그것은 XML 또는 SQL과 같은 "언어"그들과 함께 작업 같은 다른 데이터 소스를 결합하는 데 사용할 수있는 추상화의 다음 단계입니다.

    또한, 나는 함수형 프로그래밍 및 LINQ에 대한 앤더스 헤 즐스 버그와 인터뷰를 권장합니다.

  4. ==============================

    4.LINQ 쿼리 구문의 핵심은, 실제로 범위가 큰되지 않습니다. 그것은 단순히 방법과 람다에 매우 직역입니다 - 그래서

    LINQ 쿼리 구문의 핵심은, 실제로 범위가 큰되지 않습니다. 그것은 단순히 방법과 람다에 매우 직역입니다 - 그래서

    var qry = from x in src
              where x.Foo == "foo"
              select x.Bar;
    

    말 그대로입니다 :

    var qry = src.Where(x => x.Foo == "foo").Select(x => x.Bar);
    

    (그들은 가장 일반적인 (뿐만 아니라) 구현 있지만)이 확장 방법에 대해 아무것도 모르고, 등 식 (따라서 필요한 메소드 구현의 수) 키워드의 수에 대한 것도 큰되지 않습니다. 존 번 (라이브 프리젠 테이션에서) 1 시간 모두를 구현하려고했습니다. 그는 너무 심하게 ;-p하지 않았다

    대리인 또는 작성된 코드를 나타내는 개체 모델 중 하나를 컴파일 할 수 있습니다 즉 람다 식 - 아마도 LINQ의 더 인상적인 부분은 LINQ가 데이터베이스에 대해 사용할 수 있도록 요구 된 식 트리를 지원합니다. 흥미롭게도,이 같은 생각은 DLR 해상도가 4.0에서 작동하는 방식으로 통해 빛난다.

  5. ==============================

    5.에릭 마이어가 무수하게 언급 한 것처럼 LINQ가 HaskellDB에서 영감을받은, 예를 들어, 그 자체에 새로운 개념이 아니다 그래서 사용 된 프로그래밍 언어 세일즈맨의 고백에, (대중 하스켈에 걸려 얻기). 쿼리 서로 다른 소스에 같은 언어를 사용하여, 혁신적인 어느 정도입니다 중첩 된 관계형 모델 커버의 XML, 객체, 관계형 데이터베이스가 전에 연구자들에 의해 밝혀졌다 사실이지만. 나를 위해, 무엇을 매우 멋진 것은이 인기있는 범용에 포함하고, 이전에 수행하지 않은 주로 객체 지향 언어, 된 것입니다.

    에릭 마이어가 무수하게 언급 한 것처럼 LINQ가 HaskellDB에서 영감을받은, 예를 들어, 그 자체에 새로운 개념이 아니다 그래서 사용 된 프로그래밍 언어 세일즈맨의 고백에, (대중 하스켈에 걸려 얻기). 쿼리 서로 다른 소스에 같은 언어를 사용하여, 혁신적인 어느 정도입니다 중첩 된 관계형 모델 커버의 XML, 객체, 관계형 데이터베이스가 전에 연구자들에 의해 밝혀졌다 사실이지만. 나를 위해, 무엇을 매우 멋진 것은이 인기있는 범용에 포함하고, 이전에 수행하지 않은 주로 객체 지향 언어, 된 것입니다.

    스칼라 이럴 비슷한을 통합 할 수있는 능력을 가지고있다. 지금까지 스칼라을 위해 우리는 스테판 Zeiger의 ScalaQuery 다니엘 스피 웍의 ScalaQL, 그 후속의 LINQ의 발자취가 있습니다.

  6. from https://stackoverflow.com/questions/1418106/how-much-is-there-to-linq by cc-by-sa and MIT license