J'ai récemment lu sur le mot clé const
, et je suis tellement confus! Je ne trouve aucune différence entre cela et le mot clé val
. Je veux dire que nous pouvons utiliser les deux pour créer une variable immuable. Y a-t-il autre chose qui me manque?
const
s sont des constantes de temps de compilation. Cela signifie que leur valeur doit être assignée pendant la compilation, contrairement à val
s, où cela peut être fait à l'exécution.
Cela signifie que const
s ne peut jamais être affecté à une fonction ou à un constructeur de classe, mais uniquement à une String
ou à une primitive.
Par exemple:
const val foo = complexFunctionCall() //Not okay
val fooVal = complexFunctionCall() //Okay
const val bar = "Hello world" //Also okay
Juste pour ajouter à la réponse de Luka:
Constantes à la compilation
Les propriétés dont la valeur est connue au moment de la compilation peuvent être marquées en tant que constantes de compilation à l'aide du modificateur const. De telles propriétés doivent remplir les conditions suivantes:
- Niveau supérieur ou membre d'un déclaration d'objet ou d'un objet compagnon .
- Initialisé avec une valeur de type String ou un type primitif
- Aucun getter personnalisé
De telles propriétés peuvent être utilisées dans les annotations.
Source: documentation officielle
Vous pouvez transformer le Kotlin en Java. Ensuite, vous pouvez voir que const a un plus statique modificateur que val. Le code simple comme ça.
Kotlin:
const val str = "hello"
class SimplePerson(val name: String, var age: Int)
Pour Java (partie):
@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;
}
}