アヒルのタイプ


1.概念
アヒルのタイプは、実はダイナミックなタイプのスタイルです.このスタイルでは、オブジェクトの有効な意味は、特定のクラスから継承されたり、特定のインタフェースを実装したりするのではなく、現在のメソッドと属性の集合によって決定されます.ウィキペディアから抜粋-アヒルのタイプ
2.コード実装
Scalaのアヒルのタイプを見てみましょう.コードは次のとおりです.
def withClose(closeAble: { def close(): Unit }, op: { def close(): Unit } => Unit) {
    try {
        op(closeAble)
    } finally {
        closeAble.close()
    }
}

class Connection {
    def close() = println("close Connection")
}

val conn: Connection = new Connection()
withClose(conn, conn =>
    println("do something with Connection"))

2つのパラメータを受信するwithCloseの方法を定義した.
closeメソッドのタイプインスタンスこの例を受信し、戻り値のない関数次にクラスConnectionを定義し,close()メソッドを定義した.最後にwithCloseメソッドを呼び出し、テストを行います.
実はウィキペディア-アヒルのタイプの中でその偽のコードの例はとても良くて、アヒルのタイプで多態を実現することができます.もっと見て、その奥義をじっくりと味わってみたいと思いますが、これらの特性がFPの最大の魅力かもしれないと思います!
3.考える
Python,Ruby,Lispのような言語のプログラマーにとって、これは普通の特性にすぎません.しかし、私のような最初からJAVAに触れていたcoderにとって、この特性はまだ驚喜しています.インタフェースを明示的に実装することを回避し、インタフェースを定義する手間を省き、プログラム全体を非常に柔軟にします.
実は今の言語はすべてこの方面に寄りかかって、例えばgolang、先に1つのインタフェースを定義して、および方法は明らかにします.任意のクラスは、インタフェースのすべてのメソッドが実装されている限り、デフォルトでインタフェースが実装されています.明示的なimplemention構文を避ける
scalaの初心者として、いろいろな特性、文法に対応する暇がなくて、7分のサプライズ3分の悲しみですね.scalaは本当に博大で、対象とFPを集めた言語を作りました.私はただ言いたいだけです.物が多すぎて、把握するのが疲れています.