Taking Advantage of Kotlin in Your Android App with Sean McQuillan (GDD India ’17)

[음악 재생] 연사 : 시작하겠습니다 안녕하세요, 저는 Sean McQuillan입니다

저는 Android 개발자 옹호자입니다 그리고 오늘 저는 코 틀린에 관해 당신과 이야기 할 것입니다 그래, 우리는 강사 주도의 훈련을 할거야 오늘 그게 무슨 뜻이야? Kotlin에서 코드 연구소를 운영하기 위해 도움을 받으러 여기 올거야

그래서 나는 너를 도울거야 나는 약간의 지시를 걸어 갈거야 그리고 우리는 청중에 몇 가지 TA를 가지고 있습니다 그들은 당신이 가진 어떤 문제라도 당신을 도울 것입니다 오늘 내가 할 일은 우리가 우리의 다운로드를 설치함으로써 시작할 것입니다, Android Studio에서 프로젝트를 컴파일하는 중입니다

그 다음 약 10 분 강의를 드리겠습니다 그런 다음 코드 연구소의 일부에서 작업 할 것입니다 다시 이야기하겠습니다 우리는 코드 랩의 일부를 다시 사용할 것입니다 이 코드 랩에서 우리가 할 일은 Java 애플리케이션을 Kotlin으로 마이그레이션하는 것입니다

우리가 함께 만든 주소록 응용 프로그램입니다 그것은 Java로 작성되었습니다 그리고 우리는 Kotlin 변환기를 사용할 것입니다 우리는 Kotlin에 추상화를 작성하려고합니다 그리고 우리는 그것이 어떻게 가능한지를 볼 것입니다

우리의 상용구 코드를 줄이는 데 도움이됩니다 유지하기 쉽고 간결하고 읽기 쉬운 코드를 제공하십시오 그리고 우리는 몇 가지 일반적인 문제를 피할 것입니다 더 나은 코드를 작성하는 데 도움이되는 추상화를 작성합니다 그러니 계속 뛰어 들어 보자

가서 그 링크를 따라 가라 맨 위의 코드 랩을 다운로드하여 시작하십시오 1 단계와 2 단계를 수행하고 요점을 알려면됩니다 어디 안드로이드 스튜디오에서 그것을 컴파일거야 그렇게하면 우리 모두 다운로드 할 수 있습니다

모든 의존성 [음악 재생] 나는 대부분의 사람들이 그 지점에 있다는 것을 알았다 Android Studio에서 종속성을 다운로드하는 곳입니다 따라서 Wi-Fi 휴식이 효과적이었습니다 Kotlin과 함께 제공되는 정말 멋진 기능 중 하나입니다

코 틀린은 – 죄송합니다 Android Studio의 Java to Kotlin 변환기입니다 그것을 사용하려면 프로젝트에 Kotlin이 있어야합니다 로 시작하도록 구성되었습니다 그리고 자바 파일을 선택할 때마다, 코드 메뉴로 이동할 수 있습니다

Java 파일을 Kotlin으로 변환하십시오 이 변환기에 대한 정말 멋진 기능입니다 내가 제일 좋아하는 것들은 마술처럼 보인다 내가 그것을 사용할 때마다 – 붙여 넣을 때이다 클립 보드의 Java 코드를 Kotlin 파일로 변환하고, Java 코드를 자동으로 Kotlin으로 변환합니다

그것은 붙여 넣습니다 그래서 내가 지금 이야기하고 싶은 것은 단지 모든 Kotlin 구문 기본에 대한 개요 우리는 오늘 코드 랩에서 사용할 것입니다 따라서이 함수 선언을 살펴볼 수 있습니다 바로 여기, 우리는 단계적으로 그것을 거치게 될 것입니다 따라서 Kotlin에서 함수를 정의하고 싶을 때, 재미있는 핵심 단어로 정의됩니다

그래서 여기에 함수, 합, a와 b 두 개의 매개 변수가 있습니다 매개 변수에는 유형이 있습니다 a는 정수 유형이고 b는 정수 유형입니다 그리고 이것은 코 틀린 (Kotlin) 전체에 공통된 구문입니다 변수 선언 다음에 변수의 유형을 넣으십시오

따라서 이것은 자바 프로그래밍과는 다릅니다 언어, 분명히 다른 방법입니다 비슷하게, 함수의 리턴 타입 인수 뒤에 나열됩니다 따라서 두 개의 매개 변수가있는 함수 합계입니다 정수를 반환합니다

