Kotlin 대수학으로 입문

9146 단어 SwiftKotlin대수
Swift 대수학으로 입문 감동받았기 때문에 나도 해보고 싶었지만 떨어지는 Windows만 있고 Swift가 움직이지 않는 상황에서 자바에 조금 설치했지만 과부하 연산자를 원하기 때문에 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로 만졌지만 제한이 너무 커서 학습 중에 만져도 아직 이르다.

좋은 웹페이지 즐겨찾기