부스트코스 서포터즈 3기 활동으로서
코틀린 프로그래밍 기본 1/2(함수편)을 듣고 작성된 포스팅입니다
조건문을 통한 분기
1) if-else문
fun main(){
val a=5
val b=7
//가장 기본적인 형태
if (a<b) {
println("$b") //조건식이 참인 경우에만 수행
} else {
println("$a") //조건식이 거짓인 경우에 수행
}
//수행할 문장이 한줄로 간단한 경우 중괄호를 없애고 다음과 같이 한줄에 구성 가능
println("${if (a > b) a else b}")
val message="ccc"
if ("a" in message) println("$message")
//in 연산자와 범위 연산자로 조건식 간략하게
else if ("c" in message) println("$message")
//else if문으로 조건문 중첩하기
else println("NOTHING")
//출력:ccc
}
+ in 연산자와 범위 연산자로 조건식 간략하게 만들기 : 포함 여부 확인을 위한 in 연산자와 두 개의 점(..)으로 구성된 범위(range) 연산자를 제공하며, 시작값과 마지막값은 범위에 포함된다.
2) when문
when문은 기존의 여러 언어가 제공하던 switch~case문을 대체하면서 더 유연한 처리가 가능
import kotlin.random.Random
fun main(){
val score=Random.nextInt(101)
//랜덤한 숫자 생성
when(score){
//인자에 일치하는 값 혹은 표현식 -> 수행할 문장
//인자에 일치하는 범위 -> 수행할 문장
//else -> 문장
100 -> println("만점입니다! 수고하셨습니다")
in 90..99 -> println("90점은 아쉽네요 좀 더 노력합시다")
//위에서 배운 in연산자와 범위지정자를 사용함
in 80..89 -> println("80점은 아슬아슬하게 합격입니다")
0,1 -> println("심각하네요. 좀 더 노력합시다")
//여러 가지를 넣을 수도 있음
else -> println("불합격입니다")
}
}
+ 인자가 없는 when : when에 인자가 주어지지 않으면 else if 처럼 각각의 조건을 실행할 수 있습니다.
반복문을 통한 반복
1) for문
for문은 조건식에 따라 반복한다. 조건식은 대부분 in연산자와 컬렉션, 범위 연산자를 사용해 반복 조건을 구성한다. 범위 연산을 이용할 경우 기본적으로 상행 형태로 증가하고 감소하기 위해서는 downTo를 사용
fun main(){
var sum=0
//for (요소 변수 in 컬렉션 혹은 범위) {반복할 본문}
for (a in 0..10){sum+=a}
println("sum = $sum") //sum = 55
//하행 반복 - downTo
for (b in 10 downTo 1) print("$b ")
//10 9 8 7 6 5 4 3 2 1
//필요한 단계 증가 - step
for (c in 10 downTo 1 step 2) print("$c ")
//10 8 6 4 2
}
2)while문
while문은 while문은 조건식이 true을 만족하는 경우 while의 블록을 무한히 반복하고, 조건식이 false가 되면 실행문이 중단되어 while 루프(반복)를 빠져 나간다.
fun main(){
var sum=0
while (sum<100) { // 조건식이 true인 동안 본문의 무한 반복
sum+=10
}
println("sum = $sum") //출력 : sum = 100
}
3)do~while문
do~while문은 앞에서 배운 while문에서는 조건식을 먼저 검사한 후 반복을 진행하기 때문에 처음부터 조건식이 false인 경우 작업이 한 번도 실행되지 않는다. 그러나 do~while문의 경우 일단 do 블록에 작성한 본문을 한 번은 실행한 다음 마지막에 조건식을 검사해서 true가 나오면 작업을 반복한다.
//합이 1000보다 작을 때까지만 값을 입력받는 프로그램
fun main(){
var sum=0
do {
var input = readLine()!!.toInt().run{sum+=this}
}while(sum<1000)
println("sum = $sum")
}
흐름의 중단과 반환
return : 함수에서 결괏값을 반환하거나 지정된 라벨로 이동
break : for나 while의 조건식에 상관없이 반복문을 끝냄
continue : for나 while의 반복문의 본문을 모두 수행하지 않고 다시 조건으로 넘어감
1)return문 (값을 반환하거나 함수를 빠져나가기 위해)
// 람다식에서 라벨과 함께 return 사용하기
fun inlineLambda(a: Int, b: Int, out: (Int, Int) -> Unit) { // inline이 제거됨
out(a, b)
}
//인라인(inline)으로 선언되지 않은 람다식 함수에서 return을 사용할 때는 그냥 사용X
//return@label과 같이 라벨(label) 표기와 함께 사용해야 한다.
//라벨이란 코드에서 특정한 위치를 임의로 표시한 것으로, @ 기호를 뒤에 이름을 붙여서 사용
fun main() {
println("start of retFunc")
inlineLambda(13, 3) lit@{ a, b -> // ① 람다식 블록의 시작 부분에 라벨을 지정함
val result = a + b
if(result > 10) return@lit // ② 라벨을 사용한 블록의 끝부분으로 반환
//특정값을 반환하려면 return@label 1 처럼 사용
println("result: $result")
} // ③ 이 부분으로 빠져나간다
println("end of retFunc") // ④ 이 부분이 실행됨
}
2)break문과 continue문
break는 해당 키워드를 사용한 지점에서 for나 while, do...while문 루프를 빠져 나오고, continue는 이후 본문을 계속 진행하지 않고 다시 반복 조건을 살펴보게 된다.
fun labelbreak() {
println("labelBreak")
first@ for(i in 1..5) {
second@ for (j in 1..5) {
if (j == 3) break@first
println("i:$i, j:$j")
}
println("after for j")
}
println("after for i")
}
fun labelcontinue() {
println("labelContinue")
first@ for(i in 1..5) {
second@ for (j in 1..5) {
if (j == 3) continue@first
println("i:$i, j:$j")
}
println("after for j")
}
println("after for i")
}
fun main(){
labelbreak()
/*
<출력결과>
labelBreak
i:1, j:1
i:1, j:2
after for i
*/
labelcontinue()
/*
<출력결과>
labelContinue
i:1, j:1
i:1, j:2
i:2, j:1
i:2, j:2
i:3, j:1
i:3, j:2
i:4, j:1
i:4, j:2
i:5, j:1
i:5, j:2
after for i
*/
}
예외 발생 처리
try { . . . } catch { . . . } : try 블록의 본문을 수행하는 도중 예외가 발생하면 catch 블록의 본문을 실행
try { . . . } catch { . . . } finally { . . . } : 예외가 발생해도 finally 블록 본문은 항상 실행
fun main() {
val a = 6
val b = 0
val c : Int
try {
c = a/b // 0으로 나눔
} catch (e : Exception){
println("Exception is handled.")
} finally {
println("finally 블록은 반드시 항상 실행됨")
}
}
+ throw Exception(message: String)을 통해 특정 예외를 발생시킬 수 있음
코틀린 프로그래밍 기본1/2(함수편)
부스트코스 무료 강의
www.boostcourse.org
'프로그래밍 공부흔적 > Kotlin' 카테고리의 다른 글
[부스트코스][Kotlin]표준함수 활용(2) - apply(), run(),with(), use() (0) | 2021.01.29 |
---|---|
[부스트코스][Kotlin]표준함수 활용(1) - let(), also() (0) | 2021.01.29 |
[부스트코스][Kotlin]코틀린의 다양한 함수들 (0) | 2021.01.28 |
[부스트코스][Kotlin]람다식과 고차함수의 이해 (0) | 2021.01.28 |
[부스트코스/Kotlin]함수형 프로그래밍이란? (0) | 2021.01.26 |
댓글