Scala CH07. 내장 제어 구문
아래의 글은 마틴 오더스키,렉스 스푼,빌 베너스 공저 / 오현석,이동욱,반영록 공역, 『Programming in Scala 3/e』,에이콘출판사(2017), CH01의 내용을 기반으로 작성하였습니다.
optional
if, while, for, try, match, 함수 호출
if : 값 리턴 가능
val filename =
if (!args.isEmpty) args(0) else "default.txt"
루프의 결과 타입은 Unit
유닛 값 = ()
while, do while
for 표현식
컬렉션 이터레이션
필터링
for {
file ← fileList
if file.isFile
if file.getName.endsWith(".scala")
} println(file)
중첩 이터레이션
for {
file ← fileList
if file.getName.endsWith(".scala")
line ← fileLines(file)
if line.trim.matches(pattern)
} println(file + ":" + line)
for 중에 변수 바인딩
for {
file < - fileList
line < - lineList(file)
trimmedLine = line.trim
if trimmedLine.matched(pattern)
} println(line)
새로운 컬렉션
def scalaFileList =
for {
file < - fileList
if file.getName.endsWith(".scala")
} yield file
try 표현식으로 예외 다루기
예외 발생 : throw new IllegalArgumentException
throw의 타입은 Nothing 이라는 타입
try catch finally 도 결과는 값
try 안의 값이 최종 값
finally는 예외처리 과정
match 표현식
val firstArg = if (args.length > 0) args(0) else ""
firstArg match {
case "salt" => println("p1")
case "chips" => println('"p2")
case _ => println("default")
}
자바와 다른 점 : break 없음.
상수는 다 사용 가능, 즉 문자열도 됨.
스칼라에서는 break와 continue 제외
break 유사 : scala.util.control.Break 클래스의 break 메소드 : breakable지정한 곳으로 이동
변수 : 지역변수
자바와 다르게 동일 변수 하위 스코프에서 중복 정의 가능, 단 상위 스콥 변수는 shadow 됨
object PrintMultiTable extends App { def printMultiTable() = { var i = 1 while (i <= 10) { var j = 1 while (j <= 10) { var prod = (i * j).toString var k = prod.length while (k < 4) { print(" ") k += 1 } print(prod) j += 1 } println() i += 1 } } printMultiTable()
def makeRowSeq(row:Int) = for (col <- 1 to 10) yield { val prod = (row * col).toString var padding = " " * (4 - prod.length) padding + prod } def makeRow(row: Int) = makeRowSeq(row).mkString
def multiTable = { val tableSeq = for (row <- 1 to 10) yield makeRow(row) tableSeq.mkString("\n") } println(multiTable) } |