그리고 Kotlin에 대한 또 다른 멋진 기능 세미콜론은 선택 사항입니다 JavaScript와 마찬가지로 Kotlin의 디자이너 우리가 수 년 동안 우리가 코드에 세미콜론을 넣거나 세미콜론을 넣지 않아야합니다 아니요, Kotlin 코드에 세미콜론을 넣으면 안됩니다 가지고있는 반 패턴으로 간주됩니다 세미콜론은 Kotlin 코드에 있습니다

한 줄 구문으로 함수를 정의 할 수도 있습니다 당신이 여기에서 볼 수 있습니다 여기서는 함수 합을 정의합니다 다시 두 개의 매개 변수를 취하고 더하기 b를 반환합니다 그래서 그것은 바로 그 표현입니다 그리고 우리는 할당 연산자를 순서대로 사용합니다

이 방법으로 함수를 정의하십시오 언제든지 사용할 수 있습니다 당신은 함수를 정의하기를 원한다 이와 같은 단일 표현식으로 구성됩니다 여러 개의 표현식을 만들고 싶다면, 중괄호 구문을 사용해야합니다

우리가 잘 알고있는 Kotlin은 기본 인수도 제공합니다 예를 들어, 우리는 함수, 합, 대개 두 개는 정수 유형을가집니다 기본값은 2입니다 그래서 당신이 이것을 부를 때마다, 당신이 인수를 지정하지 않으면 기본적으로 2로 설정됩니다

다음은 변수 선언에 대해 설명하겠습니다 여기서는 두 변수를 정의하고 있습니다 이름이 불렀다 다른 하나는 참석자라고합니다 이름은 val이고 참석자는 var입니다

그래서이 이름은 JavaScript와 비슷합니다 그래서 나는 다른 문자열을 지명 할 수 없다 니키타가 영원 할거야 참석자는 변경할 수 있습니다 그래서 나는 그것을 인스턴스화하는 배열리스트에 할당한다

하지만 나중에 내 소스 코드에서 할 수있어 그것을 다른 배열 목록에 지정하십시오 그래서 가변 변수입니다 Kotlin은 실제로 Kotlin과 Java의 차이점이 있습니다 프로그래밍 언어가 Kotlin에 추가됨 val은 Kotlin에서 변수를 정의하는 데 선호되는 방법입니다

이 슬라이드에는 몇 가지 다른 구문이 있습니다 새로운 배열리스트를 만들 때 볼 수 있습니다 우리는 새로운 키워드를 부르지 않는다 사실, Kotlin에는 새로운 키워드가 없습니다 클래스를 생성하는 것은 함수를 호출하는 것처럼 보입니다

Kotlin에서, 그리고 이것처럼 보입니다 계속 진행중인 또 다른 일은 질문을 보게 될 것입니다 거기에 표시하십시오 이는 해당 문자열이 null이 될 수 있습니다 Kotlin은 null 가능 유형을 소개합니다

이는 기본적으로 String을 작성한 경우를 의미합니다 물음표 없이는 null이 아닌 문자열이됩니다 그리고 그 문자열은 항상 당신에게 보증 할 수 있습니다 내 코드에서 null이 아니며 널 포인터도 얻지 못한다 예외

그것이 nullable다는 것을 말함으로써, 나는 거기에 null을 저장할 수 있습니다 그리고 내가 역 참조 할 때, 나는 특별한 문법을 ​​사용해야합니다 또는 널 포인터 예외가 발생합니다 내가 이야기하고 싶은 다음 이야기 Kotlin의 데이터 클래스입니다 그것들은 많은 코드를 정의하는 간결한 방법입니다

여기서 내가 정의하는 것은 데이터 클래스 접촉입니다 3 개의 필드가 있습니다 이름, 성 및 이메일이 있습니다 Java 프로그래밍 언어에서 동일한 작업을 수행 할 수 있습니다 나는 String first name, String last name, 및 문자열 전자 메일

그리고 세명의 게터와 세터를 써야합니다 그리고 나서 equals 메서드를 작성해야합니다 그리고 toString 메서드를 작성해야합니다 모든 기능이 자동으로 생성됩니다 나를 위해 데이터 클래스를 사용할 때

