Aina kuu mbii za function:

Function unaweza kuziweka kwenye makundi makuu mawili ambayo ni:

  1. User defined function:

Hizi ni zile ambazo unazitengeneza mwenyewe. Kama tulivyoona somo lililopita jinsi ya kutengeneza function.

  1. Built in function 

Hizi ni zile ambazo zimekuja na lugha yenyewe. Mfano function ya ku print text print() na nyinginezo ambazo zipo ila hujazitengeneza wewe.


 

Aina za function ya kuangalia parameter na return type:

Kawakuwa tumesha jifunza mengi kuhusu function na parameter sasa hapa nakwend akukuletea aina za function ambazo zipo:

 

Aina za function

  1. Function ambazo hazina parameter wala return

Mfano:

fun salamu() {

    print("habari ya muda huu ")

}

 

fun main() {

    salamu()

}

 

 

  1. Function zenye parameter ila hazina return

Mfano:

fun jumlisha(x: Int, y: Int) {

   println(x + y)

}

 

fun main() {

   jumlisha(4, 9)

}

 

  1. Function zenye return ila hazima parameter

fun jumlisha(): Int {

   val x = 4

   val y = 6

   return x + y

}

 

fun main() {

   print(jumlisha())

}

 

  1. Function ambazo zina parameter na return

fun eneo(ur: Int, up: Int): Int {

   return ur * up

}

 

fun main() {

   print(eneo(6, 8))

}

 

 

 

Function ambayo haina jina

Tulishaona kuwa function inatakiwa iwe na jina. Sasa kuna function ambayo yenyewe haina jina ila inaweza kubeba parameter. Function hii inatambulika kama anonymous function  nameless function. Yenyewe inaweza kuwa katika mtindo huu:-

(parameter){

Code

}

 

Mfano:

fun main() {

   val jumlisha = fun(x: Int, y: Int): Int {

       return x + y

   }

 

   println(jumlisha(4, 6))

}

 

Ukiangalia hapo utaona kuwa function yetu haina jina, lakini tumeweza kuitumia kwa kutumia variable.


 

Lambda function 

Huu ni mfuo wa kuandika function  kwa ufupi kw akutumia arrow yaani mshale ( -> ) function hii huitwa arrow function wacha tuone mfano hapo chini. 

Lambda ambayo haina jina:

fun main() {

   val jumlisha: (Int, Int) -> Int = { x, y -> x + y }

 

   println(jumlisha(4, 6))

}

Hapo utapata jibu 10.

fun main() {

    val salamu: () -> Unit = {

        print("salamu sana Mteja")

    }

 

    salamu()

}

 


 

Tunakwenda kutengeneza program kwa ajili ya kubadili mita kuwa kilopita. 

 

Kanuni za kihesabu zinasema kilomita moja ni sawa na mita 1000. Hiyo ili tubadili mita kuwa kilomita itatubidi tugawanye kwa 1000.

 

fun badili(mita: Double): Double {

   return mita / 1000

}

 

fun main() {

   println("andika Mita")

   val mita = readLine()?.toDoubleOrNull() ?: 0.0

 

   if (mita != null) {

       println(badili(mita))

   } else {

       println("weka namba")

   }

}

 

 

Sasa tunakwenda kuibadili function yetu kuwa katika mtindo wa lambda function.

Kanuni

functionName(parameters...) -> expression;

fun main() {

   val badili: (Double) -> Double = { mita -> mita / 1000 }

 

   println("andika Mita")

   val mita = readLine()?.toDoubleOrNull() ?: 0.0

 

   if (mita != null) {

       println(badili(mita))

   } else {

       println("Andika namba")

   }

}

 

 

Nadharia ya scope kwenye Kotlint:

Tunapozungumzia scope tunamaanisha ni wapi variable, function ama object inaweza kutumiwa. Hapa tutaangalia hasa scope kwenye function. Unapotengeneza variable ndni ya function inatakiwa itumike ndani ya function na sio nje. Lakini variable ikiwa juu kabisha na ni nje ya function basi inaweza kutumiak popote kuelekea chini.

 

Angalia mfano wa hapo chini, variable zote zimetengenezwa ndani ya function hivyo hazitaweza kutumika nje ya function. Angalia hapo chini  imejaribu kutumia variable swahili nje ya function nimepata error

fun main() {

   fun salamu(){

       val eng = "how are you"

       val swahili = "hujambo"

 

       println(eng)

       println(swahili)

   }

 

   println(swahili)

}

 

Ili kutatuwa tatizo hilo njia ya kwanza ambayo ni rahisi ni kuiweka variable juu kabisa nje ya function. Hivyo variable yako itakuwa ni globe.

fun main() {

   val eng = "how are you"

   val swahili = "hujambo"

   fun salamu(){

       println(eng)

       println(swahili)

   }

 

   println(swahili)

}

 

Recursive  Functions

Hii ni aina nyingine ya function ambapo function itajiita yenyewe kwa kujirudia rudia  mpaka matokeo yatakapopatikana. Chukulia mfano unataka kutafuta factorial numba. Hili ni zao la namba ukizidisha na namba zote ambazo ndogo kuliko nmaba hiyo mpaka kufikia moja. Mfano tunaposema factorial number ya 5 ni sawa na kusema 5*4*3*2*1 mbapo ukizidisha hapo utapata 120. Au factorial namba ya 3 ni 3*2*1 ambapo ni sawa na 6.

Sasa kama tutataka kutengeneza functon kwa ajili ya kutafuta factorial number itabidi functon hii ijiite yenyewe mpaka pale jibu litakapopatikana.

fun main() {

   println(factorial(5))

}

 

fun factorial(number: Int): Int {

   return if (number <= 0) {

       1

   } else {

       number * factorial(number - 1)

   }

}

 

Ikiangalia hapo utaona ndani ya function jina la function limetumika kuiita function number * factorial(number - 1)

 

Main function

Hii ni function kuu ambayo inatumika kama entrypoint ya program. Yaani pale ambapo program itaanzia kazi yake. Mfano main(){}

 

fun main() {

   println("bongoclass")

}

 

 

Mwisho:

Katika somo linalofuata tutakwend akujifunz akuhusu parameter zinavyoweza kutumika kwenye function.