목록콤퓨타 왕기초 (187)
파게로그
Tail Call tail call에 대해서 알아보자. fun foo() { var a = 10 return bar(a) } fun bar(n: Int) { return n+1 } fun main(args: Array) { foo() } ①main()이 foo()를 호출하면, ②본래는 foo()가 스택에 남아 있고 ③bar(a)를 계산한 후 ④그 값을 반환받아 ⑤foo()가 그 값을 반환하는 주체가 된다. 그런데 위와 같은 프로그램에서, 사실 foo()는 bar(a)의 값을 반환받은 후 아무것도 하지 않고 이를 그대로 돌려주기만 할 뿐이다. 곧, ②, ④, ⑤는 필요없는 과정인 셈이다. 다만, foo()가 bar()를 호출해놓고 사라져버리게 되면, main()로 값을 반환할 주체가 없게 된다. Kotli..
Default Arguments Kotlin에서는 함수를 선언할 때 파라미터에 디폴트 값을 설정할 수 있다. 함수가 호출될 때 인수가 전달되면 이러한 인수가 파라미터로 사용되지만, 인수가 전달되지 않으면 디폴트 값이 사용된다. 구체적으로는 다음과 같이 경우를 나누어볼 수 있다. 🙂 All arguments are passed fun main(args: Array) { foo('y', 2) } fun foo(letter: Char = 'x', number: Int = 1) { // ... } 이 때에는 모든 인수가 전달되었으므로 foo에서 letter는 'y', number는 2이다. 🙂 Not All arguments are passed fun main(args: Array) { foo('y') } fu..
infix notation을 사용하여 호출할 수 있는 함수가 되기 위해서는 아래의 조건을 모두 만족해야 한다. ▪ member function 또는 extension function일 것 ▪ 오직 하나의 파라미터를 가질 것 ▪ infix 키워드를 사용할 것 infix notation을 지원하는 함수는 다음과 같이 사용이 가능하다. fun main(args: Array) { var a = true var b = false var result: Boolean result = a or b println(result) result = a.or(b) println(result) result = a and b println(result) result = a.and(b) println(result) } 위 프로그램의..
Kotlin 함수의 종류 ▪ Kotlin Standard Library Function ▪ User-defined functions 함수 정의하기 fun 키워드를 통해 정의한다. fun foo() { // fun foo(): Unit // function body } 위와 같이 아무 값도 반환하지 않는 것은, 사실 return type이 Unit임을 의미한다. 아래와 같이 return type을 지정할 수 있다. fun add(n1: Double, n2: Double): Int { val sumDouble = n1 + n2 val sumInteger = sumDouble.toInt() return sumInteger } 한편 single expression을 반환하면, 다음과 같이 중괄호 없이 =만을 통..
while while문과 do-while문은 Java와 동일하게 사용할 수 있다. iterate through a range Python의 range와 비슷한 점도 있고, 다른 점도 있다. fun main(args: Array) { for (i in 1..10) { println(i) } } ▪ i를 명시적으로 선언하지 않아도 동작한다. ▪ range는 닫힌 구간이다. ▪ 위 프로그램의 실행 결과는 다음과 같다. 1 2 3 4 5 6 7 8 9 10 fun main(args: Array) { for (i in 10..1) { println(i) } } ▪ 위 프로그램의 실행 결과는 다음과 같다(아무것도 출력되지 않는다). fun main(args: Array) { for (i in 5 downTo 1) ..
if Java에서와 같이 if문을 사용할 수 있다. fun main(args: Array) { var score = readLine()!!.toInt() if (score > 90) { println("Great!") } else if (score > 80) { println("Good!") } else { println("Ha-ha!") } } Kotlin에서는 statement가 아니라 expression으로서 if를 사용할 수도 있다. fun main(args: Array) { var score = readLine()!!.toInt() var result = if (score > 90) { "Great!" } else if (score > 80) { "Good!" } else { "Ha-ha!" }..
Output ▪ print(): System.out.print() ▪ println(): System.out.println() ▪ print("$var"): short form of print("${var}") fun main(args: Array) { var score: Int = 80 print("score is $score") } Input Kotlin Playground에서는 readLine()이 콘솔에서 입력을 받지 않았는데, 다른 환경에서 시험하니 정상적으로 입력이 가능했다. 변수에 null이 저장되는 것으로 보아, 설명에 따르면 InputStream이 파일로 연결되어 있다든가 한 것 같다. 이건 차후에 해결해보아야겠다. !!는 unsafe nullable type(T?)을 non-nullab..
Expression 변수와 연산자 등으로 이루어져 단일 값으로 도출된다. 예시 90 + 25 // returns Int value if (a > b) a else b // Java와 달리 if 또한 expression Statement 실행을 위한 완전한 단위를 만드는 모든 것들이다. 예시 val score = 90 + 25 println("Hello, world!") cnt++ max = if (v1 > v2) v1 else v2 Block { } 내부에 포함되는, 0개 이상의 statements의 집합 예시 if (flag == true) { print("true") }