[SCALA] LINQ에 얼마나 있는가?
SCALALINQ에 얼마나 있는가?
내가 LINQ로 찾고 있어요 및 하스켈과 다른 FP 언어 ( '지도'와 '특히 일반화에서 발견 (적어도 표면에) 쿼리 언어가 나타날지도 및 / 또는 지능형리스트의 구현보다 더 아무것도 할 수 ') 스칼라에 대한. 이 올바른지? 보기보다 구문이 있습니까? 여기에 신규 또는 혁신적인 무언가가처럼 내가 읽고 있어요 책 ( "필수 LINQ")의 숨 톤에서 그것은 보인다.
이 백엔드, 파이프 라인, 일차 식 트리 등 LINQ를 구현하는 유형의 전체입니다하지만 내 질문은 쿼리 언어 자체에 관한 것입니다.
건배
조
해결법
-
==============================
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.호흡은 아마도 (식 트리와 같은)이 정말 우수 일부는 모든 것을 "명백한"물건을위한 것입니다. 언어는 액세스 단지 수단; 당신은 throw 키워드를 통해 흥분하거나 노출 기능 이상합니까?
호흡은 아마도 (식 트리와 같은)이 정말 우수 일부는 모든 것을 "명백한"물건을위한 것입니다. 언어는 액세스 단지 수단; 당신은 throw 키워드를 통해 흥분하거나 노출 기능 이상합니까?
-
==============================
3.그것에 대해 책을 읽고 게다가, 당신은 이미 LINQ를 사용 했습니까? 나는 내 일상의 프로그래밍 작업에 엄청난 시간을 절약 할 수 발견. 나를 위해, 그것은 XML 또는 SQL과 같은 "언어"그들과 함께 작업 같은 다른 데이터 소스를 결합하는 데 사용할 수있는 추상화의 다음 단계입니다.
그것에 대해 책을 읽고 게다가, 당신은 이미 LINQ를 사용 했습니까? 나는 내 일상의 프로그래밍 작업에 엄청난 시간을 절약 할 수 발견. 나를 위해, 그것은 XML 또는 SQL과 같은 "언어"그들과 함께 작업 같은 다른 데이터 소스를 결합하는 데 사용할 수있는 추상화의 다음 단계입니다.
또한, 나는 함수형 프로그래밍 및 LINQ에 대한 앤더스 헤 즐스 버그와 인터뷰를 권장합니다.
-
==============================
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.에릭 마이어가 무수하게 언급 한 것처럼 LINQ가 HaskellDB에서 영감을받은, 예를 들어, 그 자체에 새로운 개념이 아니다 그래서 사용 된 프로그래밍 언어 세일즈맨의 고백에, (대중 하스켈에 걸려 얻기). 쿼리 서로 다른 소스에 같은 언어를 사용하여, 혁신적인 어느 정도입니다 중첩 된 관계형 모델 커버의 XML, 객체, 관계형 데이터베이스가 전에 연구자들에 의해 밝혀졌다 사실이지만. 나를 위해, 무엇을 매우 멋진 것은이 인기있는 범용에 포함하고, 이전에 수행하지 않은 주로 객체 지향 언어, 된 것입니다.
에릭 마이어가 무수하게 언급 한 것처럼 LINQ가 HaskellDB에서 영감을받은, 예를 들어, 그 자체에 새로운 개념이 아니다 그래서 사용 된 프로그래밍 언어 세일즈맨의 고백에, (대중 하스켈에 걸려 얻기). 쿼리 서로 다른 소스에 같은 언어를 사용하여, 혁신적인 어느 정도입니다 중첩 된 관계형 모델 커버의 XML, 객체, 관계형 데이터베이스가 전에 연구자들에 의해 밝혀졌다 사실이지만. 나를 위해, 무엇을 매우 멋진 것은이 인기있는 범용에 포함하고, 이전에 수행하지 않은 주로 객체 지향 언어, 된 것입니다.
스칼라 이럴 비슷한을 통합 할 수있는 능력을 가지고있다. 지금까지 스칼라을 위해 우리는 스테판 Zeiger의 ScalaQuery 다니엘 스피 웍의 ScalaQL, 그 후속의 LINQ의 발자취가 있습니다.
from https://stackoverflow.com/questions/1418106/how-much-is-there-to-linq by cc-by-sa and MIT license
'SCALA' 카테고리의 다른 글
[SCALA] 문자열 보간에 달러 기호를 탈출 (0) | 2019.11.27 |
---|---|
[SCALA] 무형의 냇 유형의 한계 (0) | 2019.11.27 |
[SCALA] 어떻게 스칼라는 바이트 코드를 생성? ASM과 같은 몇 가지 라이브러리를 사용하거나 직접 바이너리 쓰기? (0) | 2019.11.27 |
[SCALA] 의 경우의 프로그램 무리에 스칼라 방법 (0) | 2019.11.27 |
[SCALA] 기존 DataFrame 사용 withColumn에 두 개의 열을 추가 (0) | 2019.11.27 |