Kotlin: gli array

Gli array sono una collezione di oggetti con tipo di dato simile o misto (solo quando si usa la type inference). In Kotlin gli array sono mutable con una dimensione fissa. Questo significa che è possibile sia accedere che modificare gli elementi di un array.

Gli array in Kotlin sono degli oggetti ed il costruttore prevede l’indicazione della dimensione (fissa) e della funzione di inizializzazione dell’array (init). Quest’ultima è utilizzata per attribuire dei valori iniziali agli elementi dell’array. In Kotlin abbiamo comunque molti modi per creare un array:

  • longArrayOf : permette di creare un array di interi con segno a 64 bit. Esempio di utilizzo: val myArray: LongArray = longArrayOf(5L, 10L, 20L, 30L)
  • ulongArrayOf : permette di creare un array di interi senza segno a 64 bit. Esempio di utilizzo: val myArray : ULongArray = ulongArrayOf(5UL,10UL,20UL,30UL)
  • intArrayOf : permette di creare un array di interi con segno a 32 bit. Esempio di utilizzo: val myArray : IntArray = intArrayOf(5,10,20,30)
  • uintArrayOf : permette di creare un array di interi senza segno a 32 bit. Esempio di utilizzo: val myArray : UIntArray = uintArrayOf(5U,10U,20U,30U)
  • shortArrayOf : permette di creare un array di interi con segno a 16 bit. Esempio di utilizzo: val myArray: ShortArray = shortArrayOf(5, 10, 20, 30)
  • ushortArrayOf : permette di creare un array di interi senza segno a 16 bit. Esempio di utilizzo: val myArray : UShortArray = ushortArrayOf(5U,10U,20U,30U)
  • byteArrayOf : permette di creare un array di interi con segno a 8 bit. Esempio di utilizzo: val myArray: ByteArray = byteArrayOf(5, 10, 20, 30)
  • ubyteArrayOf : permette di creare un array di interi senza segno a 8 bit. Esempio di utilizzo: val myArray : UByteArray = ubyteArrayOf(5U,10U,20U,30U)
  • charArrayOf : permette di creare un array di caratteri. Esempio di utilizzo: val myArray : CharArray = charArrayOf(‘a’,’b’,’c’,’d’)
  • booleanArrayOf : permette di creare un array di booleani. Esempio di utilizzo: val myArray : BooleanArray = booleanArrayOf(true, false, true, false)
  • arrayOf : permette di creare un array di qualsiasi tipo (anche di tipi misti) indicando esplicitamente il tipo <type> oppure utilizzando la type inference. Esempi di utilizzo: val myArray = arrayOf(5,10,20,30) oppure val myArray2 = arrayOf<String>(“gatto”,”cane”,”topo”,”pinguino”). I tipi supportati sono:
    • Number : in questo caso l’array può essere costituito da elementi di tipo misto purché siano Long, Int, Short, Byte, Double o Float,
    • ULong, Long, UInt, Int, UShort, Short, UByte, Byte, Double, Float,
    • Boolean,
    • Char,
    • String
  • arrayOfNulls(N) : permette di creare un array formato da N elementi  null.
  • costruttore specifico : è possibile creare un array utilizzando direttamente il costruttore, ed in particolare passandogli il numero di elementi N e la funzione di init (è possibile passare come funzione di init null ed in tal caso riempirà tutti gli elementi con null). Esempio di utilizzo: val myStringArray = Array(5) { i -> (i * i).toString() } . Il costruttore può essere utilizzato anche per creare array di un tipo specifico, in particolare (in questo caso la funzione init è rappresentata da un valore costante):
    • ULongArray: un array di numeri interi senza segno a 64bit. Esempio di utilizzo: ULongArray(5){3UL}
    • LongArray: un array di numeri interi con segno a 64bit. Esempio di utilizzo: LongArray(5){3L}
    • UIntArray: un array di numeri interi senza segno a 32bit. Esempio di utilizzo: UIntArray(5){3U}
    • IntArray: un array di numeri interi con segno a 32 bit. Esempio di utilizzo: IntArray(5){3}
    • UShortArray: un array di numeri interi senza segno a 16 bit. Esempio di utilizzo: UShortArray(5){3U}
    • ShortArray: un array di numeri interi con segno a 16 bit. Esempio di utilizzo: ShortArray(5){3}
    • UByteArray: un array di numeri interi senza segno a 8 bit. Esempio di utilizzo: UByteArray(5){3U}
    • ByteArray: un array di numeri interi con segno a 8 bit. Esempio di utilizzo: ByteArray(5){3}
    • DoubleArray: un array di numeri reali a 64 bit. Esempio di utilizzo: DoubleArray(5){1.24}
    • FloatArray: un array di numeri reali a 32 bit. Esempio di utilizzo: FloatArray(5){1.24f}
    • BooleanArray: un array di booleani. Esempio di utilizzo: BooleanArray(5){true}
    • CharArray: un array di caratteri. Esempio di utilizzo: CharArray(5){‘a’}
  • costruttore generico: è possibile dichiarare un array utilizzando il costruttore della classe Array passandogli il tipo e il valore di inizializzazione degli elementi nella forma val myArray = Array<Int>(5){0} che costruisce un array di 5 elementi di tipo Int, inizializzati a zero.

Ovviamente è possibile creare in Kotlin matrici, ovvero Array di Array dello stesso tipo. Esempio di utilizzo delle matrici è:

val even: IntArray = intArrayOf(2, 4, 6)
val odd: IntArray = intArrayOf(1, 3, 5)

val lala: Array<IntArray> = arrayOf(even, odd)

Per accedere ad un elemento dell’array di indice index al fine di leggerne il contenuto o modificarlo è possibile utilizzare l’operatore [index]. Nel caso in cui si acceda ad un indice più grande della dimensione dell’array viene generata un’eccezione di tipo ArrayIndexOutOfBoundException. Tra le proprietà e funzioni associate ad un Array (arr) ricordiamo le più comuni:

  • size: ritorna il numero di elementi che compone l’array. Esempio di utilizzo: arr.size
  • get: ritorna l’elemento relativo ad un determinato indice (index). Esempio di utilizzo: arr.get(index)
  • set: assegna un determinato valore (value) all’elemento associato ad un determinato indice (index). Esempio di utilizzo: arr.set(index, value)

La lista di tutte le funzioni e proprietà degli array e la loro compatibilità con le librerie comuni di Kotlin indipendenti dall’architettura (common) e quelle dipendenti dall’architettura utilizzata (native, JVM e JS) è riportata in https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-array/

Potrebbero interessarti anche...

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.