코 틀린베이스 (B) - DSL

소위 DSL 도메인 특정 언어 (도메인 특정 언어 / DSL)은, 기본적인 아이디어는 대상 범위는 범용 언어 소프트웨어 문제 등 모든 것을 커버로 "완벽을 추구하지 않도록 설계",하지만 문제는 특정 컴퓨터 언어에 고유합니다.

코 틀린베이스 (B) - DSL

코 틀린의 DSL 정의 : API의 고유 코드 구조, 특정 문제 영역을 해결하기 위해 개발을 사용하여 코 틀린 언어입니다.

A, DSL

DSL (도메인 특정 언어), 즉 도메인 특정 언어 : 구체적 모두, SQL 정규 표현식에 익숙 같은 컴퓨터 언어의 특정 문제를 해결. DSL 프로그래밍 스타일로, 프로세스가 더 간단하고 깨끗하고, 간단하고 직관적 인 할 수 있습니다. 물론, 우리는 또한 자신의 DSL을 만들 수 있습니다. 기존의 API에 비해, DSL은 인간의 언어 습관에 맞춰 더 많은 표현입니다.

당신은 문제 영역, 개발 비용과 학습 비용 특정를 해결하기 위해 별도의 언어를 만드는 경우 고, 그래서 내부 DSL의 개념이 있었다. 소위 내부 DSL은, 예를 들어, 코 틀린의 DSL을 위해, DSL을 구축하는 범용 프로그래밍 언어의 사용이다.

1.1 일반적인 DSL

일반적인 DSL은 다음과 같은 여러 분야에서 볼 수있다 :

  • Ant 빌드 소프트웨어 분야
  • HTML UI 디자이너
  • VHDL 하드웨어 디자이너

DSL 대 1.2 범용 프로그래밍 언어

DSL은 한 지역, SQL 등 만 관련 지원 처리 데이터베이스 및 정규 표현식에 집중하면서 범용 프로그래밍 언어 (등 자바, 코 틀린, 안드로이드 등), 자주, 개발자는 전체 응용 프로그램을 작성하는 데 도움을 포괄적 인 라이브러리를 제공합니다 단지 텍스트를 검색하고 대체하는 데 사용 유형, 우리는 완전한 응용 프로그램을 개발하기 위해 SQL 또는 정규 표현식을 사용할 수 없습니다.

  • 프로그래머가 아닌 분야의 전문가의 사용을 사용하는 DSL;
  • DSL은 추상화의 높은 수준을 가지고, 세부 유사한 데이터 구조로 갈;
  • DSL 발현이 오직 목적의 프로그래밍 언어는 임의의 모델을 설명 할 수있는 모델 필드에 기재 될 수 있으며, 제한;

여부는 일반적인 프로그래밍 언어, 또는 도메인 특정 언어 API의 형태로 개발자들에게 제시하는 궁극적 있습니다. 좋은, 우아한, 깨끗하고 일관된 API 스타일의 모든 좋은 개발자의 추구이며, DSL은 고유 코드 구조와 일관된 코딩 스타일을 가지고하는 경향이있다.

안드로이드 개발 둘째, 응용 프로그램 코 틀린의 DSL

2.1 안코

안코는 JetBrains의, 코 틀린 개발 앤드류 프레임을 생성하는 DSL (도메인 - 특정 언어)이다. 그것의 주요 목적은 XML 코드 세대 UI 레이아웃을 사용하는 기존 방식을 대체하는 것입니다.

2.1.1 사용

안코, 다른 이상한 상속 클래스, 한 활동의 ​​표준으로, 조각, FragmentActivity 또는 다른 클래스

첫째, 사용하는 DSL 안코 클래스를 도입 org.jetbrains.anko. *.

DSL은에서 onCreate ()에서 사용할 수 있습니다 :

override fun onCreate(savedInstanceState: Bundle?) {
    super<Activity>.onCreate(savedInstanceState)

    verticalLayout {
        padding = dip(30)
        editText {
            hint = "Name"
            textSize = 24f
        }
        editText {
            hint = "Password"
            textSize = 24f
        }
        button("Login") {
            textSize = 26f
        }
    }
}

호출 된 setContentView (R.layout.something)를 표시하지 않습니다, 안코 자동 활동은 (단 활동에 대한) 내용보기를 설정했다

패딩, TEXTSIZE 및 확장 속성을 암시한다. 이러한 속성의 대부분은보기가 텍스트를 허용 = 대신의 setText의 "일부 텍스트"( "텍스트").

VerticalLayout (수직 방향의 LinearLayout) EDITTEXT 버튼

기능을 확장. 이러한 기능은보기, 활동, 조각 같은도 적용 (android.support 패키지) 문맥에서 프레임 안드로이드의 대부분에 존재합니다.

컨텍스트 인스턴스가있는 경우, DSL은 다음과 같은 구조를 작성할 수 있습니다 :

val name = with(myContext) {
    editText {
        hint = "Name"
    }
}

변수 이름은 글고 형이되었다.

2.1.2 도우미 방법

당신은 전면 버튼 방법은 문자열 매개 변수를했다 나타났습니다 수 있습니다,이 방법도 사용된다 도우미 텍스트 뷰, 글고, 버튼, 이미지 뷰.

다른 속성을 볼 필요가없는 경우에는 () ( "확인") 또는 전용 버튼} {직접 쓰기 버튼을 생략 할 수 있습니다 :

verticalLayout {
    button("Ok")
    button("Cancel")
}
2.1.3 레이아웃 和의 LayoutParams

부모 레이아웃 레이아웃 컨트롤에서는 이렇게 오래 LayoutParams.xml 사용해야 할 수 있습니다 :

<ImageView 
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android_layout_marginLeft="5dip"
    android_layout_marginTop="10dip"
    android:src="@drawable/something" />

의 LayoutParams의 안코 비슷한 XML 뷰를 사용하여 달성, 뒤에 lParam의.

linearLayout {
    button("Login") {
        textSize = 26f
    }.lparams(width = wrapContent) {
        horizontalMargin = dip(5)
        topMargin = dip(10)
    }
}

lParam의 지정하지만, 너비 또는 높이를 지정하지 않을 경우, 기본값은 WRAP_CONTENT,하지만 당신은 이름을 사용하여 자신의 인수를 지정할 수 있습니다.

다음 주 몇 가지 편리한 속성은 다음과 같습니다

  • horizontalMargin는 왼쪽과 오른쪽 여백을 설정
  • verticalMargin 설정 상단과 하단 모두
  • 여백 설정 동안 네 방향 마진
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_height="match_parent"
    android:layout_width="match_parent">

    <EditText
        android:id="@+id/todo_title"
        android:layout_width="match_parent"
        android:layout_heigh="wrap_content"
        android:hint="@string/title_hint" />

    <!-- Cannot directly add an inline click listener as onClick delegates implementation to the activity -->
    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="@string/add_todo" />

</LinearLayout>

안코를 사용한 후, 또한 클릭 이벤트를 바인딩 코드 레이아웃과 버튼으로 구현 될 수있다.

verticalLayout {
    var title = editText {
        id = R.id.todo_title
        hintResource = R.string.title_hint
    }
    button {
        textResource = R.string.add_todo
        onClick { view -> {
                // do something here
                title.text = "Foo"
            }
        }
    }
}

우리는 DSL의 주요 장점은 이해하고 현장에서 더 많은 정보를 전달하기 위해 약간의 시간이 걸릴 것입니다 볼 수 있습니다.

override fun onCreate(savedInstanceState: Bundle?) { 
   super.onCreate(savedInstanceState) 
   verticalLayout { 
       padding = dip(30) 
       editText { 
         hint = "Name" 
         textSize = 24f 
       } 
       editText { 
         hint = "Password" 
         textSize = 24f 
       } 
       button("Login") { 
         textSize = 26f 
       } 
   } 
 }
2.1.4 팝
 alert("Hi, I'm Roy", "Have you tried turning it off and on again?") { 
     yesButton { toast("Oh…") } 
     noButton {} 
 }.show()

2.1.5 비동기

 doAsync { 
     // Long background task 
     uiThread { 
         result.text = "Done" 
     } 
 } 

나에 대하여
자세한 정보는 당신이 클릭 할 수 있습니다 나에 대해 + , 아주 많은 사람들과 공유하고, 공통 진행

추천

출처blog.51cto.com/14541311/2439341