코틀린_Basic문법_함수

소정·2023년 3월 21일
0

Kotlin

목록 보기
2/27

[1] 함수

1) 기본 함수 작성법

show()

-----------------

fun show(){
    println("show function")
    println()
}

2) 매개변수 (변수명:자료형)

//파라미터 전달
output(100, false)

-----------------

fun output(a:Int, b:Boolean){ //파라미터에 var이나 val키워드 사용 불가
    println(a)
    println()
}

3) 리턴 타입 작성 위치 => 함수():리턴타입

var z:Int =sum(50,30)
println("Sum함수 결과값 : $z")

-----------------

fun sum(a:Int, b:Int):Int{
    return a+b
}

4) 리턴없는 함수의 리턴을 받기 : Unit

리턴이 없는 함수는 void가 아니라 Unit 자료형 객체 가 받음

var x = display() 
println(x) //kotlin.Unit

-----------------

fun display(){
    println("display")
}

5) 함선선언의 단순화

  • 리턴 키워드를 할당 연산자(=)로 바꿀 수 있음
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"
}

6) 익명함수

  • 익명 함수를 사용하려면 반드시 함수를 대입해야함
  • 익명함수를 가진 변수는 함수처럼 호출 할 수 있다

기본 익명함수

bbb() //변수를 함수처럼 호출

------------------

var bbb = fun(){
    println("익명함수")
}

6-1) 익명함수를 가진 변수에 자료형 명시해보기

  • 함수의 자료형은 람다식으로 표현한다 : (매개변수) -> 리턴타입

기본형

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")
}


6-2) 파라미터가 있는 익명함수

기본형

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")
}


6-2) 리턴이 있는 익명함수

기본형


val kkk = fun():Int{
    return 20
}

자료형명시

val lll:()->Int = fun():Int {
    return 60
}

축약

  • 익명함수의 축약하면 return 키워드도 생략해야만 한다
  • 축약형에 {}안에 값이 많으면 - 마지막 값이 리턴된다
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
}


7) 고차 함수

고차함수란? 함수의 파라미터로 다른 함수를 전달 받는 함수


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)
}


8) 함수 파라미터의 default 값 설정

매개변수가 없으면 함수에 설정해둔 디폴트값이 나옴

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)
}

profile
보조기억장치

0개의 댓글