Constantes en Kotlin : comment les créer correctement ? Guide complet

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Constantes en Kotlin : arrêtez de deviner, commencez à les utiliser correctement

\n\n

Si vous écrivez en Kotlin depuis au moins une semaine, vous avez sûrement déjà été confronté à la question : "Comment déclarer correctement une constante ?" À première vue, tout semble simple — il y a val, const val, companion object. Mais le diable, comme toujours, se cache dans les détails. Et cette question sur Stack Overflow a accumulé des milliers de vues pour une bonne raison.

\n\n

Penchons-nous une fois pour toutes sur les différentes façons de créer des constantes en Kotlin, quand utiliser laquelle, et pourquoi val n'est pas toujours une constante. C'est parti !

\n\n

1. val vs const val : quel est le piège ?

\n\n

La question la plus fréquente des débutants : "J'ai écrit val — c'est une constante, non ?" Réponse : oui et non.

\n\n

val est une référence immuable (lecture seule). Mais la valeur est calculée à l'exécution. Ce n'est donc pas une constante de compilation.

\n\n
// Ceci n'est PAS une constante de compilation\nval currentTime = System.currentTimeMillis()
\n\n

const val est une vraie constante, qui est intégrée dans le code lors de la compilation (comme static final en Java).

\n\n
// Et voici une constante\nconst val PI = 3.14159
\n\n

Limitation importante : const val ne peut être utilisé qu'avec des types primitifs et String. Pas d'objets, de listes ou de classes personnalisées.

\n\n
\n

💡 Règle d'or : Si la valeur est connue à la compilation — utilisez const val. Si elle est calculée à l'exécution — utilisez val.

\n
\n\n

2. Où déclarer les constantes ? Top 3 des méthodes

\n\n

Méthode 1 : Constantes top-level (recommandée)

\n\n

La méthode la plus simple et la plus propre — déclarer une constante au niveau supérieur du fichier. Pas de classes, pas d'objets — juste un fichier avec des constantes.

\n\n
// Constants.kt\nconst val BASE_URL = "https://api.example.com"\nconst val TIMEOUT_SECONDS = 30\nconst val APP_NAME = "MyKotlinApp"
\n\n

Pourquoi est-ce génial ?

\n
    \n
  • Code minimal
  • \n
  • Accessible de partout sans préfixes
  • \n
  • Le compilateur intègre les valeurs
  • \n
  • Facile à refactoriser
  • \n
\n\n

Méthode 2 : companion object à l'intérieur d'une classe

\n\n

Approche classique de Java qui a été reprise dans Kotlin. Utilisez-la lorsque les constantes sont logiquement liées à une classe.

\n\n
class NetworkClient {\n    companion object {\n        const val DEFAULT_PORT = 8080\n        const val PROTOCOL = "https"\n    }\n}\n\n// Utilisation\nval port = NetworkClient.DEFAULT_PORT
\n\n

Inconvénient : bruit syntaxique. Avantage : les constantes sont liées au contexte.

\n\n

Méthode 3 : object (singleton) pour des groupes de constantes

\n\n

Lorsqu'il y a beaucoup de constantes et qu'elles doivent être regroupées par sens.

\n\n
object AppConstants {\n    const val MAX_LOGIN_ATTEMPTS = 5\n    const val SESSION_DURATION = 3600L\n    const val DATE_FORMAT = "yyyy-MM-dd"\n\n    object Urls {\n        const val LOGIN = "/auth/login"\n        const val LOGOUT = "/auth/logout"\n    }\n}\n\n// Utilisation\nAppConstants.Urls.LOGIN
\n\n

3. Constantes dans Android : particularités

\n\n

Si vous développez pour Android, il y a quelques nuances supplémentaires.

\n\n

Constantes dans companion object et @JvmStatic

\n\n

Pour qu'une constante d'un companion object devienne une véritable constante statique en Java (par exemple pour les annotations), utilisez @JvmStatic :

\n\n
class MyFragment : Fragment() {\n    companion object {\n        @JvmStatic\n        const val ARG_ID = "id"\n    }\n}
\n\n

Constantes dans les ressources

\n\n

N'oubliez pas la méthode classique d'Android — les ressources. Pour les chaînes, couleurs, dimensions :

\n\n
// strings.xml\n<string name="app_name">MyApp</string>\n\n// Dans le code\nval appName = getString(R.string.app_name)
\n\n

Mais ce ne sont pas des constantes de compilation.

Blogs

Book Recommendations