이것에 관해 정말로 흥미있는 일부 나는 일반적으로 데이터를위한 클래스 몸체를 제공 할 필요가 없다 수업 내가하고있는 일이 평범한 자바 빈을 정의하는 것이라면 이런 식의 물건, 나 그냥 가면 돼 이름의 값을 선언하십시오 성을 의미하는 불변의 것을 의미합니다

또한 불변 인 것을 의미하고, 그 다음 이메일의 var 그리고 그것은 할당 가능한 필드라는 것을 의미합니다 당신이 바닥에서 보는 것처럼 이메일에 지정할 수 있습니다 이 결론에 대해 생각할 수도 있습니다

나는 현장에 직접 지정하고있다 나는 실제로 세터에게 전화하고있다 그리고 이것은 Kotlin에 대한 멋진 부분입니다 getter와 setter 모두에 대해 암시 적으로 호출되며, C #이나 Swift 같은 언어와 비슷합니다 에서이 구문을 보았습니다

Kotlin에서 흥미로운 한 가지 자바 프로그래밍에 관해서는, 종종 Java에서는 수명주기가 있습니다 Android 라이프 사이클과 관련이 있습니다 따라서 우리는 활동주기가 다릅니다 활동 개체보다 그래서 객체에는 분명히 생성자가 있습니다 그리고 나서 우리는 활동을 시작했습니다

이는 다른 방법입니다 Kotlin은 클래스의 모든 null이 아닌 변수가 필요합니다 constructor의 말미에 의해 초기화된다 예를 들어, 공유 할 때 문제가 될 수 있습니다 생성자가 끝난 후 환경 설정

여기서 우리는 SharedPreferences를 만들 수있는 예제를 볼 수 있습니다 variable null 가능 그리고 우리가 접근 할 때, 우리는 더블 뱅 (double bang)을 사용하거나 확인을 위해 if 체크를해야한다 우리가 액세스 할 때마다, 우리가 널 (null) 변수에 액세스합니다 코 틀린에서 이것을 쓰는 더 좋은 방법은 – 안드로이드에서 우리가 할 일이 많습니다

lateinit을 사용하는 것입니다 그래서 한 lateinit 말한다 – 조금 이상한 구조입니다 그러나 이것이 실제로 의미하는 것은,이 SharedPreferences 내가 액세스 할 때 null이 아니게 될 것입니다 그러나 나는 그것을 끝내겠다고 보장 할 수는 없다 생성자가 끝날 때까지 그래서이 변수에 접근하기 전에 어느 시점에서, 저는 컴파일러에게 약속하지 않을 것입니다

따라서 null 허용 여부 검사를 완화 할 수 있습니다 하지만 그것을 지정하도록 강요하지 않을거야 생성자가 완료되기 전에 해당 필드를 실제로 초기화하지 않은 경우 그것을 액세스하면 다른 런타임 예외가 발생합니다 그래서 그것은 실제로 null 포인터 예외를 만들지 않습니다

여기까지 완전히 가버 리지 만 분명히 문서화되어있다 당신이하려는 일 여기서는 구문에 대한 기본적인 내용을 다루었습니다 코드 랩으로 돌아갈 시간입니다 3 단계를 거치면 방금 전에 말한 몇 가지 단계를 수행하십시오

일부 언어 구문을 사용하십시오 [음악 재생] 그래서 나는 한 쌍의 사람들에게서 한 가지 질문을했다 사실, Kotlin은 실제로 Java로 컴파일하기 전에 바이트 코드로 컴파일합니까? 그리고 답은 Kotlin이 직접 바이트 코드로 컴파일합니다 JVM-6 호환 바이트 코드를 생성하고, 또한 약간의 추가 정보를 추가합니다 바이트 코드로 Kotlin 언어의 일부를 지원한다

구문에 실제로 저장되는 구문 바이트 코드 파일의 헤더에있는 버퍼 따라서 자바에 대한 Kotlin과 같은 바이트 코드는 없습니다 Bytecode에 Kotlin, 바이트 코드에 Java, 그런 다음이 둘을 연결합니다 지금 제가 이야기하고 싶은 것은 Kotlin 뷰 바인딩입니다 Android 확장 플러그인입니다

JetBrains에서 온 것입니다 또한 합성 속성을 사용하여 뷰에 액세스 할 수 있습니다 그래서 우리는 이미 자바에서 이것을하기위한 라이브러리를 가지고 있습니다 프로그래밍 언어 아마 우리 모두는 버터 나이프를 보았을 것입니다

