with(Kotlin) : fermer automatiquement une ressource avec use

La fonction use du langage Kotlin est l'équivalent de la construction try-with-resources du langage Java (apparue en version 7), car elle permet de fermer automatiquement un objet dont le type supporte l'interface Closeable.
L'intérêt d'une telle fonction est d'assurer que la ressource que l'on utilise sera bien refermée automatiquement (et que les ressources du système associées soient libérées), par un appel à la méthode Closeable.close().

Kotlin déclare cette fonction ainsi :

1
inline fun <T : Closeable?, R> T.use(block: (T) -> R): R

use est définie comme une fonction d'extension sur un type qui implémente l'interface Closeable et qui, après l'exécution du bloc block, appelle la méthode close(), qu'il ait eu ou non une exception.

Voici un exemple d'utilisation de la fonction use sur un objet de type FileInputStream, qui est donc fermé automatiquement après l'exécution du bloc :

1
2
3
4
val prop = Properties()
FileInputStream("application.conf").use {
    prop.load(it)
}

En langage Groovy, on utiliserait la méthode withCloseable qui étend l'interface Closeable (GDK), et l'exemple de code ci-dessus se réécrirait ainsi :

1
2
3
4
def prop = new Properties()
new FileInputStream('application.conf').withCloseable {
    prop.load(it)
}

Note : le langage C# dispose d'une fonctionnalité similaire grâce au mot-clé using, en relation avec l'interface IDisposable.