เพิ่ม Kotlin ในแอปที่มีอยู่

Android Studio มีการรองรับ Kotlin อย่างเต็มรูปแบบ ซึ่งช่วยให้คุณเพิ่ม ไฟล์ Kotlin ไปยังโปรเจ็กต์ที่มีอยู่และแปลงไฟล์ภาษา Java เป็น Kotlin จากนั้นคุณจะใช้เครื่องมือที่มีอยู่ทั้งหมดของ Android Studio กับโค้ด Kotlin ได้ ซึ่งรวมถึงการเติมข้อความอัตโนมัติ การตรวจสอบ Lint การเปลี่ยนโครงสร้างภายในโค้ด การแก้ไขข้อบกพร่อง และอีกมากมาย

หากคุณเริ่มโปรเจ็กต์ใหม่และต้องการใช้ Kotlin โปรดดู สร้างโปรเจ็กต์

ดูตัวอย่างได้ที่ ตัวอย่างโค้ด Kotlin

เพิ่ม Kotlin ลงในโปรเจ็กต์ที่มีอยู่

วิธีเพิ่ม Kotlin ลงในโปรเจ็กต์ของคุณมีดังนี้

  1. คลิกไฟล์ > ใหม่ แล้วเลือกเทมเพลต Android แบบต่างๆ เช่น เป็นส่วนย่อยที่ว่างเปล่าใหม่ ดังที่แสดงในรูปที่ 1 หากไม่เห็นรายการ ของเทมเพลตในเมนูนี้ ให้เปิดหน้าต่างโครงการก่อน แล้วเลือก โมดูลแอป

    วันที่ สร้างส่วนย่อยใหม่ที่ว่างเปล่า
    รูปที่ 1 เลือกจากเทมเพลตที่มีอยู่ เช่น ส่วนย่อย หรือกิจกรรมบางอย่าง
  2. ในวิซาร์ดที่ปรากฏขึ้น ให้เลือก Kotlin สำหรับภาษาต้นฉบับ รูปที่ 2 แสดงกล่องโต้ตอบกิจกรรม Android ใหม่เมื่อคุณต้องการ สร้างกิจกรรมใหม่

    วันที่ กล่องโต้ตอบที่ให้คุณเลือก Kotlin สำหรับภาษาต้นฉบับ
    รูปที่ 2 กล่องโต้ตอบกิจกรรมใหม่บน Android ที่คุณสามารถ เลือก Kotlin เป็น Source Language ของคุณ
  3. ดำเนินการต่อในวิซาร์ด

หรือคลิก ไฟล์ > ใหม่ > ไฟล์/คลาส Kotlin เพื่อสร้าง Kotlin พื้นฐาน หากไม่เห็นตัวเลือกนี้ ให้เปิดหน้าต่างโปรเจ็กต์ และ ให้เลือกไดเรกทอรี java หน้าต่างไฟล์/ชั้นเรียน Kotlin ใหม่ช่วยให้คุณ กำหนดชื่อไฟล์และให้ตัวเลือกที่หลากหลายสำหรับประเภทไฟล์ ได้แก่ File, Class, Interface, Enum Class หรือ Object สิ่งที่คุณเลือก จะกำหนดโครงสร้างพื้นฐานที่สร้างขึ้นสำหรับคุณในไฟล์ Kotlin ใหม่ หากคุณ เลือกชั้นเรียน Android Studio จะสร้างไฟล์ต้นฉบับ Kotlin ใหม่ด้วย ชื่อ และคำจำกัดความของคลาสที่ตรงกัน หากคุณเลือกอินเทอร์เฟซ อินเทอร์เฟซ มีการประกาศในไฟล์ และอื่นๆ

หากเพิ่มคลาสหรือไฟล์ Kotlin ใหม่ไปยัง โปรเจ็กต์โดยตรง (ไม่ใช้เทมเพลต Android) Android Studio จะแสดง คำเตือนว่าไม่มีการกำหนดค่า Kotlin ในโปรเจ็กต์ดังที่แสดงในรูปที่ 3 กําหนดค่า Kotlin โดยคลิกกําหนดค่าที่มุมขวาบนของ เครื่องมือแก้ไขหรือในการแจ้งเตือนบันทึกเหตุการณ์ที่ปรากฏขึ้นที่มุมขวาล่าง

วันที่ กล่องโต้ตอบคำเตือนที่แจ้งให้คุณกำหนดค่า Kotlin สำหรับ
      โปรเจ็กต์