여기서 ID로 찾아보기를 건너 뛸 수 있습니다 이것은 매우 유사한 아이디어입니다 ID로 찾기 창을 건너 뛸 수 있습니다 Kotlin 컴파일러는 컴파일 시간에이를 수행 할 것이며, lazy 할당 및 캐싱을 제공합니다 그래서 저는 앞으로 나아가서 걸어 갈 것입니다

여기 몇 가지 슬라이드에서 뷰 바인딩을 사용하는 방법을 설명합니다 그래서 앱 수준의 Gradle 파일에서 이것들은 4 단계의 단계들입니다 우리는 계속해서 플러그인을 적용합니다 kotlin-android-extensions 그리고 우리가 그것을 할 때, 그것은 가고 있습니다

kotlinx 네임 스페이스에 합성 게터를 생성합니다 그래서 kotlinxandroidsynthetic입니다 그리고 이제 우리는 코드를 작성합니다

mainactivity_contacts가 있습니다 이것이 우리가 정의한 레이아웃 파일입니다 그리고 거기에서 우리는 전망을 얻을 수 있습니다 예를 들어 activity_contacts

xml을 with로 선언 한 경우 플로팅 액션 버튼이 있으며 ID가 있습니다 이것은 꽤 전형적인 코드입니다 수업 시간에 이것을 사용하고 싶을 때, ID로 찾아보기를 사용하는 대신 또는 contacts_activity에 대한 속성을 정의 할 수도 있습니다 나는 그냥 가서 FAB 액세서리를 사용할 수 있습니다 그리고 그것은 종합적으로 추가되었습니다

정적 가져 오기를 수행하면됩니다 ID로 찾기보기를 캐싱 할 것입니다 그래서 내가 FAB에 처음 접근했을 때, 그것을 찾기 위해 뷰 ID를 찾을 것입니다 그리고 나서 나는 그것을 액세스 할 때마다, 같은 인스턴스를 사용합니다 그리고 그것을 해시 맵에 캐시합니다

어제 Kotlin 이야기에서 우리는 많이 이야기했습니다 확장 기능에 대해 그래서 당신이 그것을 보지 못했다면 그것은 YouTube에 올라와 있습니다 어서보세요 오늘, 우리는 우리 자신의 확장의 일부를 정의 할 것입니다

이 코드 랩의 기능 오늘 확장 기능을 활성화하겠습니다 이 고전적인 패턴을 자바에서 보아서 프로그래밍 언어 기본적으로 isTuesday라는 메소드를 추가 할 것입니다 Date 클래스에 추가합니다 그래서 자바에서는 이것을 DateUtils라고 씁니다

우리는 정적 인 방법을 사용합니다 부울을 반환합니다 그것은 화요일이며 유일한 인수로서 날짜를 취합니다 그리고 이것은 멤버 함수처럼 보입니다 당신이 그것에 대해 생각한다면

자바에서 이것을 호출하면 DateUtilsisTuesday, date라고 말하십시오 어색한 구조에 불과합니다 하지만 모든 코드베이스에서 수행 한 작업입니다 그리고 그것은 정말로 잘 작동합니다

따라서 Kotlin은 확장 기능과 확장 기능을 제공합니다 속성을 사용하여 더 나은 구문 지원을 제공합니다 확장 기능은 확장 기능입니다 기존 클래스의 다른 멤버 추가 이미 존재하는 클래스로 마찬가지로, 확장 속성은 getter와 setter를 추가 할 수 있습니다 이미 존재하는 클래스로 여기에서는 정의 및 호출 구문을 볼 수 있습니다

확장 기능 그래서 우리는 함수를 정의하고 있습니다, isTuesday, that Date 클래스의 메서드입니다 그런 다음 인라인 할당을 사용하고 있습니다 to say 하루에 두 번이나 true로 돌아갑니다 형식 유추 때문에 우리는 함수의 반환 유형을 지정해야합니다

그리고 우리가 그것을 부를 때, 우리는 데이트를 말한다 그래서 그것은 클래스의 멤버 메소드처럼 보입니다 그러나 실제로 Date 클래스를 수정하지는 않습니다 따라서 이것이 확장 기능을 이해하는 데 핵심입니다 코 틀린

우리가이 모든 마술을하고있는 것처럼 보입니다 우리는 수업을 열고 방법을 추가하고 있습니다 그러나 우리는 그렇게하지 않습니다 따라서 Date 클래스는 다시 컴파일되지 않습니다 우리는 그것에 방법을 추가하지 않습니다

