0Pricing
Kotlin Academy · บทเรียน

การสร้างซอร์สไฟล์ Kotlin ด้วย KotlinPoet

ใช้ KotlinPoet ภายในตัวประมวลผล KSP เพื่อสร้างโค้ด Kotlin ที่ปลอดภัยด้านชนิด

การสร้างซอร์สไฟล์ Kotlin ด้วย KotlinPoet เป็นบทเรียน Kotlin Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Kotlin Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Kotlin Academy มีบทเรียนทั้งหมด 4 บทเรียน

KotlinPoet คืออะไร

KotlinPoet คือส่วนเชื่อมต่อของโคทลินจากสแควร์สำหรับสร้างไฟล์ซอร์ส .kt ด้วยโปรแกรม โดยสร้างโค้ดโคทลินที่จัดรูปแบบอย่างดีและเป็นไปตามแนวทางของภาษา พร้อมผสานการทำงานกับ CodeGenerator ของ KSP ได้อย่างเป็นธรรมชาติ

การเพิ่มการพึ่งพา

เพิ่ม KotlinPoet ในโมดูลตัวประมวลผล:

dependencies {
    implementation("com.squareup:kotlinpoet:1.17.0")
    implementation("com.squareup:kotlinpoet-ksp:1.17.0") // KSP extensions
}

FileSpec: รากฐานของไฟล์ที่สร้างขึ้น

FileSpec.builder(packageName, fileName) คือจุดเริ่มต้น ให้เพิ่มชนิดข้อมูล ฟังก์ชัน และพร็อพเพอร์ตีลงไป แล้วเขียนผลลัพธ์ผ่าน CodeGenerator ของ KSP:

val file = FileSpec.builder("com.example.generated", "MyFactory")
    .addType( /* TypeSpec here */ )
    .build()

TypeSpec: การกำหนดคลาส

ใช้ TypeSpec.classBuilder() สำหรับคลาส ใช้ objectBuilder() สำหรับออบเจ็กต์ และใช้ interfaceBuilder() สำหรับอินเทอร์เฟซ จากนั้นเรียกใช้ตัวสร้างต่อเนื่องกันเพื่อเพิ่มฟังก์ชัน พร็อพเพอร์ตี และอินเทอร์เฟซเหนือคลาส:

val classSpec = TypeSpec.classBuilder("MyFactory")
    .addModifiers(KModifier.PUBLIC)
    .addFunction( /* FunSpec */ )
    .build()

FunSpec: การสร้างฟังก์ชัน

FunSpec.builder(name) ใช้สร้างฟังก์ชัน ให้ใช้ addParameter(), returns() และ addStatement() เพื่อสร้างลายเซ็นและเนื้อหาของฟังก์ชัน:

val funSpec = FunSpec.builder("create")
    .addParameter("name", String::class)
    .returns(String::class)
    .addStatement("return "Hello, %L!", name")
    .build()

PropertySpec: การสร้างพร็อพเพอร์ตี

ใช้ PropertySpec.builder(name, type) เพื่อสร้างพร็อพเพอร์ตี ระบุ KModifier.PRIVATE, KModifier.OVERRIDE หรือใช้ mutable() สำหรับ var:

val propSpec = PropertySpec.builder("tag", String::class)
    .initializer("%S", "MyClass")
    .addModifiers(KModifier.PRIVATE)
    .build()

ตัวระบุรูปแบบโค้ด

KotlinPoet ใช้ตัวระบุรูปแบบใน addStatement() และ initializer():

  • %L — ค่าตามตัวอักษร (ไม่มีเครื่องหมายอัญประกาศ)
  • %S — ค่าสตริงตามตัวอักษร (มีเครื่องหมายอัญประกาศ)
  • %T — ชื่อชนิดข้อมูล (จัดการการนำเข้าโดยอัตโนมัติ)
  • %N — ชื่อ (ของข้อกำหนดหรือสตริง)

การนำเข้าอัตโนมัติด้วย %T

