メモ:kotlin学習4日目

8339 ワード

  • 接頭辞式
    /**
     * @  :   `01. `
     * @  :   ty
     * @  :    2018/7/20 14:27
     * @  :    infix
     * Tom sayHelloTo John
     */
    fun main(args: Array) {
    
        val pair = "a" to 1
    
        val tom = Person()
        tom.sayHelloTo("John")
    
        tom sayHelloTo "John"// infix 
    }
    
    class Person {
        infix fun sayHelloTo(name: String) {
            " $name"
        }
    }
    
  • 類委託
    /**
     * @  :   `02. `
     * @  :   ty
     * @  :    2018/7/20 14:27
     * @  :    by
     *  
     */
    fun main(args: Array) {
        val smallHeadFather = SmallHeadFather()
        smallHeadFather.wash()
    }
    
    interface WashPower {
        fun wash()
    }
    
    class SmallHeadFather : WashPower by BigHeadSon()
    
    class BigHeadSon : WashPower {
        override fun wash() {
            println(" ")
        }
    }
    
  • 類委託実現二
    /**
     * @  :   `03. `
     * @  :   ty
     * @  :    2018/7/20 14:27
     * @  :    by
     */
    fun main(args: Array) {
    
        val bigHeadSon = BigHeadSon()
        val smallHeadSon = SmallHeadSon()
    
        //val bigHeadFather = BigHeadFather(bigHeadSon)
        val bigHeadFather = BigHeadFather(smallHeadSon)
        bigHeadFather.wash()
    
    }
    
    interface WashPower {
        fun wash()
    }
    
    class SmallHeadSon : WashPower {
        override fun wash() {
            println(" ")
        }
    }
    
    class BigHeadSon : WashPower {
        override fun wash() {
            println(" ")
        }
    }
    
    class BigHeadFather(var washPower: WashPower) : WashPower by washPower
    
  • 類委託機能強化
    /**
     * @  :   `04. `
     * @  :   ty
     * @  :    2018/7/20 14:31
     * @  :
     */
    fun main(args: Array) {
        val smallHeadSon = SmallHeadSon()
        val bigHeadSon = BigHeadSon()
    
        val bigHeadFather = BigHeadFather(smallHeadSon)
        //val bigHeadFather = BigHeadFather(bigHeadSon)
    
        bigHeadFather.wash()
    }
    
    interface WashPower {
        fun wash()
    }
    
    class SmallHeadSon : WashPower {
        override fun wash() {
            println(" ")
        }
    }
    
    class BigHeadSon : WashPower {
        override fun wash() {
            println(" ")
        }
    }
    
    class BigHeadFather(var washPower: WashPower) : WashPower by washPower {
        override fun wash() {
            println(" ")
            washPower.wash()
            println(" , ")
        }
    }
    
  • 属性委任
    /**
     * @  :   `05. `
     * @  :   ty
     * @  :    2018/7/20 14:41
     * @  :    by
     *  
     */
    
    fun main(args: Array) {
        val bigHeadSon = BigHeadSon()
    
        bigHeadSon.money = 100// 100 
    
        println(bigHeadSon.money)//50  
    
    }
    
    class BigHeadSon {
        var money: Int by Mother()
    }
    
    class Mother {
    
        var moneySon = 0
        var moneyMother = 0
    
        operator fun getValue(bigHeadSon: BigHeadSon, property: KProperty): Int {
            return moneySon
        }
    
        operator fun setValue(bigHeadSon: BigHeadSon, property: KProperty, i: Int) {
            moneySon = i / 2
            moneyMother = i / 2
        }
    }
    
  • 不活性負荷
    /**
     * @  :   `06. `
     * @  :   ty
     * @  :    2018/7/20 14:41
     * @  :    by lazy {  }
     *   val  
     * 1,by lazy  , 
     * 2,by lazy  
     * 3, by lazy  
     */
    
    fun main(args: Array) {
        val lazy = Lazy()
        println(lazy.name)
        println(lazy.name)
        println(lazy.name)
    }
    
    class Lazy {
        val name: String by lazy {
            println(" ")
            " "
        }
    }
    
  • 遅延ロード
    /**
     * @  :   `07. `
     * @  :   ty
     * @  :    2018/7/20 15:03
     * @  :    lateinit
     *
     * 1.by lazy  lateinit   
     * 2.by lazy      ,lateinit      
     * 3.by lazy val   lateinit var 
     */
    fun main(args: Array) {
        val user = User()
        println(user.name + user.phone)
    
        user.name = " "
        user.phone = "110"
    
        title = " "
    
        println(user.name + user.phone)
    }
    
    
    lateinit var title: String
    //lateinit var money: Byte //lateinit 
    
    class User {
        lateinit var name: String
        lateinit var phone: String
    }
    
  • 拡張関数
    /**
     * @  :   `08. `
     * @  :   ty
     * @  :    2018/7/20 15:10
     * @  :    String.myIsEmpty()
     *
     *  
     */
    
    fun main(args: Array) {
        val str = null
        //val str = "abc"
        val isEmpty = str?.myIsEmpty()
        println(isEmpty)
    
    }
    
    fun String.myIsEmpty(): Boolean {
        return this == null || this.isEmpty()
    }
    
  • kotlinにおけるobject単例
    /**
     * @  :   `09.kotlin object `
     * @  :   ty
     * @  :    2018/7/20 15:48
     * @  :    object ClassName
     */
    
    fun main(args: Array) {
        println(SingleInstance.name)
        SingleInstance.login("110", "12345")
    }
    
    object SingleInstance {
        var name: String = " "//private static String name;
        fun login(phone: String, pwd: String) {
            println(" : $phone + $pwd")
        }
    
        /*  
        static {
            SingleInstance var0 = new SingleInstance();
            INSTANCE = var0;
            name = " ";
        }*/
    }
    
  • 伴生対象
    /**
     * @  :   `10. `
     * @  :   ty
     * @  :    2018/7/20 16:21
     * @  :    companion object {  }
     */
    fun main(args: Array) {
        val person = Person()
        println(person.age)
        println(Person.name)
    }
    
    class Person {
        // 
        var age = 10
    
        companion object {
            // 
            var name = " "
        }
    }
    
  • Javaと同様の単例
    /**
     * @  :   `11. Java `
     * @  :   ty
     * @  :    2018/7/20 16:35
     * @  :
     */
    fun main(args: Array) {
        println(Utils.instance.isCanLogin("110"))
    }
    
    /**
     * 1, :private constructor()
     * 2, :companion object { val instance}
     * 3, :by lazy { Utils() }
     */
    class Utils private constructor() {
    
        companion object {
            val instance by lazy { Utils() }// , , 
        }
    
        fun isCanLogin(phone: String): Boolean {
            return phone.myIsEmpty() && phone.length == 11
        }
    }
    
  • 列挙
    /**
     * @  :   `12. `
     * @  :   ty
     * @  :    2018/7/20 16:35
     * @  :    ,  Monday Tuesday Wednesday Thursday Friday Saturday Sunday
     *           
     */
    fun main(args: Array) {
    
        println(todo(WEEK.TUESDAY))
        WEEK.values().forEach {
            println(it)
        }
    }
    
    enum class WEEK {
        MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
    }
    
    fun todo(week: WEEK): String {
        return when (week) {
            in WEEK.MONDAY..WEEK.FRIDAY -> {
                " "
            }
            WEEK.SATURDAY, WEEK.SUNDAY -> {
                " "
            }
            else -> {
                " "
            }
        }
    }
    
  • 列挙補強
    /**
     * @  :   `13. `
     * @  :   ty
     * @  :    2018/7/20 16:35
     * @  :        R G B
     */
    fun main(args: Array) {
        println(COLOR.RED.r)
        println(COLOR.GREEN.g)
        println(COLOR.BLUE.b)
    }
    
    enum class COLOR(var r: Int, var g: Int, var b: Int) {
        RED(255, 0, 0), GREEN(0, 255, 0), BLUE(0, 0, 255)
    }
    
  • データクラス
    /**
     * @  :   `14. `
     * @  :   ty
     * @  :    2018/7/20 16:35
     * @  :    data class  JavaBean
     */
    
    fun main(args: Array) {
        val banner = Banner("title", "http://www.baidu.com", 10011)
        println(banner.title + banner.url +
                banner.component3())//  id
        val (title1, url, id) = Banner("title", "http://www.baidu.com", 10011)
        println(url)
    
    }
    
    // BaseBean abcd = new Gson().fromJson("json", BaseBean.class);
    
    data class Banner(
            var title: String,
            var url: String,
            var id: Int)
    
  • シール類
    /**
     * @  :   `15. `
     * @  :   ty
     * @  :    2018/7/20 16:49
     * @  :    sealed class
     */
    fun main(args: Array) {
    
        println(hasRightSon(NedStark.SansaStark()))
    
        println(hasRightSon(JohnSnow()))
    }
    
    fun hasRightSon(stark: NedStark):Boolean{
        return when (stark) {
            is NedStark.RobStark -> {
                true
            }
            is NedStark.SansaStark ->{
                true
            }
            is NedStark.AryaStark->{
                true
            }
            is NedStark.BrandonStark->{
                true
            }
            else -> {
                false
            }
        }
    }
    
    //   
    sealed class NedStark {
        class RobStark : NedStark()
        class SansaStark : NedStark()
        class AryaStark : NedStark()
        class BrandonStark : NedStark()
    }
    
    class JohnSnow : NedStark()