Scala 유형 시스템의 장점
저는 Scala 언어를 탐구하고 있습니다. 내가 자주 듣는 한 가지 주장은 Scala가 Java보다 강력한 유형 시스템을 가지고 있다는 것입니다. 이것으로 사람들이 의미하는 바는 다음과 같습니다.
scalac
정상적으로javac
컴파일 되는 특정 버그 프로그램을 거부 하고 런타임 오류 만 발생시킵니다.- 컴파일러가 프로그래머가 조건을 위반하는 코드를 작성하도록 허용하지 않도록 특정 불변성을 Scala 프로그램에서 인코딩 할 수 있습니다.
내가 그렇게 생각하는 것이 옳은가?
Scala Type 시스템의 주요 장점은 그다지 강력 하지 않고 훨씬 풍부 하다는 것입니다 ( " Scala Type System "참조).
(Java는 그들 중 일부를 정의하고 다른 것을 구현할 수 있지만 Scala에는 내장되어 있습니다).
또한 참조 신화 업체 1 : 스칼라의 "유형 유형" 주석, 스티브 예그의 블로그 게시물을 여기서 그는 "disses" "형의 종류 및 유형 유형 유형이있다"때문에 "프랑켄슈타인의 괴물"로 스칼라.
- 기본 유형 (Int, Doubles, ...) 대신 사용되는 값 유형 클래스 (값 의미 체계가있는 비교적 작은 데이터 구조에 유용), 추가 메서드를 위해 "Rich"클래스로 암시 적으로 변환합니다.
- nullable이 아닌 유형
- 모나드 유형
- 특성 유형 (및 함께 제공 되는 믹스 인 구성 )
- 싱글 톤 객체 유형 ( '객체'를 정의하고 하나만 있음),
- 복합 유형 (객체 유형의 교차, 객체 유형이 여러 다른 유형의 하위 유형임을 표현하기위한 것)
- 기능 유형 (
(type1, …)=>returnType
구문), - 케이스 클래스 (생성자 매개 변수를 내보내고 패턴 일치를 통해 재귀 적 분해 메커니즘을 제공하는 일반 클래스)
- 경로 종속 유형 (중첩 유형이 해당 유형 경로를 참조하는 방법을 제공 할 수있는 언어),
- 익명 유형 (익명 함수 정의용),
- 자기 유형 ( 예를 들어 Trait에서 사용할 수 있음 ),
- 다음 과 함께 aliases를 입력하십시오 .
- 패키지 객체 (2.8에서 도입 됨)
- 일반 유형 의 하위 유형 지정 동작을 제어
하는 유형 매개 변수 주석 메커니즘 이있는 일반 유형 (예 : Java)
- 공변 제네릭 유형 : 주석은 공변 위치에서만 사용할
+T
유형T
을 선언합니다 .Stack[T]
의 하위 유형 인Stack[S]
경우T
의 서브 타입이다S
. - 반 변성 제네릭 유형 : 반 변성 위치에서만 사용되도록
-T
선언T
합니다.
- 공변 제네릭 유형 : 주석은 공변 위치에서만 사용할
- 바인딩 된 일반 유형 ( Java가 일부를 지원 하더라도 )
- 높은는 유형 kinded , 하나는 자바 제네릭으로 가능한 것보다 더 진보 된 형태의 관계를 표현할 수 있도록,
- 추상 유형 (일반 유형의 대안),
- 기존 유형 ( Java 와일드 카드 유형과 같이 Scala에서 사용됨 ),
- 암시 적 유형 ( " Scala의 굉장함은 암시 적입니다 "참조)
- 제한된 유형보기 및
- 구조 유형 , 원하는 유형의 특성을 지정하여 유형을 지정합니다 (덕 타이핑).
Java의 주요 안전 문제는 분산과 관련이 있습니다. 기본적으로 프로그래머는 Java에서 런타임에 예외가 발생할 수있는 잘못된 분산 선언을 사용할 수 있지만 Scala는이를 허용하지 않습니다.
사실, Java Array
가 공변 이라는 사실 은 잘못된 코드가 생성 될 수 있기 때문에 이미 문제입니다. 예를 들어, sepp2k에 의해 예시 된대로 :
String[] strings = {"foo"};
Object[] objects = strings;
objects[0] = new Object();
물론 모든 종류의 것을 허용하는 Java에는 원시 유형이 있습니다.
또한 Scala도 가지고 있지만 캐스팅이 있습니다. Java API는 유형 캐스트가 풍부하며 Scala의 case x: X => // x is now safely cast
. 물론 한 가지 사례는이 instanceof
를 달성하는 데 사용 되지만 그렇게 할 인센티브는 없습니다. 사실, Scala asInstanceOf
는 의도적으로 장황합니다.
이것이 Scala의 타입 시스템을 더 강하게 만드는 것입니다. VonC가 보여주는 것처럼 훨씬 더 풍부 합니다.
참조 URL : https://stackoverflow.com/questions/3112725/advantages-of-scalas-type-system
'your programing' 카테고리의 다른 글
파이썬의 문자열 연결과 str.join이 얼마나 느립니까? (0) | 2020.12.30 |
---|---|
끝에 "then"이있는 "if"문의 차이점은 무엇입니까? (0) | 2020.12.30 |
YouTube 동영상 ID의 최대 길이는 얼마입니까? (0) | 2020.12.30 |
미디어 유형이 'text / plain'인 콘텐츠에서 'String'유형의 개체를 읽는 데 사용할 수있는 MediaTypeFormatter가 없습니다. (0) | 2020.12.30 |
R Markdown HTML 출력의 출력 너비 조정 (0) | 2020.12.30 |