ชนิดค่าและการเปลี่ยนแปลงไม่ได้
ดูว่า 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- ชนิดค่าและการเปลี่ยนแปลงไม่ได้
- คีย์เวิร์ด mutating
- การเปลี่ยนแปลงค่าและการกำหนด self ใหม่
- ทางเลือกที่ไม่เปลี่ยนแปลงค่า