Kotlin - 초보 인식

참고: - Kotlin Primer·제2장·기본문법 - Kotlin으로 안드로이드 프로젝트를 개발하는 것은 어떤 느낌입니까? -빠른 손놀림 Kotlin의 11기.

기본 문법


문장

  • in 키워드는 하나의 독점적인 구간에 존재하는지 판단하고 in 키워드
  • 를 사용할 수 있다.
  • when 표현식
  • 스마트 유형은 하나의 대상이 하나의 유형인지 아닌지를 판단하는 실례를 추천하고 is 키워드
  • 를 사용할 수 있다.
  • 빈값 검측
  • // data , 
    data?.let{
        //... 
    }
    
    // , data 
    data?:let{
        //...
    }

    함수.

  • 기본 함수 설명://키워드fun 설명을 사용하여 say()라는 함수를 만들고 String 형식의 매개 변수를 받아들이고 String 형식의 값을 되돌려줍니다
  •  fun say(str: String): String {
        return str
    }
    
    fun say(str: String): String = str
    
    fun getIntValue(value: Int) = value
    
  • 변참 함수
  • // Java , 
    public boolean hasEmpty(String... strArray){
        for (String str : strArray){
            if ("".equals(str) || str == null)
                return true;
        }
        return false;
    }
    
    // Kotlin , vararg 
    fun hasEmpty(vararg strArray: String?): Boolean{
        for (str in strArray){
            if ("".equals(str) || str == null)
                return true 
        }
        return false
    }

    Kotlin 코드

    class StringUtils {
        companion object {
           fun isEmpty(str: String): Boolean {
                return "" == str
            }
        }
    }
    compnion object는 외부 클래스의 반생 대상을 나타내며 외부 클래스가 자동으로 하나의 대상을 자신의field로 만드는 것으로 이해할 수 있다.
    Kotlin은 기본적으로 모든 패키지 레벨 함수를 자동으로 생성된 EcampleKt라는 클래스에 저장합니다
    Kotlin에 static 키워드가 없습니다. 자바 코드에서 클래스 이름으로 Kotlin 클래스를 호출하려면 @JvmStatic 주석을 넣어야 합니다.

    클래스 특성


    구조 함수

    class Person(private var name: String) {
    
        init {
            name = "Zhang Tao"
        }
    
        internal fun sayHello() {
            println("hello $name")
        }
    }
    

    2차 구조 함수

    class Person(private var name: String) {
    
        private var description: String? = null
    
        init {
            name = "Zhang Tao"
        }
    
        constructor(name: String, description: String) : this(name) {
            this.description = description
        }
    
        internal fun sayHello() {
            println("hello $name")
        }
    }

    수식부

  • open: 변수와 방법마다final 수식자 추가
  • internal: 모듈 수준의 액세스 권한
    데이터 클래스: 데이터 수식의 클래스를 데이터 클래스라고 부른다

  • 단일 클래스 설계

    class Single private constructor() {
        companion object {
            fun get():Single{
                return Holder.instance
            }
        }
    
        private object Holder {
            val instance = Single()
        }
    }

    동적 에이전트

    interface Animal{
        fun bark()
    }
    
    class Dog :Animal {
        override fun bark() {
            println("Wang Wang")
        }
    }
    
    class Cat(animal: Animal) : Animal by animal {
    }
    
    fun main(args: Array) {
       Cat(Dog()).bark()
    }

    함수와 패킷 닫기

  • Unit공함수: 그 방법을 실현할 필요가 없다.하나의 값을 나타내는 유형과 같다.Java의 void 유형과 유사
  • editText.addTextChangedListener(object : TextWatcher {
        override fun afterTextChanged(s: Editable?) = Unit
    
        override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) = Unit
    
        override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) = Unit
    })
  • Nothing은 값 유형입니다.함수가 번복되지 않으면 범위 Nothing 유형
  • 으로 선언됩니다.
    public class Nothing private constructor()  

    복잡한 함수

  • 연산자 재부팅
  • fun main(args: Array<String>) {
      for (i in 1..100 step 20) {
        print("$i ")
      }
    }

    위의 코드는 실제...의 원리는 실제적으로 하나의 Int 값에 대해 그의 rangeTo 방법을 호출하여 하나의 Int 파라미터를 전달하고 구간 대상을 되돌려주는 것이다.
    for (i in 1.rangeTo(100) step 20) {
        print("$i ")
    }

    가방을 닫다

  • 자체 실행 클립: 자체 실행 클립은 클립을 정의하는 동시에 직접 실행 클립으로 상하문 환경을 초기화하는 데 사용된다
  • { x: Int, y: Int ->
        println("${x + y}")
    }(1, 3)

    Lambda


    Kotlin에서 Lambda를 하나의 유형으로 추상화
    val printMsg = { msg: String -> 
        println(msg) 
    }
    
    fun main(args: Array<String>) {
      printMsg.invoke("hello")
    }
    
    //fun main(args: Array) {
    //  printMsg("hello")
    //}

    먼저 printMsg 라는 Lambda를 설명했습니다. 스트링 형식의 값을 매개 변수로 받아들인 다음main 함수에서 호출합니다. 생략하려면 호출할 때 invoke를 생략해서 함수처럼 사용할 수 있습니다.
  • 고급 함수
  • 람바다 표현식의 가장 큰 특징은 매개 변수로 전달할 수 있다는 것이다.패킷을 매개 변수로 정의하는 함수를 고급 함수라고 합니다.
    fun main(args: Array<String>) {
        log("world", printMsg)
    }
    
    val printMsg = { str: String ->
        println(str)
    }
    
    val log = { str: String, printLog: (String) -> Unit ->
        printLog(str)
    }
    //  log  , str:String, printLog: (String) -> Unit。

    좋은 웹페이지 즐겨찾기