คำถามติดแท็ก immutability

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

8
ลบค่าออกจากวัตถุโดยไม่มีการกลายพันธุ์
อะไรคือวิธีที่ดีและสั้นในการลบค่าออกจากวัตถุที่คีย์เฉพาะโดยไม่ทำให้วัตถุดั้งเดิมกลายพันธุ์ ฉันต้องการทำสิ่งที่ชอบ: let o = {firstname: 'Jane', lastname: 'Doe'}; let o2 = doSomething(o, 'lastname'); console.log(o.lastname); // 'Doe' console.log(o2.lastname); // undefined ฉันรู้ว่ามีไลบรารีที่ไม่เปลี่ยนรูปจำนวนมากสำหรับงานดังกล่าว แต่ฉันต้องการออกไปโดยไม่มีห้องสมุด แต่ในการทำเช่นนี้ข้อกำหนดจะต้องมีวิธีที่ง่ายและสั้นซึ่งสามารถใช้ได้ตลอดทั้งโค้ดโดยไม่ต้องแยกวิธีการออกไปเป็นฟังก์ชันยูทิลิตี้ เช่นในการเพิ่มมูลค่าฉันทำสิ่งต่อไปนี้: let o2 = {...o1, age: 31}; ค่อนข้างสั้นจำง่ายและไม่ต้องการฟังก์ชันยูทิลิตี้ มีสิ่งนี้สำหรับการลบค่าหรือไม่? ES6 ยินดีต้อนรับเป็นอย่างยิ่ง ขอบคุณมาก!

8
ไม่เปลี่ยนรูปหมายถึงอะไร?
หากสตริงไม่เปลี่ยนรูปหมายความว่า .... (สมมติว่าเป็น JavaScript) var str = 'foo'; alert(str.substr(1)); // oo alert(str); // foo หมายความว่าเมื่อเรียกเมธอดบนสตริงจะส่งคืนสตริงที่แก้ไข แต่จะไม่เปลี่ยนสตริงเริ่มต้นใช่หรือไม่ ถ้าสตริงไม่แน่นอนหมายความว่าสายที่ 2 alert()จะกลับมาooเหมือนกันหรือไม่?

10
เป็นจำนวนเต็มไม่เปลี่ยนรูป
ฉันรู้ว่านี่อาจจะโง่มาก แต่หลายแห่งอ้างว่าคลาส Integer ใน Java ไม่เปลี่ยนรูป แต่รหัสต่อไปนี้: Integer a=3; Integer b=3; a+=b; System.out.println(a); ดำเนินการโดยไม่มีปัญหาใด ๆ ให้ผลลัพธ์ (ที่คาดหวัง) 6. ดังนั้นค่าของ a จึงเปลี่ยนไปอย่างมีประสิทธิภาพ ไม่ได้หมายความว่าจำนวนเต็มไม่แน่นอน? คำถามรองและนอกหัวข้อเล็กน้อย: "คลาสที่ไม่เปลี่ยนรูปไม่จำเป็นต้องมีตัวสร้างการคัดลอก" ใครสนใจที่จะอธิบายว่าทำไม?

5
val-mutable กับ var-immutable ใน Scala
มีแนวทางใดบ้างใน Scala เกี่ยวกับเวลาที่จะใช้ val กับคอลเลกชันที่เปลี่ยนแปลงได้กับการใช้ var กับคอลเล็กชันที่ไม่เปลี่ยนรูปหรือไม่ หรือคุณควรมุ่งเป้าไปที่ val ด้วยคอลเลกชันที่ไม่เปลี่ยนรูป? ความจริงที่ว่ามีคอลเลกชันทั้งสองประเภททำให้ฉันมีทางเลือกมากมายและบ่อยครั้งที่ฉันไม่รู้ว่าจะเลือกอย่างไร

9
การสร้างวัตถุขนาดใหญ่ที่ไม่เปลี่ยนรูปโดยไม่ใช้ตัวสร้างที่มีรายการพารามิเตอร์ยาว ๆ
ฉันมีวัตถุขนาดใหญ่ (มากกว่า 3 ช่อง) ที่สามารถและไม่เปลี่ยนรูปได้ ทุกครั้งที่ฉันเจอกรณีนั้นฉันมักจะสร้างสิ่งที่น่ารังเกียจของตัวสร้างที่มีรายการพารามิเตอร์ยาว ๆ รู้สึกไม่ถูกต้องใช้ยากและความสามารถในการอ่านไม่เพียงพอ จะยิ่งแย่ไปกว่านั้นถ้าฟิลด์นั้นเป็นประเภทคอลเลกชันบางประเภทเช่นรายการ วิธีง่ายๆaddSibling(S s)จะทำให้การสร้างวัตถุง่ายขึ้นมาก แต่ทำให้วัตถุไม่แน่นอน พวกคุณใช้อะไรในกรณีเช่นนี้? ฉันใช้ Scala และ Java แต่ฉันคิดว่าปัญหาคือภาษาไม่เชื่อเรื่องพระเจ้าตราบใดที่ภาษานั้นมุ่งเน้นไปที่วัตถุ วิธีแก้ปัญหาที่ฉันคิดได้: "สิ่งที่น่ารังเกียจของตัวสร้างที่มีรายการพารามิเตอร์ยาว" รูปแบบตัวสร้าง
96 java  oop  scala  immutability 

