Kotlinは素早く上手になり、基礎知識点をまとめます

15844 ワード

作者:feintkotlin(Kotlin学习网)Kotlin学习QQ群:543182119说明:この文章はKotlinの基础文法を述べて、いくつかの比较的高级な用法は中に含まれていないかもしれません
変数#ヘンスウ#
var:変数の定義
例:
var name:String
name=“feint”
val:定数を定義し、Cのconstのように定義するときに初期化し、その後は変更できません.
例:
val name=“feint”
varage:可変パラメータ、java..構文の効果は、関数パラメータリストの最後の場所でのみ使用できます.
演算子
..範囲演算子
例:
val oneToNine=1..9//1から9という数字の区間を表す
val isTrue=2 in onToNine
関連メソッド:
downTo()、rangeTo()、step()、reversed()
式:
===:2つの変数のアドレスを比較
==:タイプequalsメソッドに従って対応する結果を返します.
データ型
Number
を選択します.
データ#データ#
長さ
Long
8
バイト
Int
4
バイト
Short
2
バイト
Byte
1
バイト
Double
8
バイト
Float
4
バイト
Boolean
Char:Javaとは異なり、charはデフォルトでは数字にはなりません(Intタイプに直接強制変換できません)
String文字列テンプレート:
var name=“feint”


var info=“my name is $name

Array
配列の初期化:
  • val arr=arrayOf(1,2,3)
  • val arr=Array(21,{k->k+1})/Array(配列サイズ、初期化配列のlambda式)
  • 2 2 2 D配列
  • を作成する
    val level:10;
    //        
    val arr= Array(level,{Array(level){0}});

    Unit:javaのvoidのようなタイプがないことを示します
    Exception
    try{
    
    
    }catch(e:Exception){
    
    
    }finally{
    
    
    }

    Kotlinでの例外取得は、式として使用できます.
    val a=try{
        5
    }catch(e:Exception){
        4
    }

    タイプ変換
    val str:String ?=any as String
    When式
    この式を使用してswitch文を置き換えることができます
    
    
        val gStr=when((grade/10) as Int){
         9->"Best"
         8->"Grate"
         7->"Usual"
         6->"Not Bad"
         else->"Bad”
        }
    
    

    オブジェクト向け
    コンストラクタ
    class Man{
        private var name:String;
        private var age:Int;
        constructor(name: String,age:Int){
            this.name=name;
            this.age=age;
        }
    }
    class Man(name: String,age:Int){
        private var name:String;
        private var age:Int;
        init {
            this.name=name;
            this.age=age;
        }
    class Man(val name: String,val age:Int){}

    クラスのネストにはinnerキーワードが追加されています.このクラスは外部クラスでのみ呼び出されます.
    inner class Line(val x1:Int,val x2:Int)

    使用this@label外部クラスのプライベート変数を使用できます
    class BasicGraph(val name:String){
        private val test:String="Hello";
        //
        inner class Line(val x1:Int,val x2:Int){
            private val test:String="World";
            //this@outer_class_name
            fun draw():Unit= println("DrawLine ${[email protected]} (${x1},${x2})")
        }
    
    
        fun draw():Unit= println("Draw the Graph ${name}");
    }

    データクラス(Data class)
    列挙クラス
    enum class Day{
        MonDay,TuesDay,WednesDay,ThursDay,Friday,SaturDay,Sunday
    }
    interface Callable{
        fun call():Unit;
    }
    enum class Animal:Callable{
        Dog{
            override fun call():Unit= println("I am a dag");
        },
        Cat{
            override fun call():Unit=println("I am a cat");
        };
    
    
    }

    Singletonキーワードの定義:objectは静的メソッドと静的変数を格納するために使用できます
    object Singleton {
        private var count=0;
        public val tag="Singleton";
        fun doSome():Unit= println("count is ${count++}");
    }
    //    ,         。                
    companion object{
    
    
    }

    継承キーワード:openこのキーワードで修飾されたクラスを継承できます
    キーワード:abstract/sealed修飾抽象クラス
    open abstract class Payment(name:String,bank:String){
        abstract fun pay();
    }

    sealed classes(パッケージクラス):パッケージクラスに複数の異なるタイプのインスタンスを含めることができる点で、列挙クラスと同様です.通常のクラス継承との違いは,そのサブクラスの数が限られていることである.
    sealed class Animal
    class Cat():Animal()
    class Dog():Animal()
    fun whatAnimal(animal: Animal)=when(animal){
        is Cat->"I am a Cat"
        is Dog->"I am a Dog"
    }

    キーワード:finalがfinalに修飾される方法は布団類に書き換えられない
    Kotlinではメソッドのデフォルトはfinalですが、継承するにはopenキーを付けなければなりません.
     open fun myPay()="Hello";

    表示範囲public:どこでも表示
    private:クラス内部のみ使用
    protected:このクラスとそのサブクラスのみ使用
    internal:クラスと同じパッケージの下にあるクラスのみ使用
    依頼キーワード:by
    interface Base{
        fun say():String;
    }
    
    
    class BaseImp(val name: String):Base{
        override fun say(): String ="myname is ${name}"
    }
    
    
    class BaseDele(b:Base):Base by b;
    
    
    val bd=BaseDele(BaseImp("Green"))
    println(bd.say());

    関数#カンスウ#
    名前付きパラメータ
     println("min num is ${min(first = 34,second = 232)}")

    拡張関数(Extension function)新しい関数を追加する
    class Hello(val name: String,val country:String){
        fun hello():String{
            return "hello";
        }
    }
    //Extension function
    fun Hello.say(){
        println("${hello()}: ${name} -- ${country}")
    }

    infix functionはクラスオブジェクトをデフォルトで関数の最初のパラメータとして使用し、このような関数は1つのオブジェクトのみを受信します.関数を二元演算子として使用することに相当します
     class Calc(number:Float){
        var number:Float
    
    
        init {
            this.number=number;
        }
    
    
        infix fun addPrice(increase:Float){
            this.number+=increase;
        }
      }
    
    
      val calc=Calc(100f);
      cals addPrice 200f;

    かんすうしきプログラミング
    higher order functionsは1つの関数を別の関数のパラメータとして使用します
    fun <E> List<E>.min(fn:(E,E)->Boolean):E?{
    fun pint(pre:(it:Int)->String){
        println(pre(100));
    }
    
    
    pint { return@pint "this number is ${it}" }

    関数を戻り値として使用
    fun bar():(String)->String={str:String->str.reversed()}
    
    
    //{str1,str2->"${str1}:${str2} ->       ,->      
    fun concat():(String,String)->String={str1,str2->"${str1}:${str2}"}
    
    
    println(bar()("hello"));
    println(concat()("hello","world"));

    関数を変数として宣言
    fun concat(country:String):(String)->String={str1->"${str1}:${country}"}
    
    
    var world:(String)->String= concat("China");
    println(world("Hello"));

    関数参照:
    println("min is:${minlist.min(::min)}");
    
    
    fun min(a:Int,b:Int):Boolean{
        return a>b;
    }

    ツールバーの
    lateinit:遅延初期化
    属性拡張はkotlinで属性拡張され、getterとsetterが追加されたことに相当するため、拡張属性を初期化することができず、バックグラウンドフィールドfieldも取得できません.
    データクラス
    コンストラクタを定義するには、少なくとも1つのパラメータが必要です.マスターコンストラクタ(クラス名の直後)が必要です.
    data class Student(var name:String,var age:Int);

    非パラメトリック構造を使用するには、メンバー変数ごとにデフォルト値を付ける必要があります.
    data class Student(var name:String="feint",var age:Int=32);

    copy data classのデフォルトではjavaのcloneのようなcopyメソッドが実装されています.
    val stu=Student("feint",23);
    stu.age=14;
    val oldStu=stu.copy(age=33);

    toString data classはまた、デフォルトでtoString()メソッドを実装します.出力のスタイルは次のとおりです.
    User(name=feint, age=20)

    こうぶん糖
    単行関数:fun plusOne(x:Int)=x+1
    文字列テンプレート:
    var name=“feint”
    
    
    var info=“my name is $name

    式:
    ===:2つの変数のアドレスを比較
    ==:タイプequalsメソッドに従って対応する結果を返します.
    Nullable構文
    使用?=変数にNull値を付ける
    インテリジェントタイプ変換
    if(any is String){
    
    
     //any is smart cast to type of String
    
    
    }

    ラベル付きwhile文
    label@while (true){
        break@label
    }