Setelah deklarasi generic pada sebuah kelas, apa berikutnya? Kita akan belajar bagaimana mendeklarasikan generic pada sebuah fungsi. Generic pada sebuah fungsi dibutuhkan ketika kita membuat sebuah fungsi yang berhubungan dengan List. Misalnya, list yang dapat digunakan untuk berbagai tipe dan tidak terpaku pada tipe tertentu.

Fungsi generic memiliki tipe parameternya sendiri. Tipe argumen dari parameternya ditentukan ketika fungsi tersebut dipanggil. Cara mendeklarasikannya sedikit berbeda dengan kelas generic, Tipe parameter yang berada di dalam angle bracket harus ditempatkan sebelum nama dari fungsi yang kita tentukan. Sebagai contoh:

1. fun <T> run(): T { 2.     /*...*/ 3. }

Contoh penerapan fungsi generic bisa kita lihat pada deklarasi fungsi slice yang merupakan extensions function dari kelas List berikut:

1. public fun <T> List<T>.slice(indices: Iterable<Int>): List<T> { 2.     /*...*/ 3. }

Tipe parameter pada fungsi slice() di atas digunakan sebagai receiver dan return type. Ketika fungsi tersebut dipanggil dari sebuah List dengan tipe tertentu, kita bisa menentukan tipe argumennya secara spesifik seperti berikut:

1. fun main() { 2.     val numbers = (1..100).toList() 3.     print(numbers.slice<Int>(1..10)) 4. } 5.   6. /* 7.    output : [2, 3, 4, 5, 6, 7, 8, 9, 10, 11] 8. */

Seperti yang telah disebutkan sebelumnya, jika semua nilai yang berada di dalamnya memiliki tipe yang sama, kita bisa menyederhanakan. Caranya, hapus tipe parameter tersebut.

1. fun main() { 2.     val numbers = (1..100).toList() 3.     print(numbers.slice(1..10)) 4. } 5.   6. /* 7.    output : [2, 3, 4, 5, 6, 7, 8, 9, 10, 11] 8. */