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

พื้นฐาน Data Class: เมธอดที่สร้างอัตโนมัติ

ทำความเข้าใจสิ่งที่ data class สร้างให้ ได้แก่ equals, hashCode, toString และ copy

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

คลาสข้อมูลคืออะไร

คลาสข้อมูล คือคลาสที่มีจุดประสงค์หลักในการเก็บค่า คอมไพเลอร์ Kotlin จะสร้างฟังก์ชัน equals, hashCode, toString, copy และ componentN ให้โดยอัตโนมัติ

การประกาศคลาสข้อมูล

เติม data ไว้หน้าคลาสทั่วไป พารามิเตอร์ทั้งหมดของตัวสร้างหลักต้องเป็น val หรือ var

data class User(val name: String, val age: Int)
fun main() {
    val u = User("Ada", 35)
    println(u)
}

toString ที่สร้างโดยอัตโนมัติ

คอมไพเลอร์จะสร้าง toString ที่แสดงชื่อของพร็อพเพอร์ตีทุกตัว

data class Point(val x: Int, val y: Int)
fun main() {
    println(Point(3, 5)) // Point(x=3, y=5)
}

equals ที่สร้างโดยอัตโนมัติ

equals เปรียบเทียบค่าของพร็อพเพอร์ตีทั้งหมด อินสแตนซ์สองตัวที่มีฟิลด์เหมือนกันจะเท่ากันโดยไม่ขึ้นกับเอกลักษณ์ของการอ้างอิง

data class Coord(val lat: Double, val lng: Double)
fun main() {
    val a = Coord(41.0, 29.0)
    val b = Coord(41.0, 29.0)
    println(a == b)      // true (structural)
    println(a === b)     // false (reference)
}

hashCode ที่สร้างโดยอัตโนมัติ

hashCode สอดคล้องกับ equals กล่าวคือออบเจ็กต์ที่เท่ากันจะให้ค่าแฮชเท่ากัน ดังนั้นคลาสข้อมูลจึงทำงานได้อย่างถูกต้องในเซตและในฐานะคีย์ของแมป

data class Key(val id: Int, val tag: String)
fun main() {
    val map = mapOf(Key(1, "a") to "one")
    println(map[Key(1, "a")]) // one
}

copy ที่สร้างโดยอัตโนมัติ

copy() สร้างอินสแตนซ์ใหม่ที่มีค่าฟิลด์เหมือนเดิม และอนุญาตให้แทนที่ค่าแต่ละฟิลด์ด้วยอาร์กิวเมนต์ที่ระบุชื่อ

data class Config(val host: String, val port: Int, val tls: Boolean)
fun main() {
    val dev = Config("localhost", 8080, false)
    val prod = dev.copy(host = "prod.example.com", tls = true)
    println(prod) // Config(host=prod.example.com, port=8080, tls=true)
}

componentN ที่สร้างโดยอัตโนมัติ

พร็อพเพอร์ตีแต่ละตัวจะได้รับฟังก์ชัน componentN() เช่น component1 และ component2 เพื่อให้สามารถแยกโครงสร้างได้

data class Pair2(val first: String, val second: Int)
fun main() {
    val p = Pair2("Ada", 35)
    val (name, age) = p
    println("$name is $age")
}

สิ่งที่คลาสข้อมูลไม่ทำ

คลาสข้อมูลจะไม่สร้าง toString สำหรับฟิลด์ที่สืบทอดมา มีสถานะเป็น final โดยค่าเริ่มต้น และไม่สามารถเป็น abstract, open, sealed หรือ inner ได้

data class Sample(val n: Int)
// open data class Bad(...) // ERROR
// sealed data class Bad(...) // ERROR
fun main() { println(Sample(1)) }

พร็อพเพอร์ตีนอกตัวสร้างหลัก

พร็อพเพอร์ตีที่ประกาศในเนื้อคลาสจะไม่มีส่วนร่วมใน equals, hashCode, toString หรือ copy

data class Person(val name: String) {
    var nickname: String = ""
}
fun main() {
    val a = Person("Ada").apply { nickname = "Augusta" }
    val b = Person("Ada").apply { nickname = "Different" }
    println(a == b)   // true — only name matters
    println(a)         // Person(name=Ada)
}

ค่าเริ่มต้น

ใช้ data class ร่วมกับพารามิเตอร์ที่มีค่าเริ่มต้นเพื่อให้สร้างออบเจ็กต์ได้อย่างยืดหยุ่น

data class Request(
    val url: String,
    val method: String = "GET",
    val headers: Map<String, String> = emptyMap()
)
fun main() {
    println(Request("https://api.example.com"))
}

การใช้งานจริง: คลาส DTO

คลาสข้อมูลเหมาะอย่างยิ่งสำหรับออบเจ็กต์ถ่ายโอนข้อมูล การตอบกลับจาก API และออบเจ็กต์ค่า

data class ApiResponse(
    val status: Int,
    val body: String,
    val timestamp: Long
)
fun main() {
    val ok = ApiResponse(200, "{}", System.currentTimeMillis())
    println(ok)
}

ตรวจสอบอย่างรวดเร็ว

เมธอดใดไม่ถูกสร้างโดยอัตโนมัติโดยคอมไพเลอร์ Kotlin สำหรับคลาสข้อมูล

สรุปทบทวน

data class จะสร้าง equals, hashCode, toString, copy และ componentN โดยอัตโนมัติจากพร็อพเพอร์ตีของตัวสร้างหลัก พร็อพเพอร์ตีนอกตัวสร้างจะไม่ถูกรวม ใช้คลาสข้อมูลสำหรับ DTO ออบเจ็กต์ค่า และภาชนะใด ๆ ที่เก็บค่าที่เกี่ยวข้องกัน

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

บทเรียน “พื้นฐาน Data Class: เมธอดที่สร้างอัตโนมัติ” ฟรีหรือไม่

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

คุณจะเรียนรู้อะไรในบทเรียน “พื้นฐาน Data Class: เมธอดที่สร้างอัตโนมัติ”

ทำความเข้าใจสิ่งที่ data class สร้างให้ ได้แก่ equals, hashCode, toString และ copy คุณปฏิบัติ Kotlin Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

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

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

บทเรียน “พื้นฐาน Data Class: เมธอดที่สร้างอัตโนมัติ” ใช้เวลานานแค่ไหน

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

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

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

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

  1. พื้นฐาน Data Class: เมธอดที่สร้างอัตโนมัติ
  2. การคัดลอกด้วย copy() และการเขียนทับบางส่วน
  3. การประกาศแบบแยกโครงสร้างด้วย componentN
  4. Data Class ในคอลเลกชันและในฐานะคีย์ของ Map
← กลับไปที่ Kotlin Academy