Kotlin-基礎第三弾
4520 ワード
KotlinはJVMベースの新しいプログラミング言語です.JetBrainsによって開発されました.Googleが推奨していますので、その重要性が分かります.深く入ると、kotlinの優雅さが分かります.コードを書く時に手間が省けます.
Kotlinについての学習はネット上にたくさんあります.今はいくつかの公式サイトを共有しています.http://kotlinlang.org/docs/reference/他人のまとめhttps://github.com/youxin11544/Kotlin-learning
ここでは公式サイトのようにいちいち説明しません.自分も公式サイトから勉強して他の人のブログを見に行きます.知識には深くないかもしれませんが、初心者にとっても価値があります.
スタート
kotlin依頼メカニズム
委託モードも代理モードであり、ソフトウェア設計モードの一つの基本技術であり、委託モードでは、二つのオブジェクトが同一の要求を処理するために参加し、要求を受けたオブジェクトは要求を別のオブジェクトに委託して処理する.
javaとAndroidは、委託機構を用いてAOPにおいて、JavaではInvocationHandlerインターフェースを継承する方法を用いて代理を実現し、AndroidではAsppectJを使用して実現される.ここでKotlinの依頼パターンを説明します.類の委託、すなわち上述の委託モードの定義であるが、Kotlinにおいては、より便利で、より柔軟に実現される.
これは継承の代わりとして、byキーワードを直接使用してコレクションの方法をリストオブジェクトに委託します. 属性はKotlinの中のDelegates類に委託されており、lazy、notNull()、observable(「」)、vetoable(「」)、Map形式 の3つの依頼を内蔵している. lazyは、怠惰な負荷を行うために使用され、最初に使用されたときに初期化動作 を実行する. notNull()は、初期化できない段階で属性値が決定された場合に使用される observable観察者とjavaの観察者パターンは同じです. vetoable()条件付きの委託機構は、戻ってきたtrueとfalseを通じて、oldValueが前かそれとも最初かを判断する である. Mapは、新しい割当方法によってクラス属性を付与する .
これ以外にもカスタム委託ができます.具体的な定義はnotNull()の委託に倣うことができます.
コツリン・ラバンダ表現
まず、小さな例をあげます.
kotlin注釈と反射
Kotlinの注釈はjavaと似ています.先に注釈の種類を決めて、ライフサイクルを確定します.
これで基礎の第3部分は終わって、堅持し続けて、どのみちいくつかの仕返しのがあります.
Kotlinについての学習はネット上にたくさんあります.今はいくつかの公式サイトを共有しています.http://kotlinlang.org/docs/reference/他人のまとめhttps://github.com/youxin11544/Kotlin-learning
ここでは公式サイトのようにいちいち説明しません.自分も公式サイトから勉強して他の人のブログを見に行きます.知識には深くないかもしれませんが、初心者にとっても価値があります.
スタート
kotlin依頼メカニズム
委託モードも代理モードであり、ソフトウェア設計モードの一つの基本技術であり、委託モードでは、二つのオブジェクトが同一の要求を処理するために参加し、要求を受けたオブジェクトは要求を別のオブジェクトに委託して処理する.
javaとAndroidは、委託機構を用いてAOPにおいて、JavaではInvocationHandlerインターフェースを継承する方法を用いて代理を実現し、AndroidではAsppectJを使用して実現される.ここでKotlinの依頼パターンを説明します.
これは継承の代わりとして、byキーワードを直接使用してコレクションの方法をリストオブジェクトに委託します.
class MyList(list: ArrayList) : Collection by list {
}
// ( )
val list: ArrayList by lazy {
ArrayList()
}
// str,
var str: String by Delegates.notNull()
//oldValue newValue
var str: String by Delegates.observable(""){//
property, oldValue, newValue ->
println("${property.name} old=$oldValue new=$newValue")
}
これ以外にもカスタム委託ができます.具体的な定義はnotNull()の委託に倣うことができます.
// true observable
var str1: String by Delegates.vetoable(""){
property, oldValue, newValue ->
println("${property.name} old=$oldValue new=$newValue")
true
}
// false oldValue
var str2: String by Delegates.vetoable(""){
property, oldValue, newValue ->
println("${property.name} old=$oldValue new=$newValue")
false
}
読み取り可能な依頼メカニズムを設定して、ReadOnlyPropertyクラスを継承すればいいです.コツリン・ラバンダ表現
まず、小さな例をあげます.
class User(val map: Map){
val name: String by map
val age: Int by map
}
val user = User(mapOf("a" to 1))
矢印の前にパラメータがあります.矢印の後に関数があります.コールから言えばJavaより簡単で優雅なものが多いですが、実際の用途は?私たちは一つの関数のためにlambanを送ることができます.private class NotNullVar() : ReadWriteProperty {
private var value: T? = null
public override fun getValue(thisRef: Any?, property: KProperty): T {
return value ?: throw IllegalStateException("Property ${property.name} should be initialized before get.")
}
public override fun setValue(thisRef: Any?, property: KProperty, value: T) {
this.value = value
}
}
伝達関数である以上はもちろん、関数を伝達して入ることもできます.よく使われています.ここには関数の参照が延びています.また、属性の引用もあります.ここではval action = {i: Int, j: Int -> println("i=$i j=$j")};
action(1,2)
最後のパラメータがラダの場合、大かっこは外に置くことができます.fun lambdaTest(arg1: Int, arg2: Int, oper: (a: Int, b: Int) -> Int): Int {
var result: Int = Int.MIN_VALUE
if (arg2 != 0) {
result = oper(arg1, arg2)
}
return result
}
fun main(args: Array) {
lambdaTest(1, 2, { a: Int, b: Int -> a / b })
lambada表現を使う場合も多いです.例えば、集合の中を巡回するなどの操作があります.listOf(1, 2, 3).forEach(::println)
var name = "1"
val p = ::name
p.set/get
Cotlin演算子の再負荷式lambdaTest(1, 2){ a: Int, b: Int -> a / b }
これで、Rmb(1)+Rmb(2)を使って計算することができます.簡単ですか?このような操作は前に述べた中綴り表現と同じです.真ん中は演算子です.kotlin注釈と反射
Kotlinの注釈はjavaと似ています.先に注釈の種類を決めて、ライフサイクルを確定します.
val list = arrayListOf(1, 2, 3)
list.forEach { value -> }
使用すると、直接にクラス前funの前にあります.class Rmb(var num: Int) {
operator fun plus(rmb: Any?) {
}
}
Kotlinは反射すると通ります.@Target(AnnotationTarget.FIELD,
AnnotationTarget.CLASS,
AnnotationTarget.FUNCTION)
@Retention(AnnotationRetention.SOURCE)
annotation class Path
この2つの方法はクラスのオブジェクトを得るために、さらに対応する属性と方法を反射することができます.これで基礎の第3部分は終わって、堅持し続けて、どのみちいくつかの仕返しのがあります.