最近const
キーワードについて読みましたが、とても混乱しています。私は何か違いを見つけることができませんconst
し、val
他の何かが、私が欠けていることがあり、私たちは不変の変数を作るためにそれらの両方を使用できることを意味し、キーワードを?
最近const
キーワードについて読みましたが、とても混乱しています。私は何か違いを見つけることができませんconst
し、val
他の何かが、私が欠けていることがあり、私たちは不変の変数を作るためにそれらの両方を使用できることを意味し、キーワードを?
回答:
const
sはコンパイル時の定数です。つまり、val
実行時に実行できるs とは異なり、コンパイル時にそれらの値を割り当てる必要があります。
つまり、const
sを関数やクラスコンストラクターに割り当てることはできず、String
またはプリミティブにのみ割り当てることができます。
例えば:
const val foo = complexFunctionCall() //Not okay
val fooVal = complexFunctionCall() //Okay
const val bar = "Hello world" //Also okay
const val foo = "Hello world"
そしてval bar = "Hello world"
?彼らは同じですか?
const
値はコンパイル中に完全にインライン化されると思います。
const val
は単にではなく、なぜ必要とするのconst
ですか?val
この文脈では、キーワードはまったく必要ないように思えconst var
ます。
const val
、const
上の修飾子であるval
のではなく、キーワード。修飾子>キーワード。これと同じデザインのほかの例であり、annotation/enum/data class
、private val
、inline fun
、など
ルカの答えに追加するだけです:
コンパイル時定数
コンパイル時に値がわかっているプロパティは、const修飾子を使用してコンパイル時定数としてマークできます。このようなプロパティは、次の要件を満たす必要があります。
- オブジェクト宣言またはコンパニオンオブジェクトのトップレベルまたはメンバー。
- String型またはプリミティブ型の値で初期化されました
- カスタムゲッターなし
このようなプロパティは、アノテーションで使用できます。
出典:公式ドキュメント
KotlinをJavaに変換できます。次に、constにはvalよりも静的修飾子が1つ多いことがわかります。このような単純なコード。
コトリン:
const val str = "hello"
class SimplePerson(val name: String, var age: Int)
Java(部分)へ:
@NotNull
public static final String str = "hello";
public final class SimplePerson {
@NotNull
private final String name;
private int age;
@NotNull
public final String getName() {
return this.name;
}
public final int getAge() {
return this.age;
}
public final void setAge(int var1) {
this.age = var1;
}
public SimplePerson(@NotNull String name, int age) {
Intrinsics.checkParameterIsNotNull(name, "name");
super();
this.name = name;
this.age = age;
}
}
const
削除した場合、別のJavaファイルが生成されますか?
val
とconst
はどちらも不変です。
const
コンパイル時の定数を宣言するために使用されますがval
、実行時定数のために使用されます。
const val VENDOR_NAME = "Kifayat Pashteen" // Assignment done at compile-time
val PICon = getIP() // Assignment done at run-time
const kotlinからJava
const val Car_1 = "BUGATTI" // final static String Car_1 = "BUGATTI";
val kotlinからJavaへ
val Car_1 = "BUGATTI" // final String Car_1 = "BUGATTI";
簡単な言葉で
例1-
const val Car_1 = "BUGATTI" ✔
val Car_2 = getCar() ✔
const val Car_3 = getCar() ❌
//Because the function will not get executed at the compile time so it will through error
fun getCar(): String {
return "BUGATTI"
}
これは、getCar()が実行時に評価され、値をCarに割り当てるためです。
さらに-
kotlinではconst
、val
両方が不変性を表し、値のみを読み取りfinal
、Javaでキーワードとして機能します。
val
実行時の値を宣言するにはconst
キーワードを使用し、コンパイル時の値を宣言するにはキーワードを使用する必要があります。
constは、関数やコンストラクターではなく、プリミティブデータ型でのみ使用する必要があることに注意してください。
Example -
const val fun1 = anyFunctionOrConstructor() // it is not fine
val fun2 = anyFunctionOrConstructor() // it is perfectly fine
const val aa = "My String" // it is perfectly fine