การสร้างซอร์สไฟล์ 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- KSP กับ KAPT: เหตุใด KSP จึงเร็วกว่า
- การเขียน SymbolProcessor แรกของคุณ
- การสร้างซอร์สไฟล์ Kotlin ด้วย KotlinPoet
- ผสานตัวประมวลผล KSP เข้ากับบิลด์ Gradle