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

ชนิดค่าและการเปลี่ยนแปลงไม่ได้

ดูว่า let ป้องกันการเปลี่ยนแปลงชนิดค่าอย่างไร

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

โครงสร้างเป็นชนิดค่า

ใน Swift struct และ enum เป็น ชนิดค่า เมื่อกำหนดค่าให้กับตัวแปรใหม่ ค่านั้นจะถูกคัดลอก

struct Point { var x: Int; var y: Int }
var a = Point(x: 1, y: 2)
var copy = a
copy.x = 99
print(a.x, copy.x)

let ล็อกค่าทั้งหมด

การประกาศโครงสร้างด้วย let ทำให้ค่าทั้งหมดไม่เปลี่ยนรูป รวมถึงพร็อพเพอร์ตีทั้งหมดด้วย

struct Counter { var value: Int }
let c = Counter(value: 0)
// c.value = 5 // compile error
print(c.value)

var อนุญาตให้เปลี่ยนแปลงค่า

ใช้ var เมื่อคุณตั้งใจจะเปลี่ยนพร็อพเพอร์ตีของโครงสร้างหลังจากสร้างแล้ว

struct Counter { var value: Int }
var c = Counter(value: 0)
c.value = 5
print(c.value)

คัดลอกเมื่อกำหนดค่า

ตัวแปรแต่ละตัวเก็บสำเนาอิสระของตนเอง การเปลี่ยนแปลงตัวแปรหนึ่งจะไม่ส่งผลต่อตัวแปรอีกตัว

struct Box { var label: String }
var first = Box(label: "A")
var second = first
second.label = "B"
print(first.label, second.label)

ความหมายแบบค่าภายในฟังก์ชัน

การส่งโครงสร้างให้ฟังก์ชันจะเป็นการส่งสำเนา ค่าเดิมภายนอกฟังก์ชันจะไม่เปลี่ยนแปลง

struct Score { var points: Int }
func bump(_ s: Score) {
    var local = s
    local.points += 10
}
var s = Score(points: 0)
bump(s)
print(s.points)

พร็อพเพอร์ตีที่เปลี่ยนแปลงไม่ได้

พร็อพเพอร์ตีที่ประกาศด้วย let ภายในโครงสร้างจะไม่สามารถเปลี่ยนแปลงได้ แม้จะอยู่ในอินสแตนซ์ var ก็ตาม

struct User { let id: Int; var name: String }
var u = User(id: 1, name: "Ada")
u.name = "Bob"
// u.id = 2 // compile error
print(u.id, u.name)

อาร์เรย์ก็เป็นชนิดค่าเช่นกัน

Array Dictionary และ Set ของ Swift เป็นโครงสร้าง ดังนั้นจึงถูกคัดลอกเมื่อกำหนดค่า

var a = [1, 2, 3]
var b = a
b.append(4)
print(a)
print(b)

สตริงเป็นชนิดค่า

String ก็เป็นชนิดค่าเช่นกัน การเปลี่ยนแปลงสำเนาจะไม่ส่งผลต่อค่าเดิม

var s1 = "hi"
var s2 = s1
s2 += " there"
print(s1)
print(s2)

เหตุผลที่ชนิดค่ามีประโยชน์

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

struct Config { var retries: Int }
let defaultConfig = Config(retries: 3)
var custom = defaultConfig
custom.retries = 5
print(defaultConfig.retries, custom.retries)

ความไม่เปลี่ยนรูปและความปลอดภัย

การกำหนดค่าเป็น let เมื่อทำได้ ช่วยให้โค้ดปลอดภัยและชัดเจนขึ้น คอมไพเลอร์จะบังคับไม่ให้ค่าเหล่านั้นเปลี่ยนแปลง

let limit = 100
let name = "stable"
print(limit, name)

การกำหนดค่าให้ตัวแปร let ใหม่ล้มเหลว

คุณไม่สามารถกำหนดค่าใหม่ให้การผูกค่า let หรือเปลี่ยนแปลงค่าที่การผูกค่านั้นเก็บไว้ได้

let pi = 3.14
// pi = 3.15 // compile error
print(pi)

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

ทดสอบพฤติกรรมของชนิดค่า

สรุปทบทวน

โครงสร้างและชนิดแจกแจงเป็นชนิดค่า โดยจะถูกคัดลอกเมื่อกำหนดค่าและเมื่อส่งให้ฟังก์ชัน การผูกค่า let จะล็อกค่าทั้งหมด และพร็อพเพอร์ตี let จะไม่สามารถเปลี่ยนแปลงได้ สิ่งนี้ทำให้สถานะคาดเดาได้และแยกออกจากกัน

struct P { var n: Int }
var a = P(n: 1)
var b = a
b.n = 9
print(a.n, b.n)

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

บทเรียน “ชนิดค่าและการเปลี่ยนแปลงไม่ได้” ฟรีหรือไม่

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

คุณจะเรียนรู้อะไรในบทเรียน “ชนิดค่าและการเปลี่ยนแปลงไม่ได้”

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

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

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

บทเรียน “ชนิดค่าและการเปลี่ยนแปลงไม่ได้” ใช้เวลานานแค่ไหน

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

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

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

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

  1. ชนิดค่าและการเปลี่ยนแปลงไม่ได้
  2. คีย์เวิร์ด mutating
  3. การเปลี่ยนแปลงค่าและการกำหนด self ใหม่
  4. ทางเลือกที่ไม่เปลี่ยนแปลงค่า
← กลับไปที่ Swift Academy