6
Python มีรายการที่ไม่เปลี่ยนรูปหรือไม่?
python มีรายการที่ไม่เปลี่ยนรูปหรือไม่? สมมติว่าฉันต้องการมีฟังก์ชันการทำงานของคอลเลกชันขององค์ประกอบตามลำดับ แต่ฉันต้องการรับประกันว่าจะไม่เปลี่ยนแปลงสิ่งนี้จะนำไปใช้งานได้อย่างไร? มีการเรียงลำดับรายการ แต่สามารถกลายพันธุ์ได้

8
แทนที่องค์ประกอบสตริงหลายรายการใน C #
มีวิธีที่ดีกว่านี้ไหม ... MyString.Trim().Replace("&", "and").Replace(",", "").Replace(" ", " ") .Replace(" ", "-").Replace("'", "").Replace("/", "").ToLower(); ฉันได้ขยายคลาสสตริงเพื่อให้มันเหลือเพียงงานเดียว แต่มีวิธีที่เร็วกว่านี้ไหม public static class StringExtension { public static string clean(this string s) { return s.Replace("&", "and").Replace(",", "").Replace(" ", " ") .Replace(" ", "-").Replace("'", "").Replace(".", "") .Replace("eacute;", "é").ToLower(); } } เพียงเพื่อความสนุกสนาน (และเพื่อหยุดการโต้แย้งในความคิดเห็น) ฉันได้เพิ่มส่วนสำคัญในการเปรียบเทียบตัวอย่างต่างๆด้านล่าง https://gist.github.com/ChrisMcKee/5937656 ตัวเลือก regex ทำคะแนนได้แย่มาก …

7
คอลเล็กชันที่ไม่เปลี่ยนรูป / เปลี่ยนรูปได้ใน Swift
ฉันอ้างถึงคู่มือการเขียนโปรแกรม Swift ของ Apple เพื่อทำความเข้าใจการสร้างวัตถุที่เปลี่ยนแปลงไม่ได้ / ไม่เปลี่ยนรูป (Array, Dictionary, Sets, Data) ในภาษา Swift แต่ฉันไม่เข้าใจวิธีสร้างคอลเล็กชันที่ไม่เปลี่ยนรูปใน Swift ฉันต้องการดูสิ่งที่เทียบเท่าใน Swift สำหรับสิ่งต่อไปนี้ใน Objective-C อาร์เรย์ที่ไม่เปลี่ยนรูป NSArray *imArray = [[NSArray alloc]initWithObjects:@"First",@"Second",@"Third",nil]; อาร์เรย์ที่ไม่แน่นอน NSMutableArray *mArray = [[NSMutableArray alloc]initWithObjects:@"First",@"Second",@"Third",nil]; [mArray addObject:@"Fourth"]; พจนานุกรมไม่เปลี่ยนรูป NSDictionary *imDictionary = [[NSDictionary alloc] initWithObjectsAndKeys:@"Value1", @"Key1", @"Value2", @"Key2", nil]; พจนานุกรมไม่แน่นอน NSMutableDictionary *mDictionary = [[NSMutableDictionary alloc]initWithObjectsAndKeys:@"Value1", …

13
ชั้นไม่เปลี่ยนรูป?
เราจะทำให้คลาส Java ไม่เปลี่ยนรูปได้อย่างไรความต้องการความไม่เปลี่ยนรูปคืออะไรและมีข้อได้เปรียบในการใช้สิ่งนี้หรือไม่?

1
ImmutableSortedDictionary ช่วงแจงนับโดยคีย์
ผมอ่านเกี่ยวกับ C # 's ImmutableSortedDictionaryในSystem.Collections.Immutableและความคิดเกี่ยวกับวิธีการที่จะใช้มันในโปรแกรมของฉัน ฉันค่อนข้างชอบ C ++ lower_boundและupper_bound(ดูที่นี่ ) และฉันค่อนข้างคาดหวังที่จะเห็นบางสิ่งบางอย่างสำหรับการค้นหาช่วง อย่างไรก็ตามวิธีการที่คล้ายกันดูเหมือนจะแปลกขาดจากเอกสาร ฉันพลาดอะไรไปรึเปล่า? หรือว่า MS จัดเตรียมพจนานุกรมเรียงอย่างแท้จริงโดยไม่ต้องเข้าถึงช่วงเรียงอย่างมีประสิทธิภาพ? ดูเหมือนจะไม่เหมือนสิ่งที่คน ๆ หนึ่งทำได้บนIEnumerableปุ่มเหมือนกับวิธีการขยายดังนั้นฉันค่อนข้างงุนงงฉันไม่เห็นบางสิ่งที่ได้รับจากคอลเลกชันโดยตรง
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.