Kotlinはノートの基礎の文法の1を学びます


Kotlinはノートの基礎の文法の1を学びます
プログラミング業界はもう4、5年も混ざっていて、いろいろなプログラミング言語に接触して、ある言語を学ぶ興味の源は純粋にいくつかのネットの大牛がそれに対するいろいろなほめ言葉のためで、この言語が本当に私に適しているかどうかを深く考えたことはめったにありません.
ところで、私のこの年になってから何か新しい言語を勉強するのは少し廉潔で古いような感じがして、偶然kotlinという言語に触れて、瞬間的に憎しみの遅い興奮があって、なぜか言えません.やっと生きているうちにもう一つの言語に触れることを決意しました.
勉強しながら、記録して、点滴の間.
私はJavaの鉄粉で、私の事业の主要な方向で、しかし多くの他の言语に接触した后にもJavaのプログラミングの中の过程が复雑で仕方がないことを発见して、例えばしばらくの间IOSの开発を引き継いで、ずっとOBJC言语の1つの牛迫の特性-タイプの拡张をうらやましがっています.簡単に言えば、継承などではなく、任意のクラス、さらにはシステムクラスに対して新しい方法や属性を動的に拡張することができます.多くの人も似たような経験や考えをしたことがあると信じています.
Kotlinの紹介と文法を簡単に見た後、私がこの言語を勉強する決意をさらに固めた理由は以下の点です.
  • はJavaと完全に互換性があり、KotlinもJVMベースの言語であり、設計上Javaの言語、JavaのAPI、Javaのクラスを完全に互換性があるため、KotlinでJavaの任意の機能を呼び出すことができ、JavaでもKotlinのAPI.
  • を呼び出すことができる.
  • Kotlinはインタフェース拡張技術を実現しました.これも私を非常に興奮させた特性で、これから自分のコードをこれ以上簡潔にすることができません.
  • Kotlinはまた、Lamda式、switchスーパー拡張(case定数に限定されない)、getter/setter(OBJCの文法をそのまま使用する)、属性依頼、文法上iosの新しい開発言語swiftを模倣するなど、他の言語の長所をそのままにしており、これらの新しい特性は他の言語の精華であることが多く、現在はすべてkotlinに溶け込み、一語が手に入っている.天下に私が持っている豪快な気.
  • Kotlinの空ポインタ処理も大きなハイライトであり、彼はタイプを強制的に空の各非空の2種類に分け、システム設計の安定性を極めて高めた.
  • kotlinはまた多重継承をC++から運んできた!!多重継承は設計上多くの隠れた危険性と欠陥を持っているが、彼は実際に十分に発揮する場所がある.残念ながらJavaはサポートされていませんが、インタフェースという奇妙な形式で多重継承を実現しなければなりません.

  • こんなにたくさん言って、実はこんなに多くなくて、最近徹夜してかまどを食べて、急速に系統的にそのすべての文法と特性を学ぶことができることを望みます.学習を振り返るために、ここに記録します.
    基礎文法
    すべての勉強は、Java文法と比較して勉強します.
    ソースファイル
    Java                  ,          。
    Kotlin               ,                    ,     C    。
    

    パッケージ名、およびインポートエクスポート
            Java    ,    Java        80 ,           :
    

    main関数
    Java main       ,       ,      final static main(){},
      Kotlin     ,  main             ,    kt     ,    :
    
    fun main(val args: Array<String>){
        println("Hello World");
    }

    クラス宣言
         ,           ,          :
    1.    final   。       ,   ,    open   
    2.      final   ,    ,   ,    open   
    3.         :     ,      var  val.
    4.          :         ,    :Int?  Int
    5.         ,  C++  。  :class  Dog : Animal(), Singler(){/***TODO**/ }
    6.       getter/setter.                 。
    7.           ,                     ,        。                   ,           。(        ,          ,           )
    8.                 ,                。                          (          ),              。
    9.                         。
    ...
    

    下にkotlinを使用して、クラスのプレゼンテーションで述べたさまざまな特性を直接宣言します.
    //1. main       。
    fun main(args:Array<String>){
        //2.     java    ,      ;      
        System.out.println("Hello Kotlin")
    }
    
    //       ,    open       ,()                 ,  Java  public Animal(String name){}
    //     name    var   val    name    Animal      ,        name   。
    open class Animal(var name:String){
    
        var age:Int = 0 //     age  ,    Int  ,              age   null.
    
        //      open      。String?         。
        open fun say(words: String?){
    
            //println kotlin       api  ,       System.out.println(),                       :$name.      +         ,    。       php    。
            println("Hello I am an Animal:$name");
        }
    
        //           public,            :       ,   objc  。          return,  kotlin    ,                      ,    return.
        public fun doFinal():String{
            //do final. return String content.
            "Hello, this return a String,but not need to write return"
        }
    }
    //        ,     ,                  。
    open class Empty
    
    open interface Singer{}
    //          ,          :        。          。
    class Dog(name:String):Animal(name),Singer{
    
        override fun say(words :String){
            println("i override parent's say fun:$words")
        }
    }
    
    //       
    //         Android        ,Application  android       ,               app  ,       context  (  android        )。          onCreate()       ,             : by lazy{}
    //by lazy{}                          lazy    ,          ,     this, Application    。  application        ,          this.      return,   this       app  。
    class APP: Application(){
        val app:Application by lazy {this}
    }
    
    //kotlin        getter/setter.
    class Property{
        var prop1:String by Delegate()
    
        var prop2:String
        get
        setter(value){
            println("prop2:     :$value")
            $prop2 = value
        }
    }
    
    //         prop1   get/set       , prop1         ,Delegate         。
    class Delegate{
            operator fun getValue(prop: Property, property: KProperty<*>): Int {
            println("get     ")
            return 0
        }
    
        operator fun setValue(animal: Animal, property: KProperty<*>, i: Int) {
            println("set     ")
        }
    }
    

    以上のコードは、kotlinのいくつかの特性を例によって簡単に示しています.使用上、Javaに慣れた学生には、習慣的なタイプ名を先に書いてから変数名を書くなど、短期的な不適応がある可能性があります.しかしkotlinはJavaに比べて文法特性などの表現手法が質的に向上し,多くの作業量やコード数を簡略化することができる.だからとても試してみる価値があります!
    関数宣言
    kotlinは関数宣言のデフォルトパラメータをサポートしています.ハニー、これはC言語の基本的な機能ではありませんか.デフォルトのパラメータは何ができますか?簡単に言えば、以前Javaは異なるパラメータの同じ論理処理を実現するために、N多同名関数を書くために、今はすべて使いません!1つの関数で終わります.例:
        //     File            ,           ,               。
        public inline fun File.bufferedWriter(
                                    charset: Charset = Charsets.UTF_8, 
                                    bufferSize: Int = DEFAULT_BUFFER_SIZE): BufferedWriter{
                                    //Do somthing.
        }
    
        //               findChar()。
        fun String.findChar(c: Char):Int{
            return this.indexOf(c)
        } 
    
        fun  rootFunction():String{
            "    root   ,      ,   C        。            。"
        }

    使い方は説明する必要はありませんが、他のパラメータ値を渡すこともできますし、パラメータを省略することもできます.重荷関数の様々な穴はもう怖くない.また、関数宣言にはいくつかの点に注意してください.1.クラスの範囲に書く必要がなく、ktであるkotlinソースファイルで直接関数を宣言できます.これらの関数はrootメソッドに属し、Javaソースコードでは呼び出せない(javaコードを除く)場所で使用できます.2.上記の例のように、ktソースファイル内の他の既存のタイプの新しいメソッドを拡張できます.この場合、プロジェクト全体のすべてのkotlinソースファイルが表示され、拡張されたタイプのオブジェクトでこのメソッドを呼び出すことができます.同じJavaソースコードを除いて、Javaでこれらの拡張メソッドを呼び出すことはできません.3.各関数には戻り値があり、java void戻りタイプはUnitに対応し、省略できます.その他のタイプは省略できません.
    终わります!
    参照先:https://kotlinlang.org/docs/reference/classes.html http://blog.csdn.net/hp910315/article/details/50845465 http://kotlinlang.org/docs/reference/comparison-to-java.html