본문 바로가기
Kotlin/Kotlin 문법

안드로이드이 문법강의2편 람다식

by MonoSoft 2020. 12. 30.
728x90
반응형

package com.monosoft.monopractice

//1. Lamda
// 람다식은 우리가 마치 value 처럼 다룰 수 있는 익명함수이다.
// 1) 메소드의 파라미터로 넘겨줄수가 있다. fun maxby( a : int)
// 2) return 값으로 사용할 수가 있다.

// 람다의 기본정의
// val lamdaName : Type = {argumentList -> codeBody}
//input int를 받아서 output int를 내보내서 number int로 타입을 추론해서 리턴을 해준다.
val square : (Int) -> (Int) = {number -> number*number}

val nameAge = {name : String, age :Int -> //리턴
"my name is ${name} I'm ${age}"
}

// 확장함수
val pizzaIsGreat : String.() -> String = {
this + " Pizza is the best!"
}


//this는 함수가 가리키는 오브젝트고 it 파라메타를 가리킨다.
fun extendString(name : String, age : Int) : String {
val introduceMyself : String.(Int) -> String = { "I am ${this} and ${it} years old "}
return name.introduceMyself(age)
}

//람다의 Return
val calculateGrade : (Int) -> String = {
when(it) {
in 0..40 -> "fail"
in 41..70 -> "Pass"
in 71..100 -> "pefect"
else -> "err"
}
}

//람다를 표현하는 여러가지 방법
fun invokeLamda(lamda : (Double) -> Boolean) : Boolean {
return lamda(5.2343)
}


fun main() {
val lamda : (Double) -> Boolean = {number : Double ->
number == 4.3213
}
println(invokeLamda(lamda))
println(invokeLamda({true}))
println(invokeLamda({it > 9.22})) //it는 넣는 파라메타가 오직 하나일때 it써도 됨
println(invokeLamda { it > 3.22 })

println(calculateGrade(98))

println(square(12))
println(nameAge("kimwonho",99))

val a = "kim"
val b = "won"
println(pizzaIsGreat(a.pizzaIsGreat()))
println(pizzaIsGreat(b.pizzaIsGreat()))

println(extendString("kimwon", 27))
}

 

============================================================

 

package com.monosoft.monopractice

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.view.View
import android.widget.Button

class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)

button.setOnClickListener(object : View.OnClickListener {
override fun onClick(p0: View?) {
//to do...
}
})

//1. Kotlin interface가 아닌 자바 인터페이스여야 합니다.
//2. 그 인터페이스는 딱 하나의 메소드만 가져야 합니다.

button.setonClickListener {
//to...do
}

}
}

 

 

 

728x90
반응형

댓글