Próbáld ki az erőforrásokat Kotlinban

1. Bemutatkozás

A kezelt nyelvek, például a JVM-et célzó nyelvek, automatikusan kezelik a leggyakoribb erőforrást: a memóriát.

Azonban mindenféle erőforrással kell foglalkoznunk, nem csak a memóriával: fájlokkal, hálózati kapcsolatokkal, adatfolyamokkal, ablakokkal stb. akárcsak az emlékezet, ezeket is fel kell szabadítani, amikor már nincs rá szükség.

Ebben a cikkben azt fogjuk megvizsgálni, hogy az erőforrások hogyan kezelhetők automatikusan Kotlinban, és miben különbözik a Java erőforrásokkal próbálkozó konstrukciójától.

Ha át akarja hagyni az elméletet, ugorjon közvetlenül a példára.

2. Automatikus erőforrás-kezelés

Három különböző fázist különböztethetünk meg, ha a Java erőforrásaival dolgozunk (álkód):

erőforrás = acquResource () próbáld meg {useResource (erőforrás)} végül {releaseResource (erőforrás)} 

Ha a nyelv vagy a könyvtár felelős az erőforrás (a végül rész), akkor hívjuk Automatikus erőforrás-kezelés. Ilyen jellemző felment minket attól, hogy emlékeznünk kell egy erőforrás felszabadítására.

Továbbá, mivel az erőforrás-kezelés általában blokkkörhöz van kötve, ha egyszerre több erőforrással is foglalkozunk, akkor azok mindig a megfelelő sorrendben kerülnek kiadásra.

A Java-ban az erőforrást tároló objektumok, amelyek jogosultak az automatikus erőforrás-kezelésre, egy adott felületet valósítanak meg: Bezárható az I / O-val kapcsolatos erőforrásokhoz és Automatikusan zárható.

Ezenkívül a Java 7 utólag szerelte fel a már létezőt Bezárható felület kiterjesztésére Automatikusan zárható.

Ezért Kotlin ugyanazzal az erőforrástulajdonos-koncepcióval rendelkezik: vagyis bármelyik megvalósító objektum Bezárható vagy Automatikusan zárható.

3. Az használat Funkció Kotlinban

Az erőforrások automatikus kezeléséhez egyes nyelveknek külön dedikált konstrukciója van: a Java 7 például bevezette az erőforrásokkal való próbálkozást, míg a C # felhasználásával kulcsszó.

Néha kínálnak nekünk egy mintát, például RAII-t a C ++ -ban. Néhány más esetben könyvtármódszert adnak nekünk.

Kotlin az utóbbi kategóriába tartozik.

Tervezés szerint nincs ehhez hasonló nyelvi konstrukciója erőforrásokkal próbálkozzon Java-ban.

Ehelyett megtalálhatjuk az úgynevezett kiterjesztési módszert használat szokásos könyvtárában.

Később részletesen megvizsgáljuk. Egyelőre csak tudnunk kell, hogy minden erőforrástulajdonos objektum rendelkezik a használat módszer, amelyre hivatkozhatunk.

3.1. Hogyan kell használni

Egy egyszerű példa:

val író = FileWriter ("test.txt") író.használja {író.írja ("valami")}

Felhívhatjuk a használat funkció bármely objektumon, amely megvalósul Automatikusan zárható vagy Bezárható, csakúgy, mint a Java-ban próbáld ki az erőforrásokat.

A módszer vesz egy lambda kifejezést, végrehajtja és elidegeníti az erőforrást (meghívással Bezárás() rajta), valahányszor a végrehajtás elhagyja a blokkot, normálisan vagy kivétellel.

Tehát ebben az esetben utána használat, a író már nem használható, mert Kotlin automatikusan bezárta.

3.2. Rövidebb űrlap

A fenti példában az érthetőség kedvéért egy változót hívtunk író, ezáltal bezárást hozva létre.

Azonban, használat egyetlen paraméterrel elfogadja a lambda kifejezéstaz erőforrást tároló objektum:

FileWriter ("test.txt") .use {w -> w.write ("valami")}

A blokkon belül használhatjuk az implicit változót is azt:

FileWriter ("test.txt") .use {it.write ("valami")}

Tehát, mint láthatjuk, nem kell explicit nevet adnunk az objektumnak. Általában azonban jó, ha világos, nem pedig túl tömör kód írása.

3.3. A meghatározás használat()

Nézzük meg a használat funkció Kotlinban, amint az a szokásos könyvtárban található:

nyilvános inline szórakozás T.használat (blokk: (T) -> R): R

Láthatjuk, a rész, az használat a Java-k kiterjesztési függvényeként van meghatározva Bezárható felület.

A kiterjesztési módszerekről bővebben a bevezető cikkünkben találhatók.

Természetesen a használat függvényt dokumentálják a Kotlin standard könyvtárának részeként.

3.4. Bezárható vs. Automatikusan zárható

Ha jobban figyelünk az előző szakasz példájára, láthatjuk, hogy a használat a funkció aláírását csak a Bezárható felület. Ennek oka, hogy a Kotlin szabványos könyvtárának célja a Java 6.

7 előtti Java verziókban, Automatikusan zárható nem létezett, és természetesen Bezárható nem hosszabbította meg.

A gyakorlatban olyan osztályok, amelyek megvalósítják Automatikusan zárható de nem Bezárható ritkák. Ennek ellenére találkozhatunk egyikükkel.

Ebben az esetben csak a Kotlin Java 7, 8 vagy bármilyen más célzott verziójának kiterjesztését kell hozzáadnunk:

 org.jetbrains.kotlin kotlin-stdlib-jdk8 

A függőség legújabb verziója a Maven Central oldalon található.

Ez ad nekünk egy másikat használat kiterjesztési függvény a Automatikusan zárható felület:

nyilvános inline szórakozás T.használat (blokk: (T) -> R): R

4. Következtetés

Ebben az oktatóanyagban azt láthattuk, hogy a Kotlin szabványos könyvtárának egyszerű kiterjesztési funkciója mennyire szükséges a JVM által ismert mindenféle erőforrás automatikus kezeléséhez.

Mindezen példák és kódrészletek megvalósítása megtalálható a GitHub projektben.


$config[zx-auto] not found$config[zx-overlay] not found