سلام و احترام
من قبلا یه راهنما(برگه تقلب) برای خودم نوشته بودم که حالا به چشمم خورد و تصمیم گرفتم براتون به اشتراک بذارم
در این راهنما انواع نوشتن functionها رو در kotlin نوشته ام که بنظر خودم خیلی بدرد مرور میخوره.
امیدوارم بدرد شما هم بخوره (سعی کردم براتون کمی خواناتر کنم و راهنما رو فارسی بنویسم )
از آسان به سخت هم به ترتیب براتون نوشته ام:
ممنون که وقت گذاشتید.
fun main() {
/**
* CheatSheet Function in Kotlin
* Examples :
*/
val a = {} //Lambda
val b = { i: Int -> println(i * 2) }
//#name #param1¶m2 #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)