복붙노트

[SCALA] 스칼라 - 점 표기법 대 중위

SCALA

스칼라 - 점 표기법 대 중위

다른 이상 하나에 대한 가장 좋은 방법은 있습니까? 나는 등 Odersky에 의해 스칼라 책을 읽고 있었어요. 점은 프로그래머 정의 함수 예약되어있는 반면 중위가, 컬렉션 API 함수를 많이 사용처럼 그것은 보인다.

해결법

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

    1.나는 개인적으로 이것에 대한 하드 및 빠른 규칙이없는,하지만 난 단지 상징적 인 방법 이름으로 중위 표기법을 사용하는 경향이 있고, 숫자 것들에 대한 표기법을 점.

    나는 개인적으로 이것에 대한 하드 및 빠른 규칙이없는,하지만 난 단지 상징적 인 방법 이름으로 중위 표기법을 사용하는 경향이 있고, 숫자 것들에 대한 표기법을 점.

    중위 표기법은 나중에 코드를 수정하는 성가신 수 있습니다. 여기 몇 가지 예가 있어요.

    당신이 코드 줄을 상상 :

    xs filter { f } map { g }
    

    시간의 일부 후자의 시점에서 가정 당신은 마지막에 toList를 추가해야합니다. 당신은 그것을 그래서 넣어 :

    xs filter { f } map { g } toList
    

    이 세미콜론 추론 문제가 발생할 수 있습니다. 이러한 문제를 방지하려면 양쪽 끝에 세미콜론을 넣어, 또는 새로운 라인을 넣어. 두 옵션 모두 내 의견으로는, 추악한입니다. 이 모든 넌센스를 방지하기 위해, 내가 xs.filter로 이동하는 것을 선호 (F) .MAP (g). 그것은이 구문 리팩토링 항상 쉽다.

    또 다른 예 : 말 나는 내 코드에 다음이있다 :

    if(foo contains bar) { ..
    

    말, 나는 조건을 부정 할 필요가있다. 나는 그것을 수정하는 경우 다음과 같이 :

    if(!foo contains bar) { ..
    

    저런. 이것은 (! foo는) .contains (바)로 분석됩니다. 우리는 원하지 않는 것.

    아니면 추가로 새로운 조건을 추가 할 필요가 가정, 당신은 그것을 그렇게 수정 :

    if(foo contains bar && cond) { ..
    

    또 다른 안됐다. 이것은 foo.contains로 분석됩니다 (줄. && (COND)). 우리는 다시, 원하지 않는 것.

    물론, 당신은 괄호의 무리를 추가 할 수 있지만, 점 표기법에 비해 그 추한 읽기 어려운 / 편집 될 것이다.

    이제, 내가 위에서 말한 모든 너무 상징적 메소드 이름에 적용됩니다. 도트 구문과 함께 사용할 때 상징적 인 방법은 자연스러운보고, 그래서 나는 그들을 위해 중위 구문을 선호합니다.

    내부 DSL을 : 위의 가이드 라인에 대한 한 가지 예외입니다. (일반적으로 중위 표기법 사용) 자신의 문서 / 예에 규정 된 방법으로 기입 할 때 그들은 일반적으로 원인 분석 문제로되지 않도록주의하여 제작된다.

  2. ==============================

    2.그것은 개인적인 취향의 문제이다. 당신의 결정은 하나 개의 스타일을 사용하거나 다른 하나는 코드를 가장 쉽게 읽을 내용에 기초해야한다.

    그것은 개인적인 취향의 문제이다. 당신의 결정은 하나 개의 스타일을 사용하거나 다른 하나는 코드를 가장 쉽게 읽을 내용에 기초해야한다.

    그러나 참고 점과 괄호를 생략 할 수있는 능력이 있으므로 때때로 당신은 단지 그들을 사용하여 다시 가을이, 특정 구문 구조에 제한된다.

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

    3.점 표기법을 통해 올바른 사용 중위 표기법을 설명하는 공식 스칼라 사이트의 문서에서 좋은 스타일 가이드가있다.

    점 표기법을 통해 올바른 사용 중위 표기법을 설명하는 공식 스칼라 사이트의 문서에서 좋은 스타일 가이드가있다.

    접미사 표기법 :

    names.toList
    // is the same as
    names toList // Unsafe, don't use!
    

    인수에 대응-1 :

    // right!
    names foreach (n => println(n))
    names mkString ","
    optStr getOrElse "<empty>"
    // wrong!
    javaList add item
    

    고차원 적 기능 :

    // wrong!
    names.map (_.toUpperCase).filter (_.length > 5)
    // right!
    names map (_.toUpperCase) filter (_.length > 5)
    

    기호 방법 / 운영자 :

    // right!
    "daniel" + " " + "Spiewak"
    // wrong!
    "daniel"+" "+"spiewak"
    
  4. ==============================

    4.나는 고양이 라이브러리와 데카르트를 만드는 오전 때지도에 대한 중위 표기를 사용하여 잘 작동 것으로 나타났습니다. 예컨대 :

    나는 고양이 라이브러리와 데카르트를 만드는 오전 때지도에 대한 중위 표기를 사용하여 잘 작동 것으로 나타났습니다. 예컨대 :

    (fetchIt(1) |@| fetchIt(2) |@| fetchIt(3)).map(MyCaseClass)
    

    그렇게 같은 주변의 괄호를 제거 얻을 수 있습니다 :

    fetchIt(1) |@| fetchIt(2) |@| fetchIf(3) map MyCaseClass
    

    내보기에 두 번째 변종은 더 좋은 읽습니다. 취향의 문제는 나는 가정한다. 그냥 내 두 센트 '가치를 추가하고 싶었다.

    | 위의 작품 때문에 에서 "| @ |" "지도"에서 m보다 더 높은 우선 순위를 가지고 있습니다. 자세한 내용을 알 수 스칼라 LANG 사양의이 부분을 읽어

    http://scala-lang.org/files/archive/spec/2.12/06-expressions.html#infix-operations

  5. from https://stackoverflow.com/questions/10233227/scala-infix-vs-dot-notation by cc-by-sa and MIT license