Kotlin 확장 함수 정보

15750 단어 Kotlin
이 글은 모바일 팩토리 Advent Calendar 2015 14일째 글입니다.
어제는akihiro의iOS 응용 프로그램의 레이아웃 시작였습니다.
오늘 저는 JVM에서 실행되는 언어인 Kotlin을 소개하고자 합니다. 이것은 Java와의 상호작용성과 Kotlin의 확장 함수라는 기능을 강하게 의식하고 있습니다.

TL;DL

  • Kotlin 귀엽고 좋은 언어
  • Kotlin의 확장 함수는 static 방법
  • 으로 실현됨
  • 다 같이 Kotlin 쓰세요
  • .

    Kotlin이란 무엇입니까?



    Kotlin은 IntelliJ IDEA로 유명한 JetBrains회사가 개발한 자바와 상호작용성을 가진 프로그래밍 언어이다.그것은 개원 개발한 것이다.
    자바의 반성을 활용하여 개발된 언어로 자바와 같은 프로그램이 더욱 안전하고 짧으며 직관적으로 기술할 수 있는 특징이다.
    일본어 버드와 발음이 비슷해 귀여운 언어라고 불린다.

    확장 함수는 무엇입니까?


    여기서 말하는 확장 함수는 나중에 기존 클래스에 추가하는 방법을 가리킨다.때로는 확장 방법 또는 확장이라고도 부른다.
    예를 들어 루비와 같은 동적 언어는 정의된 클래스에 쉽게 방법을 추가할 수 있다.
    class AdventCalendar
      def year
        2015
      end
    
      def month
        12
      end
    
      def to_s
        [year, month, day].join('/')
      end
    end
    
    class AdventCalendar
      def day
        14
      end
    end
    
    calendar = AdventCalendar.new
    p calendar.to_s #=> 2015/12/14
    
    그러나 정적 언어에서 한 번에 정의된 클래스의 정의는 거의 뒤에서 변경할 수 없다.그것을 가능하게 하는 것은 확장 함수다.
    물론 Kotlin에서 Java 클래스로 정의한 클래스는 다시 쓸 수 없습니다.따라서 Kotlin은 기존 유형의 방법을 단독으로 정의했는데 외관상 방법의 실현이라고 할 수 있다.

    Kotlin의 확장 함수와 그 실현


    Kotlin에서 기존 클래스에 다음 확장 함수를 추가할 수 있습니다.
    예를 들어, 반복 처리만 Kotlin의 숫자에 추가하는 것을 고려하십시오times.
    Main.kt
    @file:kotlin.jvm.JvmName("Main")
    
    fun Int.times(callback: (Int) -> Unit) {
        repeat(this) { callback(it) }
    }
    
    fun main(args: Array<String>) {
        3.times { println(it) }
    }
    
    times 매개 변수에 대한 처리를 받아들인다callback, 자신의 수치를 호출하는 횟수가 중복된다callback.repeattimes과 동작이 동일한 함수이며 Kotlin의 표준 함수입니다.
    위의 Main.kt 파일을 컴파일하면 *.class 파일을 생성할 수 있습니다.Kotlin의 실행에 의존할 때 클래스 파일은 자바에서 직접 실행할 수 없지만 kotlin 명령을 통해 실행할 수 있습니다.
    $ kotlinc -version
    info: Kotlin Compiler version 1.0.0-beta-2423
    info: PERF: INIT: Compiler initialized in 517 ms
    
    $ kotlinc Main.kt
    info: PERF: INIT: Compiler initialized in 561 ms
    info: PERF: ANALYZE: 1 files (9 lines) in 660 ms
    info: PERF: GENERATE: 1 files (9 lines) in 92 ms
    
    $ kotlin Main
    0
    1
    2
    
    $ ls
    META-INF
    Main$main$1.class
    Main.class
    Main.kt
    
    어렵기 때문에 실제 설치를 컴파일해 보세요.
    $ jad Main.class
    Parsing Main.class...Parsing inner class Main$main$1.class... Generating Main.jad
    
    Main.jad이 생성되었어요. 제가 볼게요.
    Main.jad
    // Decompiled by Jad v1.5.8g. Copyright 2001 Pavel Kouznetsov.
    // Jad home page: http://www.kpdus.com/jad.html
    // Decompiler options: packimports(3)
    // Source File Name:   Main.kt
    
    import kotlin.Unit;
    import kotlin.io.ConsoleKt;
    import kotlin.jvm.functions.Function1;
    import kotlin.jvm.internal.Intrinsics;
    import kotlin.jvm.internal.Lambda;
    
    public final class Main
    {
    
        public static final void times(int $receiver, Function1 callback)
        {
            Intrinsics.checkParameterIsNotNull(callback, "callback");
            int index = 0;
            int i = $receiver - 1;
            if(index <= i)
                do
                {
                    int it = index;
                    callback.invoke(Integer.valueOf(it));
                    Unit _tmp = Unit.INSTANCE;
                    if(index == i)
                        break;
                    index++;
                } while(true);
        }
    
        public static final void main(String args[])
        {
            Intrinsics.checkParameterIsNotNull(args, "args");
            public static final class main._cls1 extends Lambda
                implements Function1
            {
    
                public volatile Object invoke(Object obj)
                {
                    invoke(((Number)obj).intValue());
                    return Unit.INSTANCE;
                }
    
                public final void invoke(int it)
                {
                    ConsoleKt.println(it);
                }
    
                public static final main._cls1 INSTANCE = new main._cls1();
    
    
            }
    
            times(3, (Function1)main._cls1.INSTANCE);
        }
    }
    
    다음 줄에서 알 수 있듯이 Kotlin에서 확장 함수는static 방법으로 이루어졌고 기존의 클래스에 대해 어떠한 변경도 하지 않고 실현되었다.
    public static final void times(int $receiver, Function1 callback)
    
    확장 함수는 개인 구성원을 호출하는 것을 허용하지 않는다는 것이다.
    실제 처리times는 다음과 같다.원본 Kotlin 코드에서 나는 단지 repeat 함수를 읽고 있을 뿐이지만, inline 주석이 부여되었기 때문에 처리 내용은 times 안에 삽입되어 전개된다.
            Intrinsics.checkParameterIsNotNull(callback, "callback");
            int index = 0;
            int i = $receiver - 1;
            if(index <= i)
                do
                {
                    int it = index;
                    callback.invoke(Integer.valueOf(it));
                    Unit _tmp = Unit.INSTANCE;
                    if(index == i)
                        break;
                    index++;
                } while(true);
    
    
    Kotlin의 벽장도 자바로 예쁘게 처리할 수 있도록 바뀌었다.예쁘고 간결하게 표현할 수 있는 Kotlin 대단합니다!!

    총결산


    확장 함수 외에도 Kotlin에는 편리한 기능이 많이 있습니다.Java와의 상호작용성을 고려하여 제작되었으며 Java 코드에서 Kotlin으로 자동 변환될 수도 있습니다. 기회가 된다면 꼭 사용하시기 바랍니다.
    내일 kazuman519 씨는 Advent Calendar를 위해 새로운 바람을 일으킬 것입니다.기대된다!!
    https://ja.wikipedia.org/wiki/Kotlin  
    https://msdn.microsoft.com/ja-jp/library/bb383977.aspx  
    C#의 확장 방법과 거의 같지만 Kotlin은 더욱 지능적으로 정의할 수 있다
    여기서 말하는 자바는 자바 8 이전의 일을 가리킨다

    좋은 웹페이지 즐겨찾기