방금 isTuesday라는 정적 메서드를 정의했습니다 이는 date 매개 변수 인 단일 인수를 취합니다 Kotlin은 약간의 추가 구문을 제공합니다 이런 식으로 부르기 위해서 그래서 우리 코드는 Kotlin에서 이렇게 보입니다

그러나 실제로 우리는 수업을 열지 않았습니다 그리고 그것은 또한 전화가 어떻게 이것에 대한 의미론이 작용합니다 다음으로 얘기하고자하는 것은 람다 표현식입니다 그래서 저는 방금 람다 식을 가지고 있습니다 여기에 화면에

그리고 우리는 구문을 살펴볼 것입니다 읽고 쓰는 법, 쓰는 법 그래서 첫 번째 줄 -이 첫 번째 줄 실제로 자체적으로 모든 것을 컴파일하지는 않지만, 그러나 이야기하는 것이 유용합니다 그것은 람다 식입니다 우리는 외부에 중괄호가 있기 때문에 말할 수 있습니다

가운데에있는 화살 그리고 왼쪽에는 두 개의 인수 a와 b가 있습니다 그리고 오른쪽에는 표현 a plus b가 있습니다 그래서 이것은 두 개의 인수를 취하는 함수입니다 함께 추가합니다

우리가 컴파일하지 않았기 때문에 컴파일되지 않습니다 a와 b에 대한 유형을 제공했습니다 그래서 우리는 다음 라인으로 넘어갈 것입니다 우리는 a를 정수로, b를 정수로 정의했습니다 그래서 우리가 이것에 대해 생각한다면, 우리는 이제 더하기 b라고 말할 수 있습니다

우리는 그 람다의 리턴 타입을 지정할 필요가 없다 Kotlin에서는 정수와 정수가 항상 정수입니다 그런 다음 합계에 할당하고 우리가 유형을 제공 할 필요가없는 것을보십시오, sum은 리터럴 표현식에서 유형을 추론 할 수 있기 때문에 그것은 오른쪽에 있습니다 다음 줄, 세 번째 줄에는 합이 있습니다 여기서 sum 변수 자체에 대한 유형을 정의했습니다

그것은 두 개의 정수를 취하는 모든 함수를 말합니다 정수를 생성합니다 그 문법이 있습니다 괄호 안에는 매개 변수의 유형, 당신은 화살을 넣은 다음 오른쪽에, 함수의 반환 형식을 나열합니다 그런 다음 그것을 객체 리터럴 인 우리의 람다에 할당합니다

우리가 첫 번째 줄에 가지고 있었던 이제 컴파일되는 것을 볼 수 있습니다 타입 유추를 사용할 수 있기 때문에 그 유형을 통해 오른쪽에 매개 변수를 정수 및 정수로 정의했습니다 그리고 이제 a는 정수입니다 왜냐하면 우리는 그것이 있어야하는 맥락에서 그것을 사용했다

그리고 b는 정수입니다 왜냐하면 우리는 그것이 있어야하는 맥락에서 그것을 사용했다 그리고 다시, 우리는 여전히 돌아갈 필요가 없습니다 – 람다의 반환 유형을 말할 필요가 없습니다 그리고 마지막 줄에서 조금 더 보여줍니다 실용적인 람다의 값 notEmpty

따라서 텍스트 뷰를 사용하고 Boolean을 반환합니다 그리고 이것은 흥미로운 부분을 보여줍니다 Kotlin에서 람다 구문의 그래서이 경우에는 실제로는 아니에요 화살표 구문을 제공하거나 매개 변수의 이름을 지정합니다

하나의 매개 변수 λ에 대한 값을이 매개 변수라고합니다 그건 기본적으로입니다 항상 이름을 바꿀 수 있습니다 하지만이 경우에는 그냥 그대로 두겠습니다 그래서, 우리는 it

textisNotEmpty라고 말합니다 그래서 우리가 시작할 때 정말 빛나는 곳입니다 익명의 내부 클래스를 수행합니다 그래서 우리는 자바 프로그래밍 언어로 항상 이것을합니다

우리는 setOnClickListener를합니다 그리고 그 모든 것을 읽으면 매우 길어질 것입니다 그러나 결국에는 onClick 메서드를 재정의합니다 그리고 여기에 쓰고있는 유일한 실제 코드 performAction입니다 그 밖의 모든 것은 실제로 코드가 아닙니다

