ブラケットKotlinのプロパティとパラメータの違いは何ですか?
fun double(x: Int) {
...
}
内のいくつかのコード(パラメータ)を持つ関数の例
class Person(firstName: String) {
....
}
今ここで括弧内のいくつかのコード(プロパティ)を有するクラスの単純な例であります私はこれが根本的な問題だと知っていますが、初心者としてはかなり混乱しています。
ブラケットKotlinのプロパティとパラメータの違いは何ですか?
fun double(x: Int) {
...
}
内のいくつかのコード(パラメータ)を持つ関数の例
class Person(firstName: String) {
....
}
今ここで括弧内のいくつかのコード(プロパティ)を有するクラスの単純な例であります私はこれが根本的な問題だと知っていますが、初心者としてはかなり混乱しています。
あなたはパラメータの関数およびコンストラクタへ、および性質を持ってクラスを渡します。
例のPerson
クラスのコンストラクタには単一のパラメータがあり、double
関数も同じです。この場合、firstName
パラメータはではなく、プロパティです。そのプロパティようにするに
、あなたはそれを宣言する必要があります。
class Person(firstName: String) {
val firstName : String = firstName
}
KotlinはfirstName
パラメータがプロパティとして機能せており、これは短いことができます。
class Person(val firstName: String)
プロパティとパラメータが異なると思う:
パラメータ:関数を宣言するとき:
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>]
まず、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
}