Kotlin 대수학으로 입문
아니면 웃으면서 남의 가랑이를 용서하든지, 아니면 원래 기사님은 수학을 대신해서 이 지향이 높고 용기가 넘치는 명목을 설치하셨지만, 이쪽은 단순히 기사를 복사해서 미리 보는 거예요.
github
그룹, 링, 체의 설치까지
유리수까지 충족시키다.다이아몬드가 물려받은 곳이 있지만 정의상 개의치 않는다.
전설의 Swift와 Kotln은 닮았지만 몰랐던 내가 순조롭게 이식했으니 역시 닮았지.다음은 이식할 때입니다.이렇게 된 곳.
프로토콜 및 인터페이스
Swift가 프로토콜 프로그래밍을 추천하는 모습.프로토콜과struct로 분리하면 근육이 좋은 것 같아요.자바로 하면 인터페이스와 클래스입니다.Kotlin에는 Object와 data class가 있는데, 반에서 하면 되잖아요.interface Ring: AdditiveGroup, Monoid {}
class Z(value: Int): Ring {
...
}
extension
Swift의 extension은 Java8 이후 인터페이스의 기본 구현을 통해 가능합니다.interface Group: Monoid {
...
// extension
fun testAssociativity(a: Group, b: Group, c: Group): Boolean {
return (a * b) * c == a * (b * c)
}
...
}
안타깝게도 Kotlin(또는 Java)은 인터페이스에서 속성 초기화를 허용하지 않아 설치 측면에서 쫓겨났다.
연산자 과부하
Swift에서는 과부하를 위해 연산자를 직접 지정할 수 있습니다.표준 준비 연산자 이외에도 지정할 수 있습니다.
Kotlin은 미리 정의된 방법만 과부하할 수 있습니다."*"는 "times"를 지정하고, "+"는 "plus"방법을 지정합니다. override operator fun times(other: Monoid): Z = this * other
override operator fun plus(other: AdditiveGroup): Z = this + other
스위프트라면 브라이스와 리턴 페스티벌이 필요하지만 Kotlin에서는 "="로 직접 쓸 수 있다.좋아.
Self
나는 스위프트가 좋다고 생각한다. 첫 번째는 "Self"이다.사인을 사용할 수 있어서 정말 좋아요.
Swift의 경우 서명에 Monoid가 나타나지 않습니다.protocol Monoid: Equatable {
static func *(a: Self, b: Self) -> Self
static var identity: Self {get}
}
Kotlin임을 명시해야 합니다.interface Monoid {
operator fun times(other: Monoid): Monoid
var identity: Monoid
}
따라서 설치 측면에서 다음과 같은 유형 변환이 필요합니다. override operator fun times(other: Monoid): Q {
other as Q
return Q(this.p * other.p, this.q * other.q)
}
네.
type alias
스위프트의 또 다른 부러운 것은 별명이다.원래 보도는 필요에 따라 Int와 Double를 유용했지만 현 단계에서는 Kotlin이 형 별명을 지정할 수 없다.따라서 다음과 같이 유형이 명시된 필드가 있습니다.class Z(val value: Int): Ring {}
원래의 보도처럼 Intger의 산자를 사용할 수 없기 때문에 산자 과부하 부분은 완전히 기술되었다.속성의 초기화도 설치 측면에서 쫓겨났기 때문에 최종 기술은 다음과 같다.class Z(val value: Int): Ring {
// alias
override operator fun times(other: Monoid): Z = this * other
override operator fun plus(other: AdditiveGroup): Z = this + other
override operator fun unaryMinus(): Z = -this
// extension
override var identity: Monoid = Z(1)
override var zero: AdditiveGroup = Z(0)
}
총론
나는 Kotlin dis를 몇 개 썼는데, 생각지도 못했다.자바 밭에서 자란 것을 보면 우아하고 직관적인 좋은 언어다.scala를 동시에 쓰고 싶지만 저쪽이 모양이라면.저는 개인적으로 많은 JVM 언어 중에서 매우 적절한 느낌이라고 강조합니다.
Swift는 처음에는 Linux의 REPL로 만졌지만 제한이 너무 커서 학습 중에 만져도 아직 이르다.
Reference
이 문제에 관하여(Kotlin 대수학으로 입문), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/ueno-t/items/049296d9b8fe867326d5
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Swift가 프로토콜 프로그래밍을 추천하는 모습.프로토콜과struct로 분리하면 근육이 좋은 것 같아요.자바로 하면 인터페이스와 클래스입니다.Kotlin에는 Object와 data class가 있는데, 반에서 하면 되잖아요.
interface Ring: AdditiveGroup, Monoid {}
class Z(value: Int): Ring {
...
}
extension
Swift의 extension은 Java8 이후 인터페이스의 기본 구현을 통해 가능합니다.interface Group: Monoid {
...
// extension
fun testAssociativity(a: Group, b: Group, c: Group): Boolean {
return (a * b) * c == a * (b * c)
}
...
}
안타깝게도 Kotlin(또는 Java)은 인터페이스에서 속성 초기화를 허용하지 않아 설치 측면에서 쫓겨났다.
연산자 과부하
Swift에서는 과부하를 위해 연산자를 직접 지정할 수 있습니다.표준 준비 연산자 이외에도 지정할 수 있습니다.
Kotlin은 미리 정의된 방법만 과부하할 수 있습니다."*"는 "times"를 지정하고, "+"는 "plus"방법을 지정합니다. override operator fun times(other: Monoid): Z = this * other
override operator fun plus(other: AdditiveGroup): Z = this + other
스위프트라면 브라이스와 리턴 페스티벌이 필요하지만 Kotlin에서는 "="로 직접 쓸 수 있다.좋아.
Self
나는 스위프트가 좋다고 생각한다. 첫 번째는 "Self"이다.사인을 사용할 수 있어서 정말 좋아요.
Swift의 경우 서명에 Monoid가 나타나지 않습니다.protocol Monoid: Equatable {
static func *(a: Self, b: Self) -> Self
static var identity: Self {get}
}
Kotlin임을 명시해야 합니다.interface Monoid {
operator fun times(other: Monoid): Monoid
var identity: Monoid
}
따라서 설치 측면에서 다음과 같은 유형 변환이 필요합니다. override operator fun times(other: Monoid): Q {
other as Q
return Q(this.p * other.p, this.q * other.q)
}
네.
type alias
스위프트의 또 다른 부러운 것은 별명이다.원래 보도는 필요에 따라 Int와 Double를 유용했지만 현 단계에서는 Kotlin이 형 별명을 지정할 수 없다.따라서 다음과 같이 유형이 명시된 필드가 있습니다.class Z(val value: Int): Ring {}
원래의 보도처럼 Intger의 산자를 사용할 수 없기 때문에 산자 과부하 부분은 완전히 기술되었다.속성의 초기화도 설치 측면에서 쫓겨났기 때문에 최종 기술은 다음과 같다.class Z(val value: Int): Ring {
// alias
override operator fun times(other: Monoid): Z = this * other
override operator fun plus(other: AdditiveGroup): Z = this + other
override operator fun unaryMinus(): Z = -this
// extension
override var identity: Monoid = Z(1)
override var zero: AdditiveGroup = Z(0)
}
총론
나는 Kotlin dis를 몇 개 썼는데, 생각지도 못했다.자바 밭에서 자란 것을 보면 우아하고 직관적인 좋은 언어다.scala를 동시에 쓰고 싶지만 저쪽이 모양이라면.저는 개인적으로 많은 JVM 언어 중에서 매우 적절한 느낌이라고 강조합니다.
Swift는 처음에는 Linux의 REPL로 만졌지만 제한이 너무 커서 학습 중에 만져도 아직 이르다.
Reference
이 문제에 관하여(Kotlin 대수학으로 입문), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/ueno-t/items/049296d9b8fe867326d5
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
interface Group: Monoid {
...
// extension
fun testAssociativity(a: Group, b: Group, c: Group): Boolean {
return (a * b) * c == a * (b * c)
}
...
}
Swift에서는 과부하를 위해 연산자를 직접 지정할 수 있습니다.표준 준비 연산자 이외에도 지정할 수 있습니다.
Kotlin은 미리 정의된 방법만 과부하할 수 있습니다."*"는 "times"를 지정하고, "+"는 "plus"방법을 지정합니다.
override operator fun times(other: Monoid): Z = this * other
override operator fun plus(other: AdditiveGroup): Z = this + other
스위프트라면 브라이스와 리턴 페스티벌이 필요하지만 Kotlin에서는 "="로 직접 쓸 수 있다.좋아.Self
나는 스위프트가 좋다고 생각한다. 첫 번째는 "Self"이다.사인을 사용할 수 있어서 정말 좋아요.
Swift의 경우 서명에 Monoid가 나타나지 않습니다.protocol Monoid: Equatable {
static func *(a: Self, b: Self) -> Self
static var identity: Self {get}
}
Kotlin임을 명시해야 합니다.interface Monoid {
operator fun times(other: Monoid): Monoid
var identity: Monoid
}
따라서 설치 측면에서 다음과 같은 유형 변환이 필요합니다. override operator fun times(other: Monoid): Q {
other as Q
return Q(this.p * other.p, this.q * other.q)
}
네.
type alias
스위프트의 또 다른 부러운 것은 별명이다.원래 보도는 필요에 따라 Int와 Double를 유용했지만 현 단계에서는 Kotlin이 형 별명을 지정할 수 없다.따라서 다음과 같이 유형이 명시된 필드가 있습니다.class Z(val value: Int): Ring {}
원래의 보도처럼 Intger의 산자를 사용할 수 없기 때문에 산자 과부하 부분은 완전히 기술되었다.속성의 초기화도 설치 측면에서 쫓겨났기 때문에 최종 기술은 다음과 같다.class Z(val value: Int): Ring {
// alias
override operator fun times(other: Monoid): Z = this * other
override operator fun plus(other: AdditiveGroup): Z = this + other
override operator fun unaryMinus(): Z = -this
// extension
override var identity: Monoid = Z(1)
override var zero: AdditiveGroup = Z(0)
}
총론
나는 Kotlin dis를 몇 개 썼는데, 생각지도 못했다.자바 밭에서 자란 것을 보면 우아하고 직관적인 좋은 언어다.scala를 동시에 쓰고 싶지만 저쪽이 모양이라면.저는 개인적으로 많은 JVM 언어 중에서 매우 적절한 느낌이라고 강조합니다.
Swift는 처음에는 Linux의 REPL로 만졌지만 제한이 너무 커서 학습 중에 만져도 아직 이르다.
Reference
이 문제에 관하여(Kotlin 대수학으로 입문), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/ueno-t/items/049296d9b8fe867326d5
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
protocol Monoid: Equatable {
static func *(a: Self, b: Self) -> Self
static var identity: Self {get}
}
interface Monoid {
operator fun times(other: Monoid): Monoid
var identity: Monoid
}
override operator fun times(other: Monoid): Q {
other as Q
return Q(this.p * other.p, this.q * other.q)
}
스위프트의 또 다른 부러운 것은 별명이다.원래 보도는 필요에 따라 Int와 Double를 유용했지만 현 단계에서는 Kotlin이 형 별명을 지정할 수 없다.따라서 다음과 같이 유형이 명시된 필드가 있습니다.
class Z(val value: Int): Ring {}
원래의 보도처럼 Intger의 산자를 사용할 수 없기 때문에 산자 과부하 부분은 완전히 기술되었다.속성의 초기화도 설치 측면에서 쫓겨났기 때문에 최종 기술은 다음과 같다.class Z(val value: Int): Ring {
// alias
override operator fun times(other: Monoid): Z = this * other
override operator fun plus(other: AdditiveGroup): Z = this + other
override operator fun unaryMinus(): Z = -this
// extension
override var identity: Monoid = Z(1)
override var zero: AdditiveGroup = Z(0)
}
총론
나는 Kotlin dis를 몇 개 썼는데, 생각지도 못했다.자바 밭에서 자란 것을 보면 우아하고 직관적인 좋은 언어다.scala를 동시에 쓰고 싶지만 저쪽이 모양이라면.저는 개인적으로 많은 JVM 언어 중에서 매우 적절한 느낌이라고 강조합니다.
Swift는 처음에는 Linux의 REPL로 만졌지만 제한이 너무 커서 학습 중에 만져도 아직 이르다.
Reference
이 문제에 관하여(Kotlin 대수학으로 입문), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/ueno-t/items/049296d9b8fe867326d5
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(Kotlin 대수학으로 입문), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/ueno-t/items/049296d9b8fe867326d5텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)