레이블이 kotlin인 게시물을 표시합니다. 모든 게시물 표시
레이블이 kotlin인 게시물을 표시합니다. 모든 게시물 표시

2016년 4월 23일 토요일

kotlin programming langauage - 반복제어문

while loop
자바와 거의 동일하다
[while문]
    while (x > 0) {
        x--
    }
[do..while 문]
do{
    print(x)
}while(x>0)
}

자바의 iterator를 이용한 for문과 비슷하다.
for (item in collection)
    print(item)
물론 {}를 사용해도 되고 타입을 지정해도 된다.
for (item:String in collection){
    print(item)
}
인덱스 기반으로 사용할 경우 indices함수를 사용한다. 해당 함수는 컬렉션의 int range를 리턴해준다.
for (item in collection.indices)
    print(item)
그리고 이터레이터를 이용한 for문 사용시 문제가 되었던 인덱스 사용도 withIndex()함수를 사용한다면 별도의 구현이 필요 없다.
for((index,value) in x.withIndex()){
    println("index:$index,value:$value")
}
ranges and in

label and return
kotlin에도 반복문을 제어하기위해  label과 continue, break, return이 있다.기본은 자바와 같다. 
 return : 실행중인 함수가 종료된다.
continue :가장 가까운 반복문의 다음 단계로 이동
break:가장 가까운 반복문을 종료 시킨다.

