Kotlin Language

Le classi

Ovviamente si tratta di un argomento fondamentale per un linguaggio che si vuole proporre come alternativa a Java. La sintassi di base è molto semplice:

class Nomeclasse (eventuali parametri)
{
corpo della classe
}

Convenzionalmente il nome della classe inizia con la lettera maiuscola. Il parametro specificato nella prima riga è un costruttore primario. Vediamo un semplice esempio:

  Esempio 6.1
1
2
3
4
5
6
7
8
9
class Classe01(param : Int) {
  val x1 = param
}

fun main(args: Array<String>): Unit
{
  val cl1 = Classe01(5)
  println(cl1.x1)
}

Ovviamente la riga 1 è laddove inizia la dichiarazione della classe. La riga 7 invece è interessante in quanto si tratta della sua istanziazione. tramite la quale creiamo una variabile (in realtà introdotta da val), avente nome cl1. Differentemente da altri linguaggi l'istanziazione non prevede una keyword speciale (tipo il classico new di Java e C#). Viene passato un parametro, il numero 5 che valorizza param definito alla riga 1. Come è evidente alla riga 8, coerentemente con moltissimi altri linguaggi, abbiamo il . (punto) come operatore per muoverci all'interno delle classi selezionando i suoi elementi.
Più avanti parleremo anche degli inizializzatori anonimi.

All'interno di ogni classe sono contenuti dei membri quale ad esempio x1 definito alla riga 2 dell'esempio 6.1. Questi possono essere:

1) funzioni
2) proprietà
3) altre classi
4) dichiarazioni di "object"

1) vediamo l'esempio:

  Esempio 6.2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class Classe01(param : Int) {
  val x1 = param
  fun numero() : Int
  {
    return 3
  }
}

fun main(args: Array<String>): Unit
{
  val cl1 = Classe01(5)
  println(cl1.x1)
  var y = cl1.numero()
  println(y)
}

2) Le proprietà le abbiamo già incontrate alla riga 2 dell'esempio 6.1 ed alla 2 del 6.2 (che sono uguali). Esse sono dichiarate var se modificabili oppure val se devono essere read-only.

3) Kotlin permette alla classi di essere annidate (nested) in altre classi.

  Esempio 6.3
1
2
3
4
5
6
7
8
9
10
11
12
13
class Classe01(param : Int) {
  class Classe02() {
    fun saluta() {
      println("Sono la classe interna")
    }
  }
}

fun main(args: Array<String>): Unit
{
  val cl1 = Classe01(5)
  cl1.Classe02().saluta()
}

la classe Classe02 è interna alla Classe01 e viene richiamata insieme ad un suo metodo interno.

4) concetto da sviluppare unitamente ad altri.