조건문
if, if/else
object Main {
def isEven(v : Int) = v % 2 == 0
def main(args: Array[String]): Unit = {
if(isEven(2)){
println("짝수")
}
else {
println("홀수")
}
}
}
out) 짝수
object Main {
def isEven(v : Int) = v % 2 == 0
def main(args: Array[String]): Unit = {
val value = 2;
val result = if (isEven(value)) "짝수" else "홀수" // 값 할당
println(result) // out) 짝수
}
}
match (중요)
object Main {
def getAge(name : String) = name match {
case "철수" => 9
case "영희" => 8 // break 를 안써줘도 됨. 안써줘도 다음 case로 내려가지 않음.
case "춘식" | "춘삼" => 2 // or
case _ => 0 // default
}
def main(args: Array[String]): Unit = {
println(getAge("철수")) // out) 9
println(getAge("영희")) // out) 8
println(getAge("춘식")) // out) 2
println(getAge("춘삼")) // out) 2
println(getAge("고길동")) // out) 0
}
}
object Main {
def isEven(v : Int) = v % 2 == 0
def main(args: Array[String]): Unit = {
isEven(2) match {
case true => println("짝수")
case false => println("홀수")
}
}
}
/// out) 짝수
object Main {
object SEX extends Enumeration {
val MAN, GIRL = SEX.Value
}
def getAge(name : String, sex : SEX.Value) = name match {
case "철수" if sex == SEX.MAN => 9
case "철수" if sex == SEX.GIRL => 12
case _ => 0
}
def main(args: Array[String]): Unit = {
println(getAge("철수", SEX.MAN)) // out) 9
println(getAge("철수", SEX.GIRL)) // out) 12
}
}
케이스 클래스 패턴매칭
은 후술)object Main {
def matcher(v : Any): Any = v match {
case i : Int => s"$i 는 Int"
case f : Double => s"실수"
case "2" => 2
}
def main(args: Array[String]): Unit = {
println(matcher(2)) // 2 는 Int
println(matcher("2")) // 2
println(matcher(3.1)) // 실수
}
}
반복문
for문
to
/ ~부터 ~미만까지 until
object Main {
def main(args: Array[String]): Unit = {
for(i <- 0 to 3) println(i) // out) 0,1,2,3
for(i <- 0 until 3) println(i) // out) 0,1,2
}
}
List
의 요소 하나씩 꺼내오기object Main {
def main(args: Array[String]): Unit = {
val list = List(1,2,3,4)
for(el <- list) println(el) // out) 1,2,3,4
}
}
List
인덱스와 함께 출력 (zipWithIndex
사용)object Main {
def main(args: Array[String]): Unit = {
val list = List("zero", "one", "two", "three")
for((el, index) <- list.zipWithIndex) println(s"index: $index / value: $el")
/**
* index: 0 / value: zero
* index: 1 / value: one
* index: 2 / value: two
* index: 3 / value: three
*/
}
}
Map
의 요소 하나씩 꺼내오기object Main {
def main(args: Array[String]): Unit = {
val map = Map(1 -> "영희", 2 -> "철수")
for((k,v) <- map) println(s"key: ${k} / value : ${v}")
/***
* key: 1 / value : 영희
* key: 2 / value : 철수
*/
}
object Main {
def main(args: Array[String]): Unit = {
for(i <- 0 to 2; j <- 0 to 3) {
println(i, j)
}
}
}
object Main {
def main(args: Array[String]): Unit = {
for(i <- 0 to 100 if i % 2 == 0) println(i) // 0~100까지 중에서 짝수인것만 출력
}
}
yield
를 추가함으로 for문에서 생성된 값들을 가진 Vector로 반환object Main {
def main(args: Array[String]): Unit = {
val evens = for(i <- 0 to 100 if(i % 2 == 0)) yield i
println(evens) // out) Vector(0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100)
}
}
do/while
object Main {
def main(args: Array[String]): Unit = {
var i = 0
do{
i+=1
}while(i == 0)
println(i) // 1
}
}
while
object Main {
def main(args: Array[String]): Unit = {
var i = 0
while(i < 10){
i+=1
println(i) // 1~10까지 출렬
}
}
}