CheatSheet Function in Kotlin (آموزشی)

پرسیده شده
فعالیت 1268 روز پیش
دیده شده 940 بار
9

سلام و احترام 

 

من قبلا یه راهنما(برگه تقلب) برای خودم نوشته بودم که حالا به چشمم خورد و تصمیم گرفتم براتون به اشتراک بذارم  

در این راهنما انواع نوشتن function ها رو در kotlin نوشته ام که بنظر خودم خیلی بدرد مرور میخوره.

امیدوارم بدرد شما هم بخوره (سعی کردم براتون کمی خوانا تر کنم و راهنما رو فارسی بنویسم )

از آسان به سخت هم به ترتیب براتون نوشته ام:

ممنون که وقت گذاشتید.

fun main() {
    /**
     * CheatSheet Function in Kotlin
     * Examples :
     */
    val a = {} //Lambda

    val b = { i: Int -> println(i * 2) }
    
    
    
    //#name  #param1&param2  #type return #statement 
    val c: (Int, String) -> String = { i, s -> "$i->$s" }

    val d: Int.(Int) -> String = { i: Int -> if (i % 2 == 0) "Zog" else "Fard" }

    val e = Array(10) { i -> i * 2 } // Lambda in Array 
    //-------------------------------------------------------------------------

    /*
    lambda in class !
    # Please Create Class F
    val f = F::class
    if (f.isFinal){
        println("Open")
    }else{
        println("Final")
    }*/

    //--------------------------------------------------------------------------

    val numbers = arrayListOf<Int>(1, 2, 3)

    /**
     * در کاتلین اگر متدتان یک ورودی داشت میتوانید آن را در پرانتز ننویسید مثل مثال زیر :
     */
    val g = numbers.reduce { acc, i -> acc + i }
    //println(g)
    /**
     *   در کاتلین اگر پارامتر دوم متدتان لمبدا باشد لازم نیست آن را در پرانتز بنویسید
     */
    val h = numbers.fold(1) { acc, i -> acc + i }
    //println(h)

    //---------------------------------------------------------------------------
    /**
     * انواع مختلف فانکشن نوشتن
     */
    // Function Anonymous
    val anonymousFunctionPrintName = fun(name: String): String {
        return name
    }
    // Function Lambda
    val lambdaFunctionPrintName: (name: String) -> String = { name -> name }

    // Function Old :D
    fun printName(name: String): String {
        return name
    }
    //--------------------------------------------------------------------------
    /**
     * Example Fold :
     * در زیر به روش های مختلف از فانکشن فولد استفاده شده 
     **/
    val number = arrayListOf<Int>(1, 2, 3, 4, 5, 6, 7, 8)
    // #1 lambda2
    val a1 = number.fold(10) { acc, i -> acc + i }
    // #2 lambda1
    val a2 = number.fold(10, { acc, i -> acc + i })
    // #3  anonymousFunction 1
    val a3 = number.fold(10, fun(acc: Int, i: Int): Int {
        return acc + i
    })
    // #3  anonymousFunction 2
    val a4 = number.fold(10, fun(acc: Int, i: Int) = acc + i)

    //----------------------------------------------------------------------------
    /**
     * به متد های نوشته شده خارج از بدنه fun main() مراجعه کنید . :
     */
    val count = 52
    //println(count.isEvenLambdaFunction())
    //println(count.isEven())

    //-----------------------------------------------------------------------------------------
    /**
     * call print() array
     */
    val listArray: Array<Float> = arrayOf(1.2f)
    listArray.print()
}
//----------------------------------------------------------
/**
 * کار کرد دو متد زیر یکسان هست که چک میکند عدد زوج است یا خیر
 * با این تفاوت که هر کدام به نوعی نوشته شده اند
 */
fun Int.isEven(): String = if (this % 2 == 0) "Number is Even" else "Number is Odd"
val isEvenLambdaFunction: Int.() -> String =
    { if (this % 2 == 0) "Number is Even" else "Number is Odd" }

//----------------------------------------
/**
 * add print method to Array Class (Extention func)
 */
fun Array<Float>.print() {
    this.forEach {
        println("$it")
    }
}
//-----------------------------------------
/**
 * High Order Function
 * فانکشنی که فانکشن های دیگه رو به عنوان پارامتر دارد
 */

inline fun JSONObject.wrapInTryCatchBlock(code: () -> Unit): Unit {
    try {
        code()
    } catch (jsonException: JSONException) {
        Log.e("TAG", "wrapInTryCatchBlock: ")
    }
}


//----------------------------------------------------------------------

 

 

از این قسمت خلاصه و مرتب شده همون قبلی هاست:

 

 

Parameters & Return Types
fun printName() {
    print("Adam")
}

fun printName(person: Person) {
    print(person.name)
}

fun getGreeting(person: Person): String {
    return "Hello, ${person.name}"
}

fun getGreeting(person: Person): String = "Hello, ${person.name}"
fun getGreeting(person: Person) = "Hello, ${person.name}"
Higher Order Functions
fun callbackIfTrue(condition: Boolean, callback: () -> Unit) {
    if (condition) {
        callback()
    }
}

callbackIfTrue(someBoolean) {
    print("Condition was true")
}
Extension Functions
fun Int.timesTwo(): Int {
    return this * 2
}

val four = 2.timesTwo()
Default Parameters
fun getGreeting(person: Person, intro: String = "Hello,") {
    return "$intro ${person.name}"
}

// Returns "Hello, Adam"
val hello = getGreeting(Person("Adam"))

// Returns "Welcome, Adam"
val welcome = getGreeting(Person("Adam"), "Welcome,")
Named Parameters
class Person(val name: String = "", age: Int = 0)

// All valid
val person = Person()
val person = Person("Adam", 100)
val person = Person(name = "Adam", age = 100)
val person = Person(age = 100)
val person = Person(age = 100, name = "Adam")
Static Functions
class Fragment(val args: Bundle) {
    companion object {
        fun newInstance(args: Bundle): Fragment {
            return Fragment(args)
        }
    }
}

val fragment = Fragment.newInstance(args)

 

فایل پیوست

پوریا شفیعی
پوریا شفیعی

22 آبان 99

جلسه High Order Functions, Extension Functions and Inline Functions in Kotlin