β μ΅λͺ ν¨μ β == λλ€(Lambda)
μ΅λͺ ν¨μ μ μ == λλ€ ννμ == λλ€μ
μ΅λͺ ν¨μ λ°ν κ²°κ³Ό -- λλ€ κ²°κ³Ό
μ΅λͺ ν¨μλ λ€λ₯Έ ν¨μμ μΈμλ‘ μ½κ² μ λ¬λ μ μλ€.
// λ©μΈ ν¨μ λ΄λΆμμ μ΅λͺ
ν¨μλ₯Ό μ μνκ³ νΈμΆνλ€.
// μ΅λͺ
ν¨μλ { μ } μ¬μ΄μ ννμμ΄λ λͺ
λ Ήλ¬Έμ λ£μ΄ μμ±νλ€.
// μ΅λͺ
ν¨μ } λ€μμ ()λ₯Ό μ¬μ©νμ¬ νΈμΆνλ€. - () λΉΌλ©΄ λ¬Έμμ΄ μΆλ ₯ μλ¨
// - μ΄λ¦μ΄ μλ ν¨μμ²λΌ μ΅λͺ
ν¨μλ μΈμλ₯Ό μ§μ νλ κ΄νΈλ₯Ό μ¬μ©ν΄μ νΈμΆλ λλ§ λμνκΈ° λλ¬Έμ΄λ€.
// (μλ μμ μμ μΈμκ° μμΌλκΉ λΉ κ΄νΈ)
fun main() {
println(
{
val currentYear = 2021
"SimVillage λ°©λ¬Έμ νμν©λλ€. (copyright $currentYear)"
}())
}
μ΅λͺ ν¨μλ Int, String κ³Ό κ°μ νμ μ κ°μ§λ€. == ν¨μ νμ
ν¨μ νμ μ λ³μλ€μ κ°μΌλ‘ μ΅λͺ ν¨μλ₯Ό μ μ₯ν΄μ, λ€λ₯Έ λ³μμ²λΌ μ΅λͺ ν¨μκ° μ½λ μ΄λλ μ λ¬ κ°λ₯νλ€.
μμμ λ°ν
: return ν€μλκ° μλ€λ κ²μ ν΅ν΄ μ μ μλ€. μ΄λ¦μ΄ μλ ν¨μμ λ€λ₯΄κ² μ΅λͺ ν¨μλ λ°μ΄ν°λ₯Ό λ°ννκΈ° μν return ν€μλκ° νμ μλ€. μ΅λͺ ν¨μλ μμμ μΌλ‘ λλ μλμΌλ‘ ν¨μ μ μμ λ§μ§λ§ μ½λ κ²°κ³Όλ₯Ό λ°ννλ€.
: return ν€μλ μ¬μ©μ κΈμ§λμ΄μμΌλ©΄μ, μ΅λͺ ν¨μμ μ μλ₯Ό κ°νΈνκ² ν΄μ£Όκ³ νμμ μ΄λ€. WHy ? μ΅λͺ ν¨μμ λ¦¬ν΄ ν€μλκ° μμ λλ μ΄λ€ κ³³μΌλ‘ μ μ΄κ° 볡κ·λμ΄μΌ νλμ§ μ»΄νμΌλ¬κ° μ μ μκΈ° λλ¬Έ. (μ΅λͺ ν¨μλ μ΅λͺ ν΄λμ€ μΈμ€ν΄μ€λ‘ μμ±λ¨)
// μ΅λͺ
ν¨μλ₯Ό μ μ₯νλ λ³μλ₯Ό μ μνκ³ println μμ νΈμΆν΄λ³΄μ
// μ΅λͺ
ν¨μ μ μ₯νλ λ³μλ λ³μμ΄λ¦ λ€μμ : κ³Ό ν¨μ νμ
μ μ§μ νμ¬ μ μΈν μ μλ€.
// greetingFunction: () -> String
fun main() {
val greetingFunction: () -> String =
{
val currentYear = 2019
"SimVillage λ°©λ¬Έ νμ! (copyright $currentYear)"
}
println(greetingFunction())
}
ν¨μμΈμ - μ΅λͺ ν¨μλ μ΄λ€ νμ μ μΈμλ λ°μ μ μλ€. / μ΅λͺ ν¨μμ 맀κ°λ³μ νμ μ ν¨μ νμ μ μμ μ§μ νλ©° 맀κ°λ³μ μ΄λ¦μ ν¨μ λ΄λΆμ μ§μ νλ€.
// κ²μ νλ μ΄μ΄μ μ΄λ¦μ μΈμλ‘ λ°λλ‘ greetingFunction λ³μ μ μΈμ λ³κ²½ν΄ 보μ
fun main() {
val greetingFunction: (String) -> String =
{
playerName ->
// μ ( ) μμ String μ΄ μμ΄μ μ΄ μ΅λͺ
ν¨μκ° String μΈμλ₯Ό λ°λλ€λ κ²μ μ μ μλ€.
// μΈμ λ§€κ° λ³μ "playerName"μ { λ°λ‘ λ€μμ μ΄λ¦κ³Ό νμ΄νλ₯Ό μ§μ νμ¬ μ¬μ©νλ€.
val currentYear = 2019
"SimVillage λ°©λ¬Έ νμ! $playerName λ! (copyright $currentYear)"
}
println(greetingFunction("μ‘"))
}
* count ν¨μλ (Char) -> Boolean / Char νμ μ μΈμλ₯Ό λ°μμ Boolean νμ μ κ°μ λ°ννλ€. μ΅λͺ ν¨μλ μ½νλ¦° νμ€ λΌμ΄λΈλ¬λ¦¬μ μλ λλΆλΆ ν¨μλ₯Ό ꡬννλλ° μ¬μ©λλ―λ‘ μ΅μν΄μ ΈμΌ νλ€.
It ν€μλ : νλμ μΈμλ§ λ°μ λΌ, 맀κ°λ³μ μ΄λ¦ μ§μ λμ it ν€μλλ₯Ό μ¬μ©νλ€.(λ κ° μ΄μμΌ λλ it ν€μλ μ¬μ© λΆκ°)
β 볡μ‘ν μ΅λͺ ν¨μ μ΄κ±°λ, μ€μ²©λ μ΅λͺ ν¨μ μΌλλ λ§€κ° λ³μλ₯Ό μ§μ νλλ° μ½λ νμ μ μ©μ΄ νλ€.
// it μ μ¬μ©ν΄λ³΄μ.
fun main() {
val greetingFunction: (String) -> String =
{
val currentYear = 2019
"SimVillage λ°©λ¬Έ νμ! ${it}λ! (copyright ${currentYear})"
}
println(greetingFunction("μ‘"))
}
λ€μμ μΈμ λ°κΈ°
// λ€μμ μΈμλ₯Ό λ°μ 보μ.
fun main() {
val greetingFunction: (String,Int) -> String =
{
PlayerName, numBuildings ->
val currentYear = 2019
println("${numBuildings}κ°μ κ±΄λ¬Όμ΄ μΆκ° λμμ΄μ~!")
"SimVillage λ°©λ¬Έ νμ! ${PlayerName}λ! (copyright ${currentYear})"
}
println(greetingFunction("μ‘",15))
}
μ΅λͺ ν¨μλ νμ μΆλ‘ μ μ§μνλ€.
// κ° λ§€κ° λ³μ νμ
μ μΆλ‘ ν μ μλλ‘ λ³κ²½ν΄λ³΄μ
// (String,Int) -> String μλ΅
// PlayerName : String,numBuildings : Int ->
// μμ κ°μ΄ μ§μ νμ¬μ νμ
μΆλ‘ μ΄ κ°λ₯νκ² ν¨.
fun main() {
val greetingFunction = {
PlayerName : String,numBuildings : Int ->
val currentYear = 2019
println("${numBuildings}κ°μ κ±΄λ¬Όμ΄ μΆκ° λμμ΄μ~!")
"SimVillage λ°©λ¬Έ νμ! ${PlayerName}λ! (copyright ${currentYear})"
}
println(greetingFunction("μ‘",15))
}
ν¨μλ₯Ό μΈμλ‘ λ°λ ν¨μ
// ν¨μλ₯Ό μΈμλ‘ λ°λ ν¨μ
fun main() {
val greetingFunction = {
PlayerName : String,numBuildings : Int ->
val currentYear = 2019
println("${numBuildings}κ°μ κ±΄λ¬Όμ΄ μΆκ° λμμ΄μ~!")
"SimVillage λ°©λ¬Έ νμ! ${PlayerName}λ! (copyright ${currentYear})"
}
runSimulation("μ‘",greetingFunction)
}
fun runSimulation(playerName: String , greetingFuction: (String, Int) -> String)
{
val numBuildings = (1..10).shuffled().last() // 1 ~ 10 μ€ λ¬΄μμ μ ν
println(greetingFuction(playerName,numBuildings))
}
λ¨μΆ λ¬Έλ²
// runSimulation μ λ¨μΆ λ¬Έλ² μ¬μ©νκΈ°
// λλ€λ₯Ό λ³μμ μ§μ νμ§ μκ³ runSimulation ν¨μλ₯Ό νΈμΆν λ μ§μ μ λ¬ νλ―λ‘ λλ€ λ§€κ°λ³μ νμ
μ μ§μ ν νμ μλ€.
fun main() {
runSimulation("μ‘")
{
PlayerName, numBuildings ->
val currentYear = 2019
println("${numBuildings}κ°μ κ±΄λ¬Όμ΄ μΆκ° λμμ΄μ~!")
"SimVillage λ°©λ¬Έ νμ! ${PlayerName}λ! (copyright ${currentYear})"
}
}
fun runSimulation(playerName: String , greetingFuction: (String, Int) -> String)
{
val numBuildings = (1..10).shuffled().last() // 1 ~ 10 μ€ λ¬΄μμ μ ν
println(greetingFuction(playerName,numBuildings))
}
λλ€λ₯Ό μ μμ JVMμμ κ°μ²΄λ‘ μμ±. JVM λλ€λ₯Ό μ¬μ©νλ λͺ¨λ λ³μμ λ©λͺ¨λ¦¬ ν λΉ μνλλ―λ‘ λ©λͺ¨λ¦¬ λ§μ΄ μ¬μ©
→ λλ€λ μ±λ₯μ μν₯μ μ€ μ μλ λ©λͺ¨λ¦¬ λΆλ΄μ μ΄λν μ μμ
→ μ½νλ¦°μμλ λ€λ₯Έ ν¨μμ μΈμλ‘ λλ€λ₯Ό μ¬μ©ν λ λΆλ΄μ μμ¨ μ μλ μΈλΌμΈ μ΄λΌλ μ΅μ ν λ°©λ²μ μ 곡ν¨.
ν¨μ μμ inlineμ λΆμΈλ€.
→ νΈμΆλ λ λλ€κ° κ°μ²΄λ‘ μ λ¬ μλ¨.
inline fun runSimulation(playerName: String , greetingFuction: (String, Int) -> String)
{
val numBuildings = (1..10).shuffled().last() // 1 ~ 10 μ€ λ¬΄μμ μ ν
println(greetingFuction(playerName,numBuildings))
}
ν¨μ μ°Έμ‘° - λλ€ μΈμ ν¨μ μΈμ μ λ¬ : μ΄λ¦μ΄ μλ ν¨μκ° μΈμλ‘ μ λ¬λ μ μκ² ν΄μ€.
:: μ°μ°μλ₯Ό μ¬μ©νλ€.
// runSimulation μ λ¨μΆ λ¬Έλ² μ¬μ©νκΈ°
// λλ€λ₯Ό λ³μμ μ§μ νμ§ μκ³ runSimulation ν¨μλ₯Ό νΈμΆν λ μ§μ μ λ¬ νλ―λ‘ λλ€ λ§€κ°λ³μ νμ
μ μ§μ ν νμ μλ€.
fun main() {
runSimulation("μ‘", ::printConstructionCost)
{
PlayerName, numBuildings ->
val currentYear = 2019
println("${numBuildings}κ°μ κ±΄λ¬Όμ΄ μΆκ° λμμ΄μ~!")
"SimVillage λ°©λ¬Έ νμ! ${PlayerName}λ! (copyright ${currentYear})"
}
}
// constPrinter λΌλ ν¨μ μ°Έμ‘° 맀κ°λ³μλ₯Ό μΆκ°νκ³ , runSimulation λ΄λΆμμ μ΄ λ§€κ° λ³μ«κ° μ¬μ©ν΄μ 건물 건μΆλΉ μΆλ ₯νλλ‘
inline fun runSimulation(playerName: String ,
costPrinter:(Int) -> Unit,
greetingFuction: (String, Int) -> String) {
val numBuildings = (1..10).shuffled().last() // 1 ~ 10 μ€ λ¬΄μμ μ ν
println(greetingFuction(playerName,numBuildings))
}
// ν¨μ μ°Έμ‘°λ₯Ό μν΄
fun printConstructionCost(numBuildings : Int)
{
val cost = 500
println("κ±΄μΆ λΉμ© : ${cost*numBuildings}")
}
λ°ννμ μΌλ‘ ν¨μ νμ μ μ¬μ©ν μ μλ€.
fun main() {
runSimulation()
}
fun runSimulation()
{
val greetingFunction = configureGreetingFunction()
println(greetingFunction("μ‘"))
}
fun configureGreetingFunction(): (String) -> String
{
val structureType = "λ³μ"
var numBuildings = 5
// λλ€λ₯Ό λ°ννκ³ μμ
return {
playerName: String ->
val currentYear = 2019
numBuildings +=1
println("$numBuildings μ±μ $structureType μ΄ μΆκ°λ¨")
"SimVillage λ°©λ¬Έ νμ, $playerName! (copyright $currentYear)"
}
}
ν΄λ‘μ
'Kotlin' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
Kotlin_Map / Class (0) | 2021.07.01 |
---|---|
Kotlin - Scope ν¨μ & Listμ Set (0) | 2021.06.30 |
Kotlin_Null & λ¬Έμμ΄ & μ«μ νμ (2) | 2021.06.30 |
Navigation - jetpack / kotlin xml μμ μ°Έμ‘° / μμ μ°Έκ³ - Kotlin κΈ°λ³Έ λ¬Έλ² κ³΅λΆ μΌμ§ (0) | 2021.06.29 |
Kotlin κΈ°λ³Έ λ¬Έλ² - Intro ( κΉμ΄ λ€λ£¨μ§ μμ!) (0) | 2021.06.28 |
λκΈ