429 votes

Quelle est la difference entre "const" et "val"?

J'ai récemment lu un article 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?

583voto

Luka Jacobowitz Points 3990

const s sont des constantes de temps de compilation. Cela signifie que leur valeur doit être affectée au moment de la compilation, contrairement à val s, où cela peut être fait à l'exécution.

Cela signifie que const s ne peuvent jamais être affectés à 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
 

52voto

EPadronU Points 905

Juste pour ajouter à Luka réponse:

Des Constantes De Compilation

Les propriétés dont la valeur est connue au moment de la compilation peut être marquée comme la compilation des constantes de temps en utilisant le modificateur const. Ces propriétés doivent remplir les conditions suivantes:

  • Niveau supérieur ou membre d'un objet
  • Initialisé avec une valeur de type Chaîne de caractères ou un type primitif
  • Pas de coutume de lecture

Source: la documentation Officielle

35voto

Jin Wang Points 11

Vous pouvez transformer le Kotlin en Java. Ensuite, vous pouvez voir que const a un modificateur statique de plus 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;
   }
}
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X