나는 왜 컨벤션의 필요성을 막기 위해 언어를 디자인하지 않는지에 대한 질문을 받았습니다. 다시 말해서, 왜 스칼라는 프로그래머가 가끔 생략하지 않고 항상 괄호를 사용하지 않는가?
대답은 참조 투명성에 있습니다. 기본적으로 함수에 부작용이 없으면 프로그램 동작을 변경하지 않고 함수 호출을 결과로 바꿀 수 있습니다.
즉, 매개 변수 나 부작용이없는 함수는 의미 적 val으로 해당 함수의 리턴 값을 보유하는 것과 같습니다 . 이 속성으로 인해 클래스가 발전함에 따라 프로그래머는 val편의성 또는 효율성에 따라 함수 사용 또는 함수 사용 간에 전환 할 수 있습니다 .
괄호를 생략 할 수 있기 때문에 같은 코드를 호출하는 것은 함수인지 또는 queue.size이면 신경 쓰지 않아도됩니다 . 따라서 클래스 의 구현 자는 호출 코드를 변경하지 않고도 둘 사이에서 자유롭게 변경할 수 있습니다 (다시 컴파일해야한다고 생각하지만). 그것은 클래스의 공개 인터페이스를 안정화시킵니다. 예를 들어, 당신은 밖으로 시작 할 수 호출하여 기초에 잠재적 인 후 변경 A와 효율성의 이유.sizevalQueuequeue.sizesizeListO(n)sizeval
이 규칙은 부작용이있을 때 괄호를 제안하여이 클래스 멤버가 확실히 함수 호출이므로 참조에 투명 하지 않다는 것을 분명히 합니다 . 부작용을 일으키는 지 아는 코드를 호출하는 것이 중요하므로 반복해서 호출하는 것을 피할 수 있습니다. 그것이 함수인지 아닌지에 관심이 없다면, 그것이 아닌 것처럼 취급 할 수도 있습니다.