show()
-----------------
fun show(){
println("show function")
println()
}
//파라미터 전달
output(100, false)
-----------------
fun output(a:Int, b:Boolean){ //파라미터에 var이나 val키워드 사용 불가
println(a)
println()
}
var z:Int =sum(50,30)
println("Sum함수 결과값 : $z")
-----------------
fun sum(a:Int, b:Int):Int{
return a+b
}
리턴이 없는 함수는 void가 아니라 Unit 자료형 객체 가 받음
var x = display()
println(x) //kotlin.Unit
-----------------
fun display(){
println("display")
}
val data3 = getData3(5)
println(data3)
val data4 = getData4(45)
println(data4)
------------------------------
// getData()의 단순화 표현
fun getData2(): String = "Hello"
fun getData(): String{
return "Hello"
}
//조금더 복잡한 리턴값 가진 함수 단순화 (getData3 단순화)
fun getData4( num:Int ): String = if (num < 10) "Good" else "BAD"
fun getData3( num:Int ): String{
if (num < 10) return "Good"
else return "Bad"
}
bbb() //변수를 함수처럼 호출
------------------
var bbb = fun(){
println("익명함수")
}
ccc() //함수의 자료형 (파리미터) -> 리턴타입 으로 명시된 변수로 함수 호출
---------------------------
var ccc: ()->Unit = fun (){
println("익명함수2")
}
bbb() //익명함수를 가진 변수는 함수처럼 호출 할 수 있다
ccc() //함수의 자료형 (파리미터) -> 리턴타입 으로 명시된 변수로 함수 호출
ddd2() //익명함수 축약
eee() // 익명함수 축약형의 자료추론
--------------------
//1)
var ddd:()->Unit = fun(){
println("익명함수3")
}
//2) fun() 생략
var ddd2:()->Unit = {
println("익명함수4")
}
//3) 자료형 & fun() 생략
//익명함수의 자료형 자동추론가능
var eee = {
println("익명함수5")
}
fff("nice")
--------------------
val fff = fun(s:String){
println("글자수 : ${s.length}")
}
ggg("aaaaaaaa")
--------------------------
val ggg:(String) -> Unit = fun(s:String){
println("글자수 : ${s.length}")
}
축약하면 자동으로 it이라는 특별한 키워드의 변수 생성
💡 it은 파라미터
it 키워드는 이름을 개발자 마음대로 변경 가능하다
hhh("sdfdsf")
iii("dkhbsfk")
jjj("sam",24)
-----------------------
//1)
val hhh:(String) -> Unit = {
//축약하면 자동으로 it이라는 특별한 키워드의 변수 생성
//it이 파라미터
println("글자수 : ${it.length}")
}
//2) 익명 함수의 축약표현 - 파라미터 이름 정하기
val iii:(String) -> Unit = {
s-> println ("글자수 : ${s.length}")
}
//3) 파라미터 여러개
val jjj:(String, Int) -> Unit = {
name, age -> println("name : $name , age : $age")
}
val kkk = fun():Int{
return 20
}
val lll:()->Int = fun():Int {
return 60
}
val n3 = nnn()
println(n3) //-> 결과10
-------------------------
//1) 익명함수의 축약하면 return 키워드도 생략해야만 한다
val mmm:() -> Int = {
//return 50 - error 리턴 쓰면 에러
50
}
//2) 축약형에 {}안에 값이 많으면 - 마지막 값이 리턴된다
val nnn:() -> Int = {
30
40
println("bbb") //현재 이 함수의 리턴 타입이 Int이기 때문에 마지막에 있으면 문제가 된다
//중간에 있으면 문제 되지않음
10
}
val len = ooo("kjggrgll")
println(len)
------------------
val ooo:(String) -> Int = {
s -> s.length
}
고차함수란? 함수의 파라미터로 다른 함수를 전달 받는 함수
var f:() -> Unit = fun(){
println("익명함수")
}
f() //변수 이름으로 함수 호출
//익명함수는 변수에 대입 되므로 당연히 다른 변수에 저장 가능
var g:() -> Unit = f // g 변수에 f 함수를 전달 받음
g() // g = f()
//함수를 다른 변수에 저장할 수 있다면.. 다른 변수의 파라미터(매개변수)에도 전달이 가능
ppp("aaa",g)
---------------------------
fun ppp(s:String, f:()->Unit) {
println("s = $s")
f() // 매개변수명으로 전달받은 함수 호출
}
val xx:(String) -> Int = {
it.length
}
ttt("안드로이드", xx)
ttt("android", {it.indexOf("d")}) //함수를 바로 줄 수 있음 - 리스너가 이런식임
//안드로이드의 setOnClickListener의 모습
---------------------------
fun ttt(s:String, ff:(String)->Int) {
val n = ff(s)
println(n)
}
매개변수가 없으면 함수에 설정해둔 디폴트값이 나옴
www(10) //10
www() //3
www(1,20)
------------------------------------
fun www(a:Int=3, b:Int=5) { //기본값 지정
println("a : $a , b : $b")
}
zzz("Korea", "Busan")
//파라미터를 지정하면서 대입 가능
zzz(city ="NY", nation="USA") // 순서 바꿔서 넣고 싶으면
zzz(city="KwngJoo") // 디폴트쓰고 필요한 것만 설정하고 싶을 때 사용
------------------------------------
fun zzz(nation:String="korea", city:String) {
println(nation)
println(city)
}