เมื่อใช้ %T ร่วมกับ ClassName KotlinPoet จะเพิ่มการนำเข้าที่จำเป็นโดยอัตโนมัติ คุณไม่ต้องเขียนคำสั่งนำเข้าด้วยตนเอง:

val listType = ClassName("kotlin.collections", "List")
val funSpec = FunSpec.builder("items")
    .returns(listType.parameterizedBy(String::class.asTypeName()))
    .addStatement("return emptyList()")
    .build()

การเขียนไปยัง CodeGenerator ของ KSP

ใช้ตัวเชื่อม kotlinpoet-ksp เพื่อเขียน FileSpec ที่สร้างขึ้นผ่าน CodeGenerator ของ KSP พร้อมคงข้อมูลเมตาสำหรับการสร้างแบบเพิ่มทีละส่วนไว้:

file.writeTo(
    codeGenerator = codeGenerator,
    aggregating = false
)

การสร้างฟังก์ชันส่วนขยาย

ใช้ FunSpec.builder(name).receiver(type) เพื่อสร้างฟังก์ชันส่วนขยาย:

val extFun = FunSpec.builder("toJson")
    .receiver(ClassName("com.example", "User"))
    .returns(String::class)
    .addStatement("return Gson().toJson(this)")
    .build()

กรณีใช้งานจริง: ตัวสร้างโรงงาน

ตัวประมวลผล KSP ใส่แอนโนเทชัน @AutoFactory ให้คลาสข้อมูล แล้วใช้ KotlinPoet เพื่อสร้างออบเจ็กต์โรงงานคู่หูสำหรับแต่ละคลาส ไฟล์ที่สร้างขึ้นจะอยู่ในแพ็กเกจเดียวกับคลาสต้นฉบับ

การทดสอบโค้ดที่สร้างขึ้น

ใช้ FileSpec.toString() ของ KotlinPoet ในการทดสอบหน่วย เพื่อตรวจสอบข้อความซอร์สที่สร้างขึ้นโดยไม่ต้องเขียนลงดิสก์ ไลบรารี kotlin-compile-testing-ksp สามารถคอมไพล์และเรียกใช้โค้ดที่สร้างขึ้นในการทดสอบได้

ตรวจสอบความเข้าใจ

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

ทบทวน: การสร้างไฟล์ซอร์ส Kotlin ด้วย KotlinPoet

ประเด็นสำคัญ:

  • FileSpec → ไฟล์ระดับบนสุด; TypeSpec → คลาส/ออบเจ็กต์/อินเทอร์เฟซ; FunSpec → ฟังก์ชัน; PropertySpec → พร็อพเพอร์ตี
  • ใช้ %T สำหรับการอ้างอิงประเภท — ระบบจะเพิ่มอิมพอร์ตให้อัตโนมัติ
  • เขียนไฟล์ผ่าน file.writeTo(codeGenerator) ในตัวประมวลผล KSP
  • ใช้ FileSpec.toString() เพื่อทดสอบเอาต์พุตที่สร้างขึ้น

คำถามที่พบบ่อย

บทเรียน “การสร้างซอร์สไฟล์ Kotlin ด้วย KotlinPoet” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “การสร้างซอร์สไฟล์ Kotlin ด้วย KotlinPoet” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Kotlin Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Kotlin Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “การสร้างซอร์สไฟล์ Kotlin ด้วย KotlinPoet”

ใช้ KotlinPoet ภายในตัวประมวลผล KSP เพื่อสร้างโค้ด Kotlin ที่ปลอดภัยด้านชนิด คุณปฏิบัติ Kotlin Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Kotlin Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Kotlin Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน

บทเรียน “การสร้างซอร์สไฟล์ Kotlin ด้วย KotlinPoet” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Kotlin Academy นี้ได้ไหม

ได้ บทเรียน Kotlin Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. KSP กับ KAPT: เหตุใด KSP จึงเร็วกว่า
  2. การเขียน SymbolProcessor แรกของคุณ
  3. การสร้างซอร์สไฟล์ Kotlin ด้วย KotlinPoet
  4. ผสานตัวประมวลผล KSP เข้ากับบิลด์ Gradle
← กลับไปที่ Kotlin Academy