Kotlin Reference(一)-入門ガイド

23445 ワード

Kotlin Reference(一)-入門ガイド
商业転載を禁止します.ソースの住所を教えてください.http://kotlinlang.org/docs/reference
  • Ktlin Reference一-入門ガイド
  • 基礎文法
  • パッケージ構造定義
  • 方法定義
  • は、局所変数
  • を定義する.
  • 注釈
  • 文字列テンプレート出力
  • を使用する.
  • 使用条件式
  • は、nullの可能性のある値を使用して、空の値をチェックする
  • .
  • タイプチェックと自動モデルチェンジを使用して
  • フォーサイクルを使用する
  • whileサイクルを使う
  • when表現を使う
  • 使用区間
  • セットを使用します.
  • コードスタイル
  • DoOs POJOsオブジェクト
  • を作成します.
  • メソッドパラメータのデフォルト値
  • は、List
  • をフィルタリングする.
  • MapList
  • を巡回しました.
  • 使用区間
  • 読み取り専用のList
  • 読み取り専用のMap
  • はMap
  • にアクセスします.
  • 怠け者の性質
  • 機能拡張
  • 単例
  • を作成します.
  • ショートカット
  • ショートカット
  • 空であれば、ステートメントを実行する
  • .
  • 空きがなければ、動作を実行する
  • .
  • when条件文に戻り値
  • trycatch表現
  • if表現
  • Builder-style usage of methods that return Unit
  • 単一行表現の方法
  • ウィスを使用してオブジェクトを呼び出すことができる複数の方法
  • .
  • Java 7 s try with resource
  • は、汎型情報を宣言する一般的な方法のための便利なフォーマット
  • を提供する.
  • は、空いているBooleanタイプ
  • を使用しています.
  • 符号化慣例
  • 命名スタイル
  • コロン
  • Lambands
  • ユニット
  • Functions vs Propties
  • 基礎文法
    パッケージ構造の定義
    定義されたパケット情報はソースファイルの最初の行でなければなりません.
    package my.demo
    
    import java.util.*
    
    //...
    メソッドの定義
    2つのIntタイプのパラメータとIntタイプの戻り値を有する方法を定義する.
    fun sum(a: Int, b: Int): Int {
      return a + b
    }
    表式を含めて、戻り値を推論する方法を指定します.
    fun sum(a: Int, b: Int) = a + b
    無意味のタイプUnitの戻り値を定義する方法
    fun printSum(a: Int, b: Int): Unit {
      print(a + b)
    }
    無意味タイプUnitは無視されてもよい.
    fun printSum(a: Int, b: Int) {
      print(a + b)
    }
    ローカル変数を定義
    定数の割り当てを使う
    val a: Int = 1
    val b = 1   //     Int  
    val c: Int  //              
    c = 1       //         
    変数の割り当てを使う
    var x = 5 //     Int  
    x += 1
    コメント
    JavaとJava Scriptのように、Ktlinは単一の行の注釈とブロックの注釈をサポートしています.
    //       
    
    /*        
        /*          */
              */
    Javaとは違って、Ktlinのブロック注釈は入れ子が可能です.
    文字列テンプレートを使って出力する
    fun main(args: Array<String>) {
      if (args.size == 0) return
    
      print("First argument: ${args[0]}")
    }
    条件式を使う
    fun max(a: Int, b: Int): Int {
      if (a > b)
        return a
      else
        return b
    }
    if-else式を使用した場合
    fun max(a: Int, b: Int) = if (a > b) a else b
    null可能な値を使って空の値をチェックします.
    一つの引用がnullの使用を許可される場合は、nullableの明確な表記を使用しなければならない.
    以下の方法は、strIntタイプに変換できない場合、nullに戻ることを示す.
    fun parseInt(str: String): Int? {
      // ...
    }
    上記でnullが発生する可能性のある方法を使用します.
    fun main(args: Array<String>) {
      if (args.size < 2) {
        print("Two integers expected")
        return
      }
    
      val x = parseInt(args[0])
      val y = parseInt(args[1])
    
      // x*y                 
      if (x != null && y != null) {
        //           ,x y          
        print(x * y)
      }
    }
    または
      // ...
      if (x == null) {
        print("Wrong number format in '${args[0]}'")
        return
      }
      if (y == null) {
        print("Wrong number format in '${args[1]}'")
        return
      }
    
      //           ,x y          
      print(x * y)
    タイプチェックと自動変換を使う
    一つの表式があるタイプのインスタンスである場合、この表式のタイプはオペレーターが手動でチェックする必要があります.可変ではないローカル変数や属性のタイプが検出されると、明確なモデルチェンジが必要なくなります.
    fun getStringLength(obj: Any): Int? {
      if (obj is String) {
        // obj            String
        return obj.length
      }
    
      //      if   ,obj          Any  
      return null
    }
    または
    fun getStringLength(obj: Any): Int? {
      if (obj !is String)
        return null
    
      // obj            String
      return obj.length
    }
    までも
    fun getStringLength(obj: Any): Int? {
      // obj ’&&‘            String
      if (obj is String && obj.length > 0)
        return obj.length
    
      return null
    }
    forループを使う
    fun main(args: Array<String>) {
      for (arg in args)
        print(arg)
    }
    または
    for (i in args.indices)
      print(args[i])
    whileループを使う
    fun main(args: Array<String>) {
        var i = 0
        while (i < args.size)
            print(args[i++])
    }
    when表現を使う
    fun cases(obj: Any) {
      when (obj) {
        1          -> print("One")
        "Hello"    -> print("Greeting")
        is Long    -> print("Long")
        !is String -> print("Not a string")
        else       -> print("Unknown")
      }
    }
    使用区間
    次の操作で一つの数字がある区間にあるかどうかを確認します.
    if (x in 1..y-1)
      print("OK")
    一つの数字が区間外にあるかどうかを確認します.
    if (x !in 0..array.lastIndex)
      print("Out")
    区間を巡回する
    for (x in 1..5)
      print(x)
    集合を使う
    集合を巡回する
    for (name in names)
      println(name)
    次の操作でセット内に特定のオブジェクトが含まれているかどうかを確認します.
    if (text in names) // names.contains(text) is called
      print("Yes")
    lamda表現を使って、集合をフィルタリングしてマッピングします.
    names
        .filter { it.startsWith("A") }
        .sortedBy { it }
        .map { it.toUpperCase() }
        .forEach { print(it) }
    コードスタイル
    ここではよく使われているものとあまり使われていないものが集められています.コードスタイルがよければ、GitHubでpull requestを使って貢献してください.
    DOsオブジェクトを作成します.
    data class Customer(val name: String, val email: String)
    上記の操作は、以下の機能を含むCustomer類を提供しています.
        getters (and setters in case of vars) for all properties
        equals()
        hashCode()
        toString()
        copy()
        component1(), component2(), …, for all properties 
    メソッドパラメータのデフォルト値
    fun foo(a: Int = 0, b: String = "") { ... }
    Listをフィルタします
    val positives = list.filter { x -> x > 0 }
    または選択のためにより短い方法を提供します.
    val positives = list.filter { it > 0 }
    $を使って文字列を挿入します.
    println("Name $name")
    オブジェクトチェック
    when (x) {
        is Foo -> ...
        is Bar -> ...
        else   -> ...
    }
    Map/Listを巡回
    for ((k, v) in map) {
        println("$k -> $v")
    }
    kvは、任意の名前をつけてもよい.
    使用区間
    for (i in 1..100) { ... }  //    :    100
    for (i in 1 until 100) { ... } //    :    100
    for (x in 2..10 step 2) { ... } //          2
    for (x in 10 downTo 1) { ... } //     
    if (x in 1..10) { ... } // x       
    読み取り専用のList
    val list = listOf("a", "b", "c")
    読み取り専用のMap
    val map = mapOf("a" to 1, "b" to 2, "c" to 3)
    Mapにアクセス
    println(map["key"])
    map["key"] = value
    なまけ者根性
    val p: String by lazy {
        // compute the string
    }
    機能拡張
    fun String.spaceToCamelCase() { ... }
    
    "Convert this to camelcase".spaceToCamelCase()
    単例を作成
    object Resource {
        val name = "Name"
    }
    ショートカットの判定が空です
    val files = File("Test").listFiles()
    
    println(files?.size)
    ショートカットの判定が空です
    val files = File("Test").listFiles()
    
    println(files?.size ?: "empty")
    空の場合は声明を実行します.
    val data=...val email=data[email]?throw IllagalStation Exception(「Email is missing!」)
    空でない場合は操作を実行します.
    val data = ...
    
    data?.let {
        ... // execute this block if not null
    }
    when条件文で値を返します.
    fun transform(color: String): Int {
        return when (color) {
            "Red" -> 0
            "Green" -> 1
            "Blue" -> 2
            else -> throw IllegalArgumentException("Invalid color param value")
        }
    }
    ‘try/catch’表現
    fun test() {
        val result = try {
            count()
        } catch (e: ArithmeticException) {
            throw IllegalStateException(e)
        }
    
        // Working with result
    }
    ‘if’表現
    fun foo(param: Int) {
        val result = if (param == 1) {
            "one"
        } else if (param == 2) {
            "two"
        } else {
            "three"
        }
    }
    Builder-style usage of methods that return Unit
    fun arrayOfMinusOnes(size: Int): IntArray {
        return IntArray(size).apply { fill(-1) }
    }
    単一行表現の方法
    fun theAnswer() = 42
    に等しい
    fun theAnswer(): Int {
        return 42
    }
    以下は他のコードスタイルを効率的に統合し、よりシンプルなコードを生成します.
    fun transform(color: String): Int = when (color) {
        "Red" -> 0
        "Green" -> 1
        "Blue" -> 2
        else -> throw IllegalArgumentException("Invalid color param value")
    }
    withを使用してオブジェクトを呼び出すことができる複数の方法
    class Turtle {
        fun penDown()
        fun penUp()
        fun turn(degrees: Double)
        fun forward(pixels: Double)
    }
    
    val myTurtle = Turtle()
    with(myTurtle) { //draw a 100 pix square
        penDown()
        for(i in 1..4) {
            forward(100.0)
            turn(90.0)
        }
        penUp()
    }
    Java 7’s try with resource
    val stream = Files.newInputStream(Paths.get("/some/file.txt"))
    stream.buffered().reader().use { reader ->
        println(reader.readText())
    }
    一般的な情報を宣言する一般的な方法に便利なフォーマットを提供します.
    //  public final class Gson {
    //     ...
    //     public <T> T fromJson(JsonElement json, Class<T> classOfT) throws JsonSyntaxException {
    //     ...
    
    inline fun T: Any> Gson.fromJson(json): T = this.fromJson(json, T::class.java)
    空きタイプのBooleanを使用します.
    val b: Boolean? = ...
    if (b == true) {
        ...
    } else {
        // `b` is false or null
    }
    コーディングの慣例
    このページには現在のKotlin言語のコードスタイルが含まれています.
    名前付きスタイル
    Javaの符号化慣例:
  • ラクダピーク命名法
  • を使用します.
  • 類のイニシャル
  • メソッドと属性の最初の文字小文字
  • 4個のスペースを使って字下げする
  • .
  • 共通の方法は、文書の注釈を追加する必要がある
  • .
    コロンをつける
    コロンの役割がセパレートタイプと親タイプの場合は、コロンの前にスペースを追加する必要があります.区切りのインスタンスとタイプの場合、スペースを追加する必要はありません.
    interface Foo<out T : Any> : Bar {
        fun foo(a: Int): T
    }
    Lambands
    Lambda式では、括弧を区切るためにスペースを使用します.同様に、引数と関数の頭を区切るためにスペースも使用されます.
    list.filter { it > 10 }.map { element -> element * 2 }
    lamda表式が短く、かつ額がはまっていない場合は、生命パラメータを明確にするのではなく、伝統的な慣行を使用することを推奨します.
    ユニット
    関数の戻り値がユニットタイプの場合、戻り値タイプの宣言は無視できます.
    fun foo() { // ": Unit" is omitted here
    
    }
    Functions vs Propties
    通常、パラメータがない関数は読み取り専用属性に置き換えられます.
    下記の規則を満たすときは、方法と属性を交換できます.
  • 異常を投げませんでした.
  • 複雑度は0(1)
  • です.
  • 簡単な計算です.
  • と同じ戻り値