À Kotlin, il y a:

  • val - propriété en lecture seule
  • const val - constantes à la compilation

À partir de la documentation:

Constantes de compilation

Les propriétés dont la valeur est connue au moment de la compilation peuvent être marquées comme constantes au moment de la compilation à l'aide du modificateur const. Ces propriétés doivent répondre aux exigences suivantes:

  • Niveau supérieur ou membre d'un objet
  • Initialisé avec une valeur de type String ou un type primitif
  • Pas de getter personnalisé

Étant donné que le compilateur kotlin sait identifier les valeurs initialisées (par exemple, il n'est pas nécessaire de définir le type de variable dans un initialiseur):

  • Pourquoi le compilateur a-t-il besoin de l'aide du programmeur?
  • Ne peut-il pas identifier des "propriétés dont la valeur est connue au moment de la compilation" et "ajouter" le modificateur const par lui-même?
6
Lior Bar-On 11 août 2017 à 09:58

2 réponses

Meilleure réponse

Le modificateur const modifie sérieusement le contrat d'une propriété.

Par exemple, si vous avez une propriété standard, vous pouvez lui ajouter un getter spécial sans affecter le code qui l'utilise.

D'un autre côté, vous devrez recompiler le code utilisateur pour supprimer const et ajouter des getters. En d'autres termes, vous perdez l'avantage d'avoir une propriété sur un champ.

10
voddan 11 août 2017 à 07:42

J'ai trouvé l'article de Christophe Beyls utile pour comprendre le "optimisation à la compilation" de l'utilisation de const.

Public const vals sont convertis en valeurs accessibles directement. Les vals publics sont convertis en valeurs de bytecode private et un getter synthétique est généré.

Vous pouvez l'essayer vous-même en ouvrant la visionneuse de bytecode Kotlin dans Intellij ou Android Studio, en créant un object pour certaines valeurs de test et en regardant la méthode synthétique générée pour val par rapport à const val.

Je travaille avec un objet qui définit environ 200 constantes, et un fichier beaucoup plus petit est généré lorsqu'ils sont tous marqués const val.

1
Ari Lacenski 15 févr. 2018 à 18:23