우당탕탕 앱 도전기/kotlin

[Kotlin] 함수,변수,string template,조건식

그린푸딩 2022. 10. 4. 00:38
728x90
반응형

리액트 네이티브를 독학하다가 여러 어려움에 부딪히고.. 처음 언어를 배우는 입장에서 기본 문법안배우고 만들고 싶은걸 정하고 거기에 필요한걸 구글링 하는방식으로 프로젝트를 했다가 실패했다.. 

그리고 일단 kotlin이 많이 쓰이는거 같기도하고 뭔가 이름이 좋아서(?) kotlin을 배워보기로 했다. 

인프런에서 코드윗조이스 코틀린 3강이 뭔가 빨리 배울수 있을것 같아서 공부중.. 

어차피 시간지나면 복습 안할수도 있으니까 정리라도 해놔야지

 

근데 티스토리에 코드블럭 안해도 안드로이드 스튜디오 복붙하면 코드로 써지는듯..?근데 왜안예쁨-> 관리자 설정  플로그인->검색 ("코드")에서 테마 바꿀수 있다. 

0. 환경설정: 빈 프로젝트를 kotiln 언어로 설정해야 한다! 

역시 이런 프로젝트 설정부터 배웠어야 했어.. 

 

1. 함수

//1.함수

fun helloWorld() :Unit { //return 없을때 vioid 같음 unit Redundant:안써도 되는데 많이 씀
    println("Hi~")

}
//리턴타입이 있을때: 변수 명을 먼저 쓰고 type 지정
fun add(a:Int,b:Int):Int{

    return a+b
}
코틀린의 모든 함수는 expression! unit 아님 뭐 리턴함

 

함수의 시작은 fun 함수명,  함수의 인자는 변수이름:  변수 타입의 형태이고, 리턴값은 뒤쪽에 : (리턴타입)으로 정해준다. 

리턴하는게 없으면 Unit을, 있으면 Int같이 정해준다. 특이하게 int를 Int로 쓴다고 한다. 뭔가 왜그런지 찾아보고 싶다..

그리고 뒤에 ; 안붙임. 리턴타입을 var같은거  되나? 해서 해봤는데 안되나보다..  

Unit은 생략해도 된다. 

2. val vs var

//2. val vs var
//val=value 변하지 않은 값
//var=variable 변할수  있는 수
fun hi(){

 val a:Int =10 //발..
 var b:Int =9 //사용하지않으면 밑줄,바지..
 b=100
  //var e 안됨 타입이라도 정해줘야함
    var e:Int
 //val c:Int =100 안해도 kotlin에서 알아서 타입 정해줌
 //var name:String
  var name="HI"

}

//Expression(값) vs Statement(명령)
//값을 만들면 expression
//코틀린의 모든 함수는 expression:unit 아님 뭐 리턴함
//자바는  void이면 state임 /코틀린에서 if같은게 expression이 됨

 

val 은 변하지 않은 값, var 은 변할수 있는 변수이다. 

var은 선언할때 꼭!! 타입이라도 정해줘야한다고 한다. val도  오류뜨는걸 봐서 그런거같다.

그리고 코틀린에서는 모든 함수가 뭔가 리턴하기에 expression이라고 한다. (void 형도 Unit을 리턴/ Unit이 뭐지?) 참고로 statement는 리턴하는게 없는 명령하는것이다. 

 

3. String Template

fun main(){ //엔트맇 함수
 helloWorld();
 println(add(3,5));
    //3.string Temlpate - 변수 출력하고 싶을때 달러표시하면됨
    //띄어쓰기 안하고 싶으면${}
    val name="moomin"
    val lastName="hi"
    println("my name is ${name+lastName}im happy." )
    println("this is  2\$a") //백슬래시+ 달러

    //여러줄 주석 /**/
    //ctrl + 슬래시
    checkNum(1);
}

 

그리고 엔트링 함수 fun main()으로 한다! 

아무튼 string template라는 유용한 기능이 있는데.. 자바스크립트에서 본거 같은 느낌 $+대괄호하면 띄어쓰기 없이 변수를 println할수 있다고 한다. 

 컨트롤+슬래시는 주석처리이다. 

 

4. 조건식 

//4.  조건식
//함수에 var 일수는 없나?
fun maxBy(a:Int, b:Int):Int  {

    if(a>b){
        return  a
    }
    else{
        return b
    }
}
//삼항 연산자 대신 가능
//이거 왜 자동 타입 추론안떠
fun maxBy2(a:Int,b:Int)=if(a>b) a else b;

fun checkNum(score:Int){
    //when은 스위치 역할
    when(score) {
        0 -> println("this is 0")
        1 -> println("this is 1")
        2, 3 -> println("this is 2 or 3")  //복수 정답 가능
        else -> println("모름") //안써도 됨
    }
    var b = when(score){ //when을 표현식으로 할거면 else 를 써줘야함
        1-> 1  //b:1이라뜸
        2->2
        else ->  3 //else를 꼭써줘야함
    }
    println("b: ${b}");
    when(score){
        in 90..100 -> println("A+")
        in 10..80 -> println("B+")
        else->println("bye")  //없어도됨

    }
}

 

 

조건식은 if else, when(스위치같은) 으로 쓸수 있는데 statement형식, expression형식 둘다 됨 

when 내에서 리턴은 "조건"-> 리턴값 형식이고, 어떤 범위면 in (범위 첫값)..(범위 마지막값)이다. 둘다 포함인듯

 

개인적으로 안드로이드 스튜디오 주석폰트가 예쁜것 같다.

728x90
반응형