그것은 나를 위해 생성하는 IDE를 가져야 만하는 물건입니다 그래서 내가 쓰려고하는 코드를 작성할 수 있습니다 Kotlin에서는 람다를 사용하여 말하려고했다 이것이 우리가 할 수있는 일입니다 우리는 fab

setOnClickLIstener, 그리고 나서 우리는 문자 그대로 우리가 말하려고했던 코드를 작성합니다 우리는 그 여분의 것들을 모두 제거 할 수 있습니다 그리고 주변에 머물러 있습니다 형식 유추를 계속 사용합니다 훨씬 더 간결하며 Java 8과 매우 비슷합니다

람다 구문 람다가 정말 강력 해지는 곳 우리가 그들을 더 높은 순서대로 사용하기 시작할 때입니다 우리는 이미 이것의 예를 보았습니다 하지만 다른 함수를 사용하는 함수입니다 그것의 논증으로

그리고 이것은 여러분이 할 수있는 것입니다 Kotlin을 사용하여 코드를 매우 멋지게 만드십시오 읽기 쉽고 매우 표현적입니다 따라서 고차 함수의 고전적인 예 1970 년부터는 필터 방법이 있습니다 따라서 필터 메서드는 목록에 대해 작동합니다

그래서 당신은 목록을 가지고 있습니다 당신은 술어를줍니다 그리고 술어가 사실 일 때마다, 값을 포함하는 새 목록을 생성합니다 필터가 참인 곳 이제이 선언문을 읽으십시오

Kotlin 구문이 많이 표시되기 때문입니다 그래서 그것은 기능입니다 그것은 일반적인 유형 T를 가지고 있으며, 그것은 T의 목록에 대한 확장입니다 그리고 이것은 흥미로운 일입니다 왜냐하면 당신이 정의 할 수 있기 때문입니다

제네릭 형식의 확장 이것은 정말로, 정말로 할 수있는 일입니다 영리한 물건 T 물음표로 정의 할 수도 있습니다 내가 T에 확장을 정의하고 싶다

또는 T의 널값 그런 다음 filter라는 함수를 정의 할 것입니다 하나의 술어를 취합니다 그리고 나서 우리는 그것이 T 형의 1 개의 인수를 취하는 함수 부울을 반환합니다 그리고 마지막으로, 물론, 우리의 기능 T의 목록을 반환합니다

그리고 함수 안에서, 새 배열 목록을 만듭니다 그리고 항목에 대한 술어를 호출합니다 술어가 참일 때마다 새 목록에 추가합니다 그런 다음 새 목록을 반환합니다 그래서 우리가 앞서 가서 이것을 사용하려고 시도한다면, we''d는 listOf를 말한다

그것은 Kotlin의 길이다 정적 목록, 애플, 오렌지, 셀러리, 당근을 선언합니다 그리고 나서 우리는 바구니에 넣을거야 여과기 다시 말하지만, 코드를 단축하는 데 사용합니다

첫 번째 문자가 C이면 우리는 그냥 셀러리와 당근 목록을 생성하려고합니다 특히 그렇게 강하지는 않습니다 우리 모두가 루프를 쓸 수 있다고 생각해 앞으로 나아가서 우리 스스로 할 수 있습니다 그러나 우리는 훨씬 더 표현적인 것을 쓸 수 있습니다

우리가 이와 같은 보편적 인 코드를 시작할 때 이것은 데이터베이스 트랜잭션을 수행하는 방법의 예입니다 [? 방 ?] 거래를 시작해야합니다 실제 데이터베이스를 호출해야합니다

당신이하고 싶은 기능, 그리고 당신 끝내야 해 거래 그리고 당신이 그것을 더 잘하고 싶다면, 당신은 beginTransaction, call을해야합니다 당신이하고 싶은 함수, setTransactionSuccessful, 그런 다음 거래를 끝내십시오 다시 한번, onClickListener와 마찬가지로, 실제로 여기에는 실제 코드가 한 줄만 있습니다

그 밖의 모든 것들은 내가 방금하는 물건입니다 타이핑 및 / 또는 다른 수단을 통한 생성 자바 프로그래밍 언어가 작동하는 방식 때문에, 이것을 단순화하고 그것을 돌리기는 어렵다 추상화 하지만 Kotlin에서 우리는 실제로 꽤 잘 갈 수 있습니다

꽤 멀리 그래서 Kotlin에서 우리는 SQLite 데이터베이스 endTransaction을 할 수 있습니다 그래서 우리는 확장 함수를 할 것입니다 우리 데이터베이스에 그리고 우리는 그 모든 보일러 판을 정확히 놓을 것입니다

같은 방식으로 그래서 beginTransaction, setTransactionSuccessful, 및 endTransaction 하지만 우리는 그 모든 것을 쓰지 않고 우리가 작성하려고하는 모든 코드 라인을 중심으로, 우리는 코드 줄을 지나갈 것입니다 함수 인수에서 람다 (lambda)로 따라서 함수 – 인자를 취하지 않는 함수 값을 반환하지 않습니다

그래서 우리가 그것을 사용할 때, 이것처럼 보입니다, 그렇죠? 그래서 우리는 dbinTransaction을 말하고 우리는 람다를 전달합니다 그리고 나서 우리는 실제로 우리가 작성한 코드만을 씁니다 쓰기를 시도합니다 자, 이건 좀 이상해

우리가 우리의 람다 내부에서 데이터베이스에 액세스 그리고 lambda는 함수 리터럴입니다 그래서 그것에 대해 생각한다면 그것은 의미합니다 나는 끝내기 위해 폐쇄를해야 할 것입니다 해당 데이터베이스 변수

우리가 할 수있는 또 다른 방법은 함수에 데이터베이스를 전달할 수 있습니다 이 경우 함수를 SQLite로 정의합니다 SQLite 데이터베이스를 사용하고 아무 것도 반환하지 않는 함수 그래서 우리가 그렇게한다면 그것은 이렇게 보일 것입니다 db

inTransaction, itdelete 괜찮아요하지만 그건 나는 아직도 조금 이상하다고 생각한다 우리는 더 잘 할 수 있습니다 함수를 정의하는 바로이 구문 우리가 확장 람다라고 부르는 것입니다 확장 기능으로 작동하는 부동 함수입니다 기능

이렇게하면 확장 기능을 호출 할 수 있습니다 SQLite 데이터베이스 유형의 모든 객체에서 이 경우 암시적인 this를 사용합니다 우리의 확장 함수에서 thisfunc를 호출하십시오

그런 다음 다른 코드에서 dbinTransaction이라고 말할 수 있습니다 이제 데이터베이스에서 함수를 호출 할 수 있습니다 나는 그것을 사용하고 싶었다 도메인 별 언어의 시작 부분이 생성됩니다

Kotlin에서는 매우 강력합니다 코드에 대해 언급하고 싶은 것이 있습니다 그래도 우리는 여기에있다 이 코드를 컴파일하면 어떻게 될까요? 그런 다음 디 컴파일하십시오 우리는 이것으로 끝난다

그리고 조금 더러워 보이지만, 정말 중요한 것은 inTransaction을 호출 할 때입니다 새로운 함수 객체를 생성하고, 왜냐하면 매번 인수를 포착해야하기 때문입니다 Kotlin에서 함수를 작성할 때 당신은 람다 (lambda)를 취하는 고성능이 될 것이라고 생각합니다 인라인 키워드를 사용해야합니다 따라서 인라인 키워드를 사용할 수 있습니다

지정시 수행 할 작업 인라인은 실제로 소스 코드를 수행합니다 당신이 그 기능을 부를 때마다 이렇게하면 인라인과는 많이 다른 것입니다 C ++와 같은 다른 언어에서 익숙하다 Kotlin에서 인라인 함수를 호출하면 보장됩니다 – 그것은 힌트와 같지 않다 문자 적 요구 사항입니다

당신은 당신의 기능이 보장됩니다 인라인 함수의 본문 전화 사이트에서 제자리에 떨어 뜨리다 해당 인라인 함수를 호출 할 때마다 자, 이제 코드 랩을 끝내자 그래서 당신이 남긴 모든 조치 그리고 나는 모두에게 물어보고 싶었다

전에 3-5 분 정도 걸릴거야 이 파란색 탭의 피드백 양식을 여기에 작성하십시오 우리는 여러분이 코 틀린에 대해 어떻게 생각하는지 알고 싶습니다 우리가 앞으로 나아갈 것을보고 싶은 곳 그리고 Kotlin 사례 연구에 관심이 있다면, 가서 나하고 말해

나는 걸어 다닐거야 고맙습니다 [박수 갈채] [음악 재생]