5-1 조건문을 통한 분기 (1)
1) 조건문을 통한 변수 선언
fun main() {
val number = 1
val result = if (number > 0)
"양수 값" // 마지막 값이 할당 값
else if (number < 0)
"음수 값"
else
"0"
println(result)
}
2) 조건문
fun main() {
print("Enter the score : ")
val score = readLine()!!.toDouble()
if (score > 90.0){
println("A")
}
else if (score >= 80.0 && score <= 90.0){ // score in 80.0..90.0
println("B")
}else{
println("C")
}
}
5-1 조건문을 통한 분기 (2)
1) 인자가 있는 when
fun main() {
print("Enter the score : ")
val score = readLine()!!.toDouble()
when(score){
in 90.0..100.0 -> println("A")
in 80.0..90.0 -> println("B")
else -> println("C")
}
}
2) 인자가 없는 when
fun main() {
print("Enter the score : ")
val score = readLine()!!.toDouble()
when{
score >= 90.0 -> println("A")
score in 80.0..90.0 -> println("B")
else -> println("C")
}
}
5-2 반복문으로 여러번!
1) for문
fun main() {
for(x in 1..5){
println(x)
}
for(x in 5 downTo 1){
println(x)
}
for(x in 1..5 step 2){
println(x)
}
for(x in 5 downTo 1 step 2){
println(x)
}
}
2) while문
fun main() {
print("Enter the number : ")
var number = readLine()!!.toInt()
var factorial: Long = 1
while(number > 0){
factorial *= number
number--
}
println(factorial)
}
3) do-while문
fun main() {
do{
print("Enter the number : ")
var input = readLine()!!.toInt()
for(i in 0 until input){ // input은 범위에 포함되지 않는다.
for(j in 0 until input){
print((i+j)%input + 1)
}
println()
}
}while(input != 0)
}
5-3 흐름의 중단과 반환 (1)
1) 비지역 반환의 예
fun main() {
retFunc()
}
inline fun inlineLambda(a: Int, b: Int, out: (Int, Int) -> Unit){
out(a, b)
}
fun retFunc(){
println("Start of Func")
inlineLambda(12, 3) { a, b ->
val result = a + b
if (result > 10) return // 비지역 반환
println("result : $result")
}
println("End of Func")
}
2) 비지역 반환을 방지하기 위한 라벨링
fun main() {
retFunc()
}
inline fun inlineLambda(a: Int, b: Int, out: (Int, Int) -> Unit){
out(a, b)
}
fun retFunc(){
println("Start of Func")
inlineLambda(12, 3) lit@{ a, b ->
val result = a + b
if (result > 10) return@lit // 라벨링
println("result : $result")
}
println("End of Func")
}
5-3 흐름의 중단과 반환 (2)
1) 암묵적 라벨링
fun main() {
retFunc()
}
inline fun inlineLambda(a: Int, b: Int, out: (Int, Int) -> Unit) {
out(a, b)
}
fun retFunc() {
println("Start of Func")
inlineLambda(12, 3) { a, b ->
val result = a + b
if (result > 10) return@inlineLambda // 암묵적 라벨링
println("result : $result")
}
println("End of Func")
}
2) 일반 익명 함수
- 비지역 반환이 없다는 장점
fun main() {
retFunc()
}
inline fun inlineLambda(a: Int, b: Int, out: (Int, Int) -> Unit){
out(a, b)
}
fun retFunc(){
println("Start of Func")
inlineLambda(12, 3, fun (a, b) { // 일반 익명 함수
val result = a + b
if (result > 10) return
println("result $result")
})
println("End of Func")
}
3) 람다식과 익명 함수 비교
fun main() {
val getMessage = lambda@ { num: Int ->
if (num !in 1..100){
return@lambda "Error" // return
}
"Success" // return
}
val result = getMessage(101)
println("result : $result")
}
fun main() {
val getMessage = fun(num: Int): String {
if (num !in 1..100) {
return "Error"
}
return "Success"
}
val result = getMessage(101)
println("result : $result")
}
4) break 라벨링
fun main() {
first@ for(i in 1..5){
second@ for(j in 1..5){
if (j == 3) break@first
println("i : $i, j : $j")
}
}
}
5-4 예외가 발생했어요!
1) try catch 구문
fun main() {
val a = 6
val b = 0
val c: Int
try{
c = a / b
} catch (e: Exception){
println(e)
} finally {
println("finally")
}
}
2) 예외 발생시키기
import java.lang.Exception
fun main() {
var amount = 600
try {
amount -= 100
checkAmount(amount)
} catch (e: Exception) {
println(e.message)
}
}
fun checkAmount(amount: Int) {
if (amount < 1000) {
throw Exception("잔고가 $amount 으로 1000 이하입니다.")
}
}
'Boost Course' 카테고리의 다른 글
[코틀린 프로그래밍 기본 1] 6장 코틀린과 표준함수 (0) | 2021.07.20 |
---|---|
[코틀린 프로그래밍 기본 1] 4장. 요술상자, 함수 가지고 놀기 (0) | 2021.07.18 |
[코틀린 프로그래밍 기본 1] 3장. 마법의 요술상자, 함수의 기본 (0) | 2021.07.18 |
[코틀린 프로그래밍 기본 1] 2장. 변수와 자료형 (0) | 2021.07.17 |
[코틀린 프로그래밍 기본 1] 1장. 코틀린이란 무엇일까? (0) | 2021.07.17 |