kotlin基礎二類の概要

5423 ワード

Kotlinベース
クラスと属性
JavaBeanから始めましょう.JavaでJavaBean Person classがコードをどのように書くかを見てみましょう.
public class Person {

    private final String name;

    public Person(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }
}

Javaでは、コンストラクタには通常、フィールドに値を割り当て、getterまたはsetterメソッドまたは両方があります.Kotlinでは
class Person(val name: String)

たった一言でいいです.簡潔ではないでしょうか.修飾子publicがどうして消えたのか不思議に思うかもしれませんが、間違いなく、これもKotlinの特性の一つで、Kotlinではデフォルトのアクセス権はpublicなので、ここではpublicを明示的に指定する必要はありません.Kotlinはgetterを生成したりsetterを生成したりするなど、多くのことをしました.どうしてそう言うのですか.Kotlinコードを見てみましょう
class Person(val name: String, var isMan: Boolean)  

属性namevalで宣言され、kotlinコンパイラは自動的にgetterメソッドを生成し、属性isManvarで宣言されるので、getterメソッドとsetterメソッドを同時に生成します.彼らの使い方はkotlinとJavaでも違います.
public class Person {

    private final String name;

    public Person(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public static void main(String...args) {
        Person person = new Person("crazypandas");
        System.out.println(person.getName());
    }
}
//result:
//crazypandas

kotlinでは次のようになります.
class Person(val name: String)

fun main(vararg args: String) {
    val person = Person("crazypandas")//<1>
    println(person.name)              //<2>
}
//result:
//crazypandas
  • <1>コンストラクタを呼び出し、newキーワード
  • を使用していません.
  • <2>getterメソッドを呼び出し、その値にアクセスしたのは不思議ではないでしょうか.同じ論理コードなのに、ずいぶん簡潔になって、やっと一日中トントンのコードを書く必要がなくなった.同様に、プロパティがvarであれば、直接値を割り当てることができます(実質的にkotlinコンパイラはsetterを自動的に呼び出すことができます).たとえば、isMan:person.isMan = trueのプロパティを持つpersonオブジェクトがあります.ではkotlinでgetterとsetterをカスタマイズできますか?もちろんいいですよ.次のコードを見てください:
  • class Rectangle(val width: Int, val height: Int) {
        val isSquare: Boolean
            get() { //<1>
                return width == height
            }
    }
    
    fun main(vararg args: String) {
        val rectangle = Rectangle(10, 10)
        println(rectangle.isSquare)
    }
    //result
    //true

    <1>:属性isSquareのgetter宣言は、あなたがそうすることもできます.
    class Rectangle(val width: Int, val height: Int) {
        val isSquare: Boolean
            get() = width == height
    }

    これもいいです.
    パッケージ宣言とimportパッケージ
    kotlinでは、package宣言とimportパッケージとJavaには何の違いもありません(packageには実は少し違いがありますが、以下に説明します).KotlinとJavaは100%互換性があるので、kotlinでimport Javaのクラスライブラリで使用できます.
    JavaとKotlinのコードファイル
    Javaではクラス名が.Javaファイルと同じでなければならないことはよく知られていますが、Kotlinではこの制限はありません.kotlinでは、同じファイルに複数のクラスを書くことができ、名前は任意であってもよい.kotlinではpackageはJavaに完全に等価ではなく、Javaではpackageとフォルダパスが一致し、kotlinではpackageがフォルダパスに等価ではない点に注意が必要です.