π€ν¨μ
fun ν¨μμ΄λ¦ ([λ³μ μ΄λ¦: μλ£ν]): [λ°νκ°μ μλ£ν] {
ννμ
[return λ°νκ°]
}
- κ°λ³ μΈμ: μΈμμ κ°μκ° λ³νλ€
fun ν¨μμ΄λ¦ (vararg [λ³μ μ΄λ¦: μλ£ν]): [λ°νκ°μ μλ£ν] {
ννμ
[return λ°νκ°]
}
π€μ½νλ¦° == λ€μ€ ν¨λ¬λ€μ μΈμ΄
1) ν¨μν νλ‘κ·Έλλ°: μ½λ κ°λ΅, ν μ€νΈλ μ¬μ¬μ©μ± μ¦κ°, λλ€μ, κ³ μ°¨ ν¨μλ₯Ό μ¬μ©ν΄ ꡬμ±, μμ ν¨μ
2) κ°μ²΄ μ§ν₯ νλ‘κ·Έλλ°
π€μμ ν¨μ
λΆμμ©(side-effect)μ΄ μλ ν¨μ
-> λμΌν μ λ ₯ μΈμμ λν΄μλ νμ κ°μ κ²°κ³Όλ₯Ό μΆλ ₯, λ°νν¨
-> κ°μ΄ μμΈ‘ κ°λ₯νμ¬ κ²°μ μ
쑰건
-> κ°μ μΈμμ λνμ¬ νμ κ°μ κ°μ λ°ν
-> ν¨μ μΈλΆμ μ΄λ€ μνλ λ°κΎΈμ§ μμ
μ₯μ
-> μ λ ₯, λ΄μ©μ λΆλ¦¬νκ³ λͺ¨λν νμ¬ μ¬μ¬μ©μ±μ΄ λμμ§
-> νΉμ μνμ μν₯ μ£Όμ§ μμ -> λ³ν μμ μ μμ
-> ν¨μμ κ° μΆμ , μμΈ‘ κ°λ₯ -> ν μ€νΈ, λλ²κΉ μ 리
ν¨μν νλ‘κ·Έλλ°μ μ μ©
-> ν¨μλ₯Ό 맀κ°λ³μ, μΈμμ νΉμΈ λ°ν κ°μ μ μ© (κ³ μ°¨ ν¨μ)
-> ν¨μλ₯Ό λ³μλ λ°μ΄ν° ꡬ쑰μ μ μ₯
-> μ μ°μ± μ¦κ°
π€λλ€μ
- μ΅λͺ ν¨μμ νλμ ννλ‘ μ΄λ¦ μμ΄ μ¬μ© λ° μ€νμ΄ κ°λ₯
- λλ€ λμλ‘λΆν° μ λ
μ΄μ©
-> λλ€μμ κ³ μ°¨ ν¨μμμ μΈμλ‘ λκΈ°κ±°λ κ²°κ³Όκ°μΌλ‘ λ°ν λ±μ ν μ μμ
//μΌλ° λ³μμ λλ€μ ν λΉ
// 1
val multi={a:Int, b:Int -> a*b}
// 2
val multi:(a:Int, b:Int) -> Int = {a,b -> a*b}
result=multi(a:10, b:20) //λλ€μμ΄ ν λΉλ λ³μλ ν¨μμ²λΌ μ¬μ© κ°λ₯
- 맀κ°λ³μ κ°μμ λ°λΌ λλ€μμ ꡬμ±νλ λ°©λ²
fun main(){
//맀κ°λ³μ μλ λλ€μ ν¨μ
noParam({"Hello World!"})
noParam {"Hello World!"} //μμ λμΌ κ²°κ³Ό, μκ΄νΈ μλ΅ κ°λ₯
//맀κ°λ³μκ° νλ μλ λλ€μ ν¨μ
oneParam ({a->"Hello World! $a"})
oneParam {a->"Hello World! $a"} //μμ λμΌ κ²°κ³Ό, μκ΄νΈ μλ΅ κ°λ₯
oneParam {"Hello World! $it"} //μμ λμΌ κ²°κ³Ό, itμΌλ‘ λ체 κ°λ₯
//맀κ°λ³μκ° λ κ° μλ λλ€μ ν¨μ
moreParam {a,b -> "Hello World! $a $b"} //맀κ°λ³μλͺ
μλ΅ λΆκ°
//맀κ°λ³μλ₯Ό μλ΅νλ κ²½μ°
moreParam {_, b -> "Hello World! $b"} //첫 λ²μ§Έ λ¬Έμμ΄μ μ¬μ©νμ§ μκ³ μλ΅
}
//맀κ°λ³μκ° μλ λλ€μ ν¨μκ° noParam ν¨μμ 맀κ°λ³μ out μΌλ‘ μ§μ λ¨
fun noParam(out:()->String)=println(out())
//맀κ°λ³μκ° νλ μλ λλ€μ ν¨μκ° oneParamν¨μμ 맀κ°λ³μ outμΌλ‘ μ§μ λ¨
fun oneParam(out: (String) -> String) {
println(out("OneParam"))
}
//맀κ°λ³μκ° λ κ° μλ λλ€μ ν¨μκ° moreParam ν¨μμ 맀κ°λ³μλ‘ μ§μ λ¨
fun moreParam(out: (String,String) -> String) {
println(out("OneParam","TwoParam"))
}
π€μΌκΈ κ°μ²΄
- ν¨μμ μΈμλ‘ μ λ¬ν μ μμ
- ν¨μμ λ°ν κ°μ μ¬μ© κ°λ₯
- λ³μμ λ΄μ μ μμ
-> μ½νλ¦°μμ ν¨μλ μΌκΈ κ°μ²΄λ‘ λ€λ£Έ
π€κ³ μ°¨ ν¨μ
fun main() {
println(highFunc( {x,y -> x+y }, 10, 20) ) //λλ€μ ν¨μλ₯Ό μΈμλ‘ λκΉ
}
fun highFunc( sum: (Int, Int) -> Int, a: Int, b: Int): Int = sum(a,b) //sum 맀κ°λ³μλ ν¨μ
π€μ΅λͺ ν¨μ
- ν¨μκ° μ΄λ¦μ΄ μλ κ²
- λλ€μλ μΌμ’ μ μ΅λͺ ν¨μ
- μΌλ° μ΅λͺ ν¨μμμλ return, break continueκ° μ¬μ© κ°λ₯νμ§λ§, λλ€μμμλ μ¬μ©νκΈ° μ΄λ €μ
fun (x: Int, y:Int): Int= x+y //ν¨μ μ΄λ¦μ΄ μλ΅λ μ΅λͺ
ν¨μ
val add: (Int, Int) -> Int=fun(x,y)=x+y //μ΅λͺ
ν¨μλ₯Ό μ¬μ©ν add μ μΈ
val result=add(10,2) //addμ μ¬μ©
π€μΈλΌμΈ ν¨μ
- ν¨μκ° νΈμΆλλ κ³³μ λ΄μ©μ λͺ¨λ 볡μ¬
- ν¨μμ λΆκΈ° μμ΄ μ²λ¦¬ -> μ±λ₯ μ¦κ°
- λ¨μ : μ½λκ° λ³΅μ¬λλ―λ‘ λ΄μ©μ΄ λ§μ ν¨μμ μ¬μ©νλ©΄ μ½λκ° λμ΄λ¨
- noinline ν€μλ: μΌλΆ λλ€μ ν¨μλ₯Ό μΈλΌμΈ λμ§ μκ² νκΈ° μν΄
inline fun sub (out1: () -> Unit, noinline out2: () -> Unit) {
π€νμ₯ ν¨μ
- ν΄λμ€μ λ©€λ² ν¨μλ₯Ό μΈλΆμμ λ μΆκ°ν μ μλ€.
- κΈ°μ‘΄μ νμ€ λΌμ΄λΈλ¬λ¦¬λ₯Ό μμ νμ§ μκ³ λ νμ₯ κ°λ₯
fun νμ₯λμ.ν¨μλͺ
(맀κ°λ³μ, ...): λ°νκ°{
...
retrun κ°
}
π€μ€μ ν¨μ
- μ€μ ννλ²: ν΄λμ€μ λ©€λ² νΈμΆ μ μ¬μ©νλ μ (.)μ μλ΅νκ³ ν¨μ μ΄λ¦ λ€μ μκ΄νΈλ₯Ό μλ΅ν΄ μ§κ΄μ μΈ μ΄λ¦μ μ¬μ©ν μ μλ ννλ²
- μ€μ ν¨μμ 쑰건
-> λ©€λ² λ©μλ λλ νμ₯ ν¨μμ¬μΌ νλ€.
-> νλμ 맀κ°λ³μλ₯Ό κ°μ ΈμΌ νλ€.
-> infix ν€μλλ₯Ό μ¬μ©νμ¬ μ μνλ€.
fun main(){
//μ€μ ννλ²
val multi=3 multiply 10
println("multi: $multi")
}
//Int νμ₯ν΄μ multiply() ν¨μκ° νλ λ μΆκ°λμμ
infix fun Int.multiply(x:Int): Int{ //infixλ‘ μ μΈλλ―λ‘ μ€μ ν¨μ
return this*x
}
π€κΌ¬λ¦¬ μ¬κ· ν¨μ
- μ¬κ·: μκΈ° μμ μ λ€μ μ°Έμ‘°/ μ¬κ· ν¨μλ μκΈ° μμ μ κ³μ νΈμΆνλ νΉμ§
-꼬리 μ¬κ· ν¨μ
-> μ€νμ κ³μ μμ΄λ λ°©μμ΄ ν¨μκ° κ³μ μμμ§λ 꼬리λ₯Ό 무λ νν
-> μ½νλ¦° κ³ μ μ tailrec ν€μλλ₯Ό μ¬μ©ν΄ μ μΈ
#꼬리 μ¬κ· - μ€νμ μ¬μ©νμ§ μμ
fun main() {
val number=5
println("Factorial: $number -> ${factorial(number)}")
}
tailrec fun factorial(n: Int, run: Int=1): Long {
return if (n==1) run.toLong() else factorial(n-1, run*n)
}
π€ν¨μμ μ€ν λΈλ‘
- ν¨μμ λΈλ‘({}): λΈλ‘ λ΄μμ μ¬μ©νλ λ³μ - μ§μ λ³μ
- μ΅μμ λ° μ§μ ν¨μ μ¬μ© λ²μ
-> μ΅μμ ν¨μλ main() ν¨μ μ , ν μ΄λλ μ μΈνκ³ μ½λ λ΄μμ νΈμΆ κ°λ₯
-> μ§μ ν¨μλ λ¨Όμ μ μΈλμ΄μΌ κ·Έ ν¨μλ₯Ό νΈμΆν μ μμ
- μ μ λ³μ
-> μ΅μμμ μλ λ³μλ‘ νλ‘κ·Έλ¨μ΄ μ€νλλ λμ μμ λμ§ μκ³ λ©λͺ¨λ¦¬μ μ μ§
-> μ¬λ¬ μμκ° λμμ μ κ·Όνλ κ²½μ°μ μλͺ»λ λμμ μ λ° κ°λ₯
-> μμ£Ό μ¬μ©λμ§ μλ μ μ λ³μλ λ©λͺ¨λ¦¬ μμ λλΉ
- μ§μλ³μ
-> νΉμ μ½λ λΈλ‘ λ΄μμλ§ μ¬μ©
-> λΈλ‘ μμ μ μμλ‘ μ¬μ©λλ©° μ£Όλ‘ μ€ν λ©λͺ¨λ¦¬λ₯Ό μ¬μ©
μΆμ²) www.boostcourse.org/mo132
'πCoding > πKotlin' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
04. νλ‘κ·Έλ¨ νλ¦μ μ μ΄ (0) | 2021.04.16 |
---|---|
02. λ³μμ μλ£ν, μ°μ°μ (0) | 2021.04.01 |
01. Kotlinμ΄λ (0) | 2021.03.27 |
00. Kotlinπ (0) | 2021.03.27 |