Razredi podataka u Kotlinu

1. Pregled

Jezik Kotlin uvodi koncept Klase podataka, koji predstavljaju jednostavne klase koje se koriste kao spremnici podataka i ne uključuju nikakvu dodatnu logiku. Jednostavno rečeno, Kotlinovo rješenje omogućuje nam da izbjegnemo pisati puno šifri.

U ovom ćemo kratkom članku pogledati Klase podataka u Kotlinu i usporediti ih s njihovim Java kolegama.

2. Postavljanje Kotlina

Da biste započeli s postavljanjem projekta Kotlin, provjerite naš uvod u jezik Kotlin udžbenik.

3. Klase podataka u Javi

Ako bismo željeli stvoriti Film ulazak na Javi, trebali bismo napisati puno uzorka koda:

film javne klase {naziv privatnog niza; privatni gudački studio; ocjena privatnog plutanja; javni film (Naziv niza, Glazbeni studio, plutajuća ocjena) {this.name = name; this.studio = studio; this.rating = ocjena; } javni String getName () {return ime; } javna praznina setName (ime niza) {this.name = name; } javni String getStudio () {return studio; } javna void setStudio (String studio) {this.studio = studio; } javni float getRating () {povratna ocjena; } javna void setRating (plutajuća ocjena) {this.rating = rating; } @Override public int hashCode () {final int prime = 31; rezultat int = 1; rezultat = prosti * rezultat + ((ime == null)? 0: name.hashCode ()); rezultat = prime * rezultat + Float.floatToIntBits (ocjena); rezultat = prime * rezultat + ((studio == null)? 0: studio.hashCode ()); povratni rezultat; } @Override public boolean equals (Object obj) {if (this == obj) return true; if (obj == null) return false; if (getClass ()! = obj.getClass ()) return false; Film ostalo = (Film) obj; if (name == null) {if (other.name! = null) return false; } inače if (! name.equals (other.name)) return false; if (Float.floatToIntBits (rating)! = Float.floatToIntBits (other.rating)) return false; if (studio == null) {if (other.studio! = null) return false; } inače if (! studio.equals (other.studio)) return false; povratak istinit; } @Override public String toString () {return "Film [name =" + name + ", studio =" + studio + ", rating =" + rating + "]"; }}

86 redaka koda. To je puno za pohranu samo tri polja u jednostavnoj klasi.

4. Razred podataka Kotlin

Sad ćemo stvoriti isto Film razreda, s istim funkcionalnostima, koristeći Kotlin:

podatkovna klasa Film (var ime: String, var studio: String, var ocjena: Float)

Kao što vidimo, to je znatno lakše i čišće. Konstruktor, toString (), jednako (), hashCode (), i dodatni kopirati() i komponentaN () funkcije se generiraju automatski.

4.1. Upotreba

Klasa podataka instancirana je na isti način kao i ostale klase:

val film = Film ("Whiplash", "Sony Pictures", 8.5F)

Sad su dostupna svojstva i funkcije:

println (movie.name) // Whiplash println (movie.studio) // Sony Pictures println (movie.rating) //8.5 movie.rating = 9F println (movie.toString ()) // Film (name = Whiplash, studio = Sony Pictures, ocjena = 9,0)

4.2. Funkcija kopiranja

The kopirati() funkcija je stvorena, u slučaju da trebamo kopirati objekt mijenjajući neka njegova svojstva, ali da ostatak ostane nepromijenjen.

val betterRating = movie.copy (rating = 9.5F) println (betterRating.toString ()) // Movie (name = Whiplash, studio = Sony Pictures, rating = 9.5) 

Java ne pruža jasan, izvorni način kopiranja / kloniranja objekata. Mogli bismo koristiti Za kloniranje sučelje, SerializationUtils.clone () ili a konstruktor za kloniranje.

4.3. Deklaracije o destrukturiranju

Deklaracije o destrukturiranju omogućuju nam da svojstva objekata tretiramo kao pojedinačne vrijednosti. Za svako svojstvo u klasi podataka podataka, a komponentaN () generira se:

movie.component1 () // naziv movie.component2 () // studio movie.component3 () // ocjena

Također možemo stvoriti više varijabli iz objekta ili izravno iz funkcije - važno je zapamtiti o korištenju zagrada:

val (ime, studio, ocjena) = zabava u filmu getMovieInfo () = film val (imef, studiof, ocjenaf) = getMovieInfo ()

4.4. Zahtjevi za klasu podataka

Da bismo stvorili klasu podataka, moramo ispuniti sljedeće zahtjeve:

  • Primarni konstruktor mora imati barem jedan parametar
  • Svi parametri primarnog konstruktora moraju biti označeni kao val ili var
  • Klase podataka ne mogu biti apstraktne, otvorene, zapečaćene ili unutarnje
  • (prije 1.1.) Klase podataka smiju implementirati samo sučelja

Od 1.1, klase podataka mogu proširiti druge klase.

Ako generirana klasa treba imati konstruktor bez parametara, moraju se navesti zadane vrijednosti za sva svojstva:

podatkovna klasa Film (var ime: String = "", var studio: String = "", var ocjena: Float = 0F)

5. Zaključak

Vidjeli smo klase podataka u Kotlinu, njihovu upotrebu i zahtjeve, smanjenu količinu napisanog osnovnog koda i usporedbe s istim kodom u Javi.

Ako želite saznati više o Kotlinu, provjerite članke poput Kotlin Java interoperabilnost i već spomenuto Uvod u jezik Kotlin.

Potpuna implementacija ovih primjera može se naći u našem projektu GitHub.