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

คอนสตรักเตอร์หลักและพารามิเตอร์พร็อพเพอร์ตี

ประกาศคลาสด้วยคอนสตรักเตอร์หลักและการประกาศพร็อพเพอร์ตีภายในบรรทัดเดียวกัน

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

ตัวสร้างหลัก

คลาส Kotlin ประกาศตัวสร้างหลักไว้ในวงเล็บถัดจากชื่อคลาสโดยตรง ไม่มีส่วนตัวของเมธอด มีเพียงรายการพารามิเตอร์

คลาสแบบง่ายที่สุด

ตัวสร้างหลักที่ไม่มีตัวปรับเปลี่ยนจะไม่ปรากฏให้เห็นหลังชื่อคลาส

class Greeter(val name: String) {
    fun greet() = "Hello, $name!"
}
fun main() {
    println(Greeter("Ada").greet())
}

พารามิเตอร์คุณสมบัติ

เติม val หรือ var หน้าพารามิเตอร์ของตัวสร้าง เพื่อเปลี่ยนพารามิเตอร์นั้นเป็นคุณสมบัติของคลาสได้ในขั้นตอนเดียว

class Person(val name: String, var age: Int)
fun main() {
    val p = Person("Bob", 30)
    println("${p.name} is ${p.age}")
    p.age = 31
    println("Now ${p.age}")
}

พารามิเตอร์ที่ไม่มี val/var

พารามิเตอร์ของตัวสร้างที่ไม่มี val/var จะอยู่เฉพาะภายในตัวสร้าง คุณสามารถใช้พารามิเตอร์เหล่านี้ในบล็อก init หรือตัวเริ่มต้นคุณสมบัติ แต่จะเข้าถึงในภายหลังไม่ได้

class Logger(prefix: String) {
    val msg = "$prefix: ready"
}
fun main() {
    val l = Logger("[INFO]")
    println(l.msg)
    // l.prefix // ERROR — not a property
}

ค่าเริ่มต้นของพารามิเตอร์

กำหนดค่าเริ่มต้นให้พารามิเตอร์ของตัวสร้าง เพื่อหลีกเลี่ยงโค้ดซ้ำซ้อนจากรูปแบบโอเวอร์โหลด

class User(
    val name: String,
    val age: Int = 0,
    val email: String = ""
)
fun main() {
    println(User("Ana").age)               // 0
    println(User("Ben", 25).email)         // ""
    println(User("Cal", 30, "c@x.io").email)
}

อาร์กิวเมนต์แบบระบุชื่อ

ข้ามการเรียงลำดับตามตำแหน่ง แล้วระบุชื่อพารามิเตอร์ ณ จุดเรียกใช้ ซึ่งมีประโยชน์อย่างยิ่งเมื่อมีค่าเริ่มต้น

class HttpClient(
    val baseUrl: String,
    val timeoutMs: Int = 5000,
    val retries: Int = 3
)
fun main() {
    val c = HttpClient(
        baseUrl = "https://api.example.com",
        retries = 5
    )
    println("retries=${c.retries} timeout=${c.timeoutMs}")
}

การกำหนดการมองเห็นของตัวสร้าง

ใช้ private constructor เพื่อป้องกันการสร้างอินสแตนซ์จากภายนอก ซึ่งมักใช้ร่วมกับเมธอดโรงงาน

class Singleton private constructor() {
    companion object {
        val instance = Singleton()
    }
}
fun main() {
    val s = Singleton.instance
    println(s)
}

ตัวสร้างรอง

เพิ่มตัวสร้างเพิ่มเติมด้วยคำสำคัญ constructor โดยตัวสร้างเหล่านี้ต้องส่งต่อไปยังตัวสร้างหลักด้วย this(...)

class Point(val x: Int, val y: Int) {
    constructor(value: Int) : this(value, value)
}
fun main() {
    println("${Point(3).x}, ${Point(3).y}") // 3, 3
}

ตัวสร้างพร้อมการกำหนดการมองเห็น

คุณสามารถกำหนดการมองเห็นที่แตกต่างกันให้ตัวสร้างแต่ละตัวได้ ซึ่งมีประโยชน์สำหรับไลบรารี

class Lib internal constructor(val key: String) {
    companion object {
        fun create(key: String) = Lib(key)
    }
}
fun main() {
    println(Lib.create("abc").key)
}

ทบทวนบล็อกการเริ่มต้น

โค้ดที่ควรทำงานระหว่างการสร้างอินสแตนซ์ให้ใส่ไว้ในบล็อก init { } บล็อกการเริ่มต้นหลายบล็อกจะทำงานตามลำดับในซอร์สโค้ด

class Validator(val value: String) {
    init { require(value.isNotBlank()) { "value cannot be blank" } }
}
fun main() {
    println(Validator("ok").value)
    // Validator("") // throws IllegalArgumentException
}

การรวมคุณสมบัติและตรรกะ

การประกาศคุณสมบัติ ตัวสร้างรอง และบล็อกการเริ่มต้น สามารถประกอบกันเป็นกระบวนการเริ่มต้นที่ยืดหยุ่น

class Account(
    val owner: String,
    initialBalance: Double = 0.0
) {
    var balance: Double = initialBalance
        private set
    init {
        require(initialBalance >= 0) { "balance must be non-negative" }
    }
    fun deposit(amount: Double) { balance += amount }
}
fun main() {
    val a = Account("Alice", 100.0)
    a.deposit(50.0)
    println("${a.owner}: ${a.balance}") // Alice: 150.0
}

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

คำสำคัญ val ทำอะไรเมื่อใช้กับพารามิเตอร์ของตัวสร้างหลัก

ทบทวน

ตัวสร้างหลักอยู่ในส่วนหัวของคลาส ใช้ val/var สำหรับพารามิเตอร์คุณสมบัติ ส่วนพารามิเตอร์เปล่าจะอยู่เฉพาะในตัวสร้าง เพิ่มค่าเริ่มต้นเพื่อลดจำนวนโอเวอร์โหลด และใส่ตรรกะการตั้งค่าในบล็อก init ตัวสร้างรองจะส่งต่อการทำงานผ่าน this(...)

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

บทเรียน “คอนสตรักเตอร์หลักและพารามิเตอร์พร็อพเพอร์ตี” ฟรีหรือไม่

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

คุณจะเรียนรู้อะไรในบทเรียน “คอนสตรักเตอร์หลักและพารามิเตอร์พร็อพเพอร์ตี”

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

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

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

บทเรียน “คอนสตรักเตอร์หลักและพารามิเตอร์พร็อพเพอร์ตี” ใช้เวลานานแค่ไหน

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

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

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

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

  1. คอนสตรักเตอร์หลักและพารามิเตอร์พร็อพเพอร์ตี
  2. บล็อก init และลำดับการเริ่มต้น
  3. Getter และ Setter แบบกำหนดเองด้วย field
  4. lateinit และการเริ่มต้นแบบ Lazy
← กลับไปที่ Kotlin Academy