먼저 라벨을 설명하기 위해 자바와 비교하자면
자바의 Label  반복문 앞에 라벨명:<반복문>의 형식으로 사용한다
public static void main (String[] args){
    firstLabel:for(int i=0;i<10;i++){
        for(int j=0;j<10;j++){
            if(j%>0continue ;           
            if(j==4continue firstLabel;          
            System.out.println(i + "-"+j);
        }
    }
}
kotlin에서는 

fun main(args:Array<String>){
    val x =arrayOf("a","b","c")
    firstLabel@ for(i in 1..10) {
        for (j in 1..10) {
            if (j % 0continue
            if (j > 5continue@firstLabel 
           println("$i - $j")
        }
        println("after foreach")
    }
}

람다식 foreach에서의 라벨 사용
fun main(args:Array<String>){
    val x =arrayOf("a","b","c")
    x.forEach {
        if(it == "b"return
        println("$it")
    }
    println("after foreach")
}

if 조건에 맞아 return이 실행되면 함수가 종료되고 결과는 a만 출력된다.
fun main(args:Array<String>){
    val x =arrayOf("a","b","c")
    x.forEach loop@{
        if(it == "b"return@loop
        println("$it")
    } 
   println("after foreach")
}
라벨을 사용하면 함수전체가 종료되는 것이 아니라 해당 조건만 종료되고 계속진행된다.
결과는 a c after foreach가 출력된다.

람다식에서는 함수와 같은 이름의 라벨을 사용 한다면 라벨선언을 생략할 수 있다.
fun main(args:Array<String>){
    val x =arrayOf("a","b","c")
    x.forEach {
         if(it == "b"return@forEach
        print(it)
    }}

햇갈린다면 익명 함수를 람다 표현식 안에 선언하여 사용할 수 있다.
fun main(args:Array<String>){
    val x =arrayOf("a","b","c")
    x.forEach(fun(value:String){
        if(value == "b"return
        print(value)
    })

}


2016년 4월 21일 목요일

kotlin programming language - 클래스 생성

클래스의 생성
코틀린에서는 new 선언자가 없다. 클래스명()으로 선언한다.
class Example(){} -> Example()

생성자
primary constructor와 한개 또는 그 이상의 secondary constructor를 갖는다.
primary constructor : 클래스 헤더에 선언
class constructor Example(title:String){}
단, 다른 annotation이나 visible modifier가 없다면 생략 가능

코클린의 모든 클래스는 공통 클래스 Any를 갖는다. 이것은 기본 선언없이 사용되며 java.lang.Object는 아니다.
클래스를 상속하기 위해서는 'open' annotaion을 붙여준다. 이는 final과 반대되는 성격의 지시자 이다. 다음과 같이 사용한다.

open class Base(p: Int){}
class Derived(p: Int) : Base(p){}

method overrinde
java와 동일하게 사용된다. super class에 동일한 메소드가 있다면 override annotation을 앞에 붙인다.
super class의 멤버에 open으로 선언되어 있어야 한다.
open class Base {
  open fun v() {}
  fun nv() {}}class Derived() : Base() {
  override fun v() {}}


gettter&setter

-작성중-

2016년 4월 19일 화요일

Kotlin Programming Language 시작하기 - 기초문법

1. 기초 문법
 - 패키지 선언 : 자바와 같이 최상단에서 선언한다.
package foo.bar

fun baz() {}

class Goo {}
자바와 다르게 클래스와 메소드가 한 파일에 같은 레벨로 존재할 수 있다.
따라서 import시 사용할 메소드와 클래스의 패키지명은 같다
메소드 baz()의 풀패키지명은 foo.bar.baz
클래스 Goo의 풀 패키지명은 foo.bar.goo

패키지명이 특정되지 않았다면 default 패키지에 속하고 아무런 이름이 없다.

Imports
import foo.Bar // Bar만 접근가능 
import foo.* // foo의 모든 컨텐츠(패키지,클래스, 오브젝트 등등)에 접근가능
패키지명이 충돌할 수도 있다. 이때에는 'as'키워드를 사용한다
import foo.Bar // Bar is accessible
import bar.Bar as bBar // bBar stands for 'bar.Bar'

자바와는 다른점 import static이 없다. 패키지명이 디렉토리 구조와 달라도 상관없다

 메소드 선언하기
 fun 지시자(?)를 통해 선언하며  자바와 리턴타입과 파라미터 표현 방식이 조금 다르다. 형식은 다음과 같다. 
  fun <function 명>(<파라미터명>:<파라미터타입>):리턴 타입 

 예제로 제시된건 4가지 방법 있다. 
가. 자바와 비슷하게 return 타입을 선언하고 body에 return문 기술
fun sum(a: Int, b: Int): Int {
    return a + b
}
나. return 타입을 생략하고 = 우측에 return 문 기술
fun sum(a: Int, b: Int) = a + b
다. void 타입(return 타입 Unit은 void와 같다.)
fun printSum(a: Int, b: Int): Unit {
    print(a + b)
}
라. 3의 unit은 생략될 수 있다
fun printSum(a: Int, b: Int) {
    print(a + b)
}

변수 선언
변수를 선언할 때에는 크게 val과 var 두가지 타입으로 선언할 수 있다. val은 자바의  final과 비슷하며 선언하고 값을 초기화한 뒤에는 더이상 수정되지 않는다. var는 계속 수정 가능하다. 아래와 같이 선언 할 수 있다.
val a: Int = 1 //int 타입으로 선언하고 정수 1로 초기화
val b = 1   // 초기화 값이 있다면 타입 생략 가능
 val c: Int  // 선언과 동시에 초기화 하지 않는다면 타입선언 필요
c = 1       // 초기화
c=2       //다시 값을 변경하려 한다면 Kotlin: Val cannot be reassigned 오류발생

var x = 5 // `Int` type is inferredx += 1

null타입 변수 선언
null타입의 변수를 선언하기 위해서는 변수선언시 타입뒤에 ?를 붙여준다.
val canNull:String? = null //null로 변수를 초기화할 수 있다. 다만 val타입 변수는 다시 값을 변경할 수 없다 
val notNull:String = null  //null은 non-null type 변수의 값이 될 수 없다.

2016년 4월 18일 월요일

Kotlin Programming Language 시작하기 - 환경설정하기


구글과 오라클의 자바관련 소송으로 인하여 안드로이드에서 자바로 개발할 수 있는 날이 얼마 남지 않은것 같다.
레퍼런스를 기초로 공부해보자
https://kotlinlang.org/docs/reference/

1. 환경설정하기
 - 개발도구 : intellij ide < 클릭하여 다운로드
 - kotlin은 커뮤니티 버전과 울티메이트 버전 모두 지원하니 아무거나 받아도 무방하다.

설치후 setting메뉴의 plugin항목으로 진입하여 kotlin 관련 플러그인이 설치되어 있는지 확인한다. 설치되어 있지 않다면 설치한다.







프로젝트를 생성한다.



라이브러리를 추가한다. 로컬에서 복사하던지 플러그인에서 생성하게 한다.

다음과 같은 빈 프로젝트가 생성된다.

프로젝트를 선택하고 우클릭하여 kotlin 파일을 생성해 보자.
다음엔 가장 기초인 'Hello world' 출력하기!

fun main(args:Array<String>){
    print("hello world")
}
생성한 파일에 다음과 같이 입력하고 실행한다. 실행방법은 2가지가 있다. 
첫번째 생성한 파일을 우클릭한 후 run 메뉴를 선택한다.
두번째 상단 Run 메뉴에서 Run/debug configration을 클릭한다. 코틀린을 선택하여 실행환경을 생성한다. 이경우에 메인 클래스명이 입력되어 있지 않은데 형식은 다음과 같다. 
main.kt파일을 생성하였다면 MainKt와 같이 입력하면 된다. 첫번째 방법으로 실행하는게 편하다.
실행환경생성
실행을 누르면 잠깐의 컴파일 시간이 지난 후 다음과 같은 결과를 볼 수 있다.

내일은 기초 문법을 공부해보자