รูปที่ 3 Android Studio แสดงกล่องโต้ตอบคำเตือนเมื่อ Kotlin ไม่ได้กำหนดค่าสำหรับโปรเจ็กต์

เลือกตัวเลือกเพื่อกำหนดค่า Kotlin สำหรับโมดูลทั้งหมดที่มี Kotlin เมื่อได้รับข้อความแจ้ง ดังที่แสดงในรูปที่ 4

วันที่ เลือกเพื่อกำหนดค่า Kotlin สำหรับโมดูลทั้งหมดที่มีโค้ด Kotlin
รูปที่ 4 เลือกเพื่อกำหนดค่า Kotlin สำหรับโมดูลทั้งหมดที่มี โค้ด Kotlin

เมื่อคุณคลิกตกลง Android Studio จะเพิ่ม Kotlin ลงในโปรเจ็กต์ Classpath และ ใช้ปลั๊กอิน Kotlin Android กับแต่ละโมดูลที่มีไฟล์ Kotlin ไฟล์ build.gradle ของคุณควรมีลักษณะคล้ายกับตัวอย่างด้านล่าง

ดึงดูด

// Project build.gradle file.
buildscript {
    ext.kotlin_version = '1.4.10'
    ...
    dependencies {
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
    }
}

Kotlin

// Project build.gradle.kts file.
buildscript {
    extra["kotlin_version"] = "1.4.10"
    ...
    dependencies {
        classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version")
    }
}

ดึงดูด

// Inside each module using kotlin
plugins {
    ...
    id 'kotlin-android'
}

...

dependencies {
    implementation 'androidx.core:core-ktx:1.3.2'
    implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
}

Kotlin

// Inside each module using kotlin
plugins {
    ...
    kotlin("android")
}

...

val kotlin_version: String by rootProject.extra

dependencies {
    implementation("androidx.core:core-ktx:1.3.2")
    implementation("org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version")
}

องค์กรต้นทาง

โดยค่าเริ่มต้น ระบบจะบันทึกไฟล์ Kotlin ใหม่ใน src/main/java/ ซึ่งช่วยให้ง่ายขึ้น เพื่อดูทั้งไฟล์ Kotlin และ Java ในที่เดียว หากคุณต้องการแยก ไฟล์ Kotlin จากไฟล์ Java คุณสามารถวางไฟล์ Kotlin ไว้ในส่วน src/main/kotlin/ แทน หากคุณทำเช่นนี้ คุณต้องใส่ ไดเรกทอรีใน sourceSets ของคุณ การกำหนดค่า ตามที่แสดงด้านล่าง

ดึงดูด

android {
    sourceSets {
        main.java.srcDirs += 'src/main/kotlin'
    }
}

Kotlin

android {
    sourceSets {
        getByName("main") {
            java.srcDir("src/main/kotlin")
        }
    }
}

แปลงโค้ด Java ที่มีอยู่เป็นโค้ด Kotlin

ในการแปลงโค้ด Java เป็น Kotlin ให้เปิดไฟล์ Java ใน Android Studio แล้วเลือก รหัส > แปลงไฟล์ Java เป็นไฟล์ Kotlin หรือสร้าง Kotlin ใหม่ (File > New > Kotlin File/Class) แล้ววางโค้ด Java ลงใน ไฟล์นั้น จากนั้น Android Studio จะแสดงข้อความแจ้งและข้อเสนอให้แปลงโค้ดของคุณ กับ Kotlin ดังที่แสดงในรูปที่ 5 คลิกใช่เพื่อแปลง คุณสามารถเลือก ให้เลือกอย่าแสดงกล่องโต้ตอบนี้ในครั้งถัดไป ซึ่งจะทําให้เกิด Conversion ในอนาคต อัตโนมัติ

วันที่ เลือกเพื่อกำหนดค่า Kotlin สำหรับโมดูลทั้งหมดที่มีโค้ด Kotlin
รูปที่ 5 Android Studio แปลงโค้ด Java เป็น Kotlin ได้

การแปลงโค้ดและความสามารถในการเว้นว่าง

กระบวนการแปลงของ Android Studio สร้างโค้ด Kotlin ที่มีฟังก์ชันการทำงานเทียบเท่ากับฟังก์ชันต่างๆ ที่คอมไพล์และเรียกใช้ อย่างไรก็ตาม คุณอาจต้องเพิ่มวิธีการชำระเงินเพิ่มเติม การเพิ่มประสิทธิภาพไปยังโค้ดที่แปลงแล้ว เช่น คุณอาจต้องการปรับแต่งวิธี โค้ดที่แปลงแล้วจะจัดการประเภทที่ไม่มีข้อมูล

ใน Android เป็นเรื่องปกติที่จะชะลอการเริ่มต้นของออบเจ็กต์ View และออบเจ็กต์อื่นๆ จนกว่าส่วนย่อยหรือกิจกรรมที่จะแนบไว้ไปถึง สถานะที่เหมาะสมของวงจร ตัวอย่างเช่น คุณอาจมีการอ้างอิงถึง ในส่วนย่อยของคุณ ดังที่แสดงในข้อมูลโค้ดต่อไปนี้

public class JavaFragment extends Fragment {

    // Null until onCreateView.
    private Button button;

    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        View root = inflater.inflate(R.layout.fragment_content, container,false);

        // Get a reference to the button in the view, only after the root view is inflated.
        button = root.findViewById(R.id.button);

        return root;
    }

    @Override
    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);

        // Not null at this point of time when onViewCreated runs
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                ...
            }
        });
    }
}

แม้ว่าตัวแปรของปุ่มจะเป็นค่าว่าง แต่สำหรับวัตถุประสงค์ในทางปฏิบัติทั้งหมด ไม่ควรเป็นค่าว่างเมื่อใช้ในตัวอย่างนี้ แต่เนื่องจากค่าของเมตริกไม่ใช่ กำหนดไว้ ณ เวลาที่สร้าง โค้ด Kotlin ที่สร้างขึ้นจะถือว่า Button เป็นประเภท Null และใช้โอเปอเรเตอร์การยืนยันที่ไม่เป็นค่าว่างเพื่อแยกปุ่ม เมื่อเพิ่ม Listener การคลิก ดังที่แสดงด้านล่าง

class JavaFragment : Fragment() {

    // Null until onCreateView.
    private var button: Button? = null

    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
            savedInstanceState: Bundle?): View? {
        ...
        // Get a reference to the button in the view, only after the root view is inflated.
        button = root.findViewById(R.id.button)
        ...
    }

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)

        // Not null at the point of time when onViewCreated fires 
        // but force unwrapped nonetheless
        button!!.setOnClickListener { }
    }
}

Conversion นี้เหมาะสมน้อยกว่าการใช้ lateinit สำหรับกรณีนี้เนื่องจากคุณ ถูกบังคับให้แยกการอ้างอิงปุ่มด้วยการยืนยันที่ไม่เป็นค่าว่างหรือ Safe-Call ในทุกที่ที่มีการเข้าถึง

ในกรณีอื่นๆ ซึ่ง null คือการกำหนดตัวแปรที่ถูกต้องตาม Use Case ของแอปพลิเคชัน โดยใช้โอเปอเรเตอร์ Safe-Call (?.) ที่มีการสิ้นสุดของ Elvis โอเปอเรเตอร์ (?:) อาจเป็นวิธีที่เหมาะสมกว่าในการแกะ ออบเจ็กต์ที่ไม่มีข้อมูลหรือบังคับให้เป็นค่าเริ่มต้นที่เหมาะสมที่ไม่เป็นค่าว่าง Android Studio มีข้อมูลไม่เพียงพอที่จะพิจารณาในระหว่าง Conversion แม้ว่าจะมีค่าเริ่มต้นเป็นการยืนยันสิทธิ์ที่ไม่เป็นค่าว่าง แต่คุณควร ติดตามและปรับเปลี่ยนโค้ดที่แปลงแล้วตามที่จำเป็น

ข้อมูลเพิ่มเติม

สําหรับข้อมูลเพิ่มเติมเกี่ยวกับการใช้ทั้งโค้ด Kotlin และ Java ในโปรเจ็กต์ของคุณ โปรดดู การเรียกใช้โค้ด Java จาก Kotlin

ดูข้อมูลเพิ่มเติมเกี่ยวกับการใช้ Kotlin ในสถานการณ์ขององค์กรได้ที่ การใช้ Kotlin สำหรับทีมขนาดใหญ่

สำหรับข้อมูลเกี่ยวกับ Wrapper ของ Kotlin ที่มีลักษณะเฉพาะสำหรับ Android API ที่มีอยู่ โปรดดู Android KTX