2017-07-11 40 views
1
ここ

ブラケットKotlinのプロパティとパラメータの違いは何ですか?

fun double(x: Int) { 
... 
} 

内のいくつかのコード(パラメータ)を持つ関数の例

class Person(firstName: String) { 
.... 
} 

今ここで括弧内のいくつかのコード(プロパティ)を有するクラスの単純な例であります私はこれが根本的な問題だと知っていますが、初心者としてはかなり混乱しています。

答えて

7

あなたはパラメータの関数およびコンストラクタへ、および性質を持ってクラスを渡します。

例のPersonクラスのコンストラクタには単一のパラメータがあり、double関数も同じです。この場合、firstNameパラメータはではなく、プロパティです。そのプロパティようにするに

、あなたはそれを宣言する必要があります。

class Person(firstName: String) { 

    val firstName : String = firstName 
} 

KotlinはfirstNameパラメータがプロパティとして機能せており、これは短いことができます。

class Person(val firstName: String) 
0

プロパティとパラメータが異なると思う:

パラメータ:関数を宣言するとき:

fun sum(a: Int, b: Int): Int { 
    return a + b 
} 

機能のIntの戻り値の型を持つ2つのIntのパラメータ持つ:特性を有することができるKotlin

の宣言プロパティ

クラス:

プロパティとフィールドを。これらは、varキーワードを使用して、またはvalキーワードを使用して読み取り専用として、変更可能として宣言できます。

class Address { 
    var name: String = ... 
    var street: String = ... 
    var city: String = ... 
    var state: String? = ... 
    var zip: String = ... 
} 

プロパティを使用するには、我々は単に名前で参照、それはJavaでのフィールドであるかのように、:

fun copyAddress(address: Address): Address { 
    val result = Address() // there's no 'new' keyword in Kotlin 
    result.name = address.name // accessors are called 
    result.street = address.street 
    // ... 
    return result 
} 

プロパティを宣言するための完全な構文は次のとおりです

var <propertyName>[: <PropertyType>] [= <property_initializer>] 
    [<getter>] 
    [<setter>] 
0

まず、firstNameは、ではなくで、parameterです。Personクラスです。

//   v-- a parameter declared on primary constructor 
class Person(firstName: String) 

あなたは、たとえば、initブロックまたはプロパティ/フィールド宣言にprimary constructorに宣言されたパラメータにアクセスすることができます。

class Person(firstName: String){ 
    val first:String 
    init{ first=firstName } 
} 

class Person(firstName: String){ 
    val first:String = firstName 
} 

class Person(firstName: String){ 
    @JvmField val first:String = firstName 
} 

をあなたは、キーワードvalまたはvarを使用することができますプロパティにfirstNameを作るために例:

//   v--- immutable property 
class Person(val firstName: String) 

//   v--- mutable property 
class Person(var firstName: String) 

kotlinプロパティはgetter/setter(?)とbacking field(?)からjavaバイトコード。以下のようにJavaバイトコードに可変性の例を取る:プライマリコンストラクタに宣言されたパラメータ以外関数スコープ/コンストラクタ範囲内

public final class Person{ 
    private String firstName; // backing field 

    //     v--- parameter 
    public Person(String firstName){ this.firstName = firstName; } 

    //getter 
    public final String getFirstName(){ return firstName; } 

    //setter 
    public final String setFirstName(String firstName){ this.firstName= firstName; } 
} 

パラメータのみ見えます。

:パラメータは、Javaなど実効最終変数/パラメータのような不変あるので、あなたは、例えば、Kotlinには全くパラメータを再割り当てすることはできません。

fun foo(bar:String){ 
    bar = "baz" 
// ^--- compile error 
} 
関連する問題