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

C # เป็นภาษาการเขียนโปรแกรมเชิงวัตถุที่มีการจัดการและรวบรวมขยะที่สร้างขึ้นโดย Microsoft ควบคู่ไปกับแพลตฟอร์ม. NET

3
แนวทางปฏิบัติที่ดีที่สุดในปัจจุบันของ Microsoft สำหรับการสร้าง. NET data Tier? และความจริงเหรอ?
ทีมพัฒนาที่ฉันกำลังทำงานด้วยกำลังจะย้ายไปที่. NET 4.0 ในไม่ช้าอย่างไรก็ตามไลบรารีคลาสการเข้าถึงข้อมูลที่เราใช้ยังคงใช้ ADO.NET "คลาสสิค" หมายถึงSqlDataReader , DataTable และอื่น ๆ ขณะเดียวกันก็ดูเหมือนว่าไมโครซอฟท์และน่าจะเป็นส่วนที่เหลือของโลกจะก้าวไปข้างหน้ากับ Entity Framework และบริการข้อมูล WCF ฉันไม่พบสิ่งใดบน MSDN ที่ระบุว่าเทคโนโลยีการเข้าถึงข้อมูลใดที่ Microsoft พิจารณาถึงแนวทางปฏิบัติที่ดีที่สุด Microsoft มีการตั้งค่าหรือไม่? การเข้าถึงข้อมูลใดที่คนส่วนใหญ่ใช้อยู่ในปัจจุบัน มีเหตุผลที่ดีที่จะอยู่กับ ADO.NET classic และไม่ย้ายไปที่ Entity Framework หรือไม่

8
แนวทางการตั้งชื่อการประชุมมีมูลค่าการดูแลเกี่ยวกับ?
ฉันตั้งชื่อตัวแปรของฉันโดยใช้ระเบียบ. Net: camelCase สำหรับตัวแปรและฟิลด์ (ฉันมักจะใช้ _camelCase สำหรับฟิลด์ส่วนตัวในคลาส) PascalCase สำหรับเมธอดคุณสมบัติและคลาส ที่เดียวที่ฉันเบี่ยงเบนคือค่าคงที่และ Enums ที่ฉันชอบสไตล์ Java SCREAMING_CAPS codebase ของ บริษัท ของฉันเกลื่อนไปด้วยรูปแบบสัญกรณ์หลอกของฮังการีจาก VB6 และ VBScript หากไม่ใช่ภาษาฮังการีเต็มเป่าเช่น s หรือ str สำหรับ Strings ฉันหรือ int สำหรับ Ints d สำหรับทศนิยม (หรือบางครั้งสองครั้ง) o หรือ obj สำหรับวัตถุชนิดใด ๆ ฉันประจบประแจงเมื่อใดก็ตามที่ฉันเห็นรูปแบบรหัสที่ใช้ในรหัสของคนอื่น (แม้แต่ในรหัสกรีนฟิลด์ไม่ใช่แค่ cruft ดั้งเดิม) และฉันปฏิเสธที่จะใช้สไตล์นั้น ฉันได้นำมาตรฐานในการตั้งชื่อ. Net มาใช้ในอดีตและมันก็เพิกเฉยคนที่เขียนในสัญกรณ์ฮังการียังคงทำเช่นนั้นพวกเราที่ไม่ชอบให้ฉันใช้สไตล์ของตัวเองต่อไป ฉันกลัวนิดหน่อยว่าถ้าเราทำมาตรฐาน (ซึ่งฉันพยายามผลักดันไปเรื่อย ๆ …

7
ใครช่วยแนะนำโครงการสำหรับฉันเขียนเพื่อช่วยให้ฉันเข้าใจเธรด
ตอนนี้ฉันเป็นนักพัฒนา C # ด้วยความเข้าใจที่สั่นคลอนของการทำเกลียว ลิงก์ทั้งสองนี้ได้รับการแนะนำในโพสต์อื่น ๆ : http://www.yoda.arachsys.com/csharp/threads/ http://www.albahari.com/threading/ ฉันควรกลับไปสู่พื้นฐานและอาจดูตำราวิทยาการคอมพิวเตอร์บางเรื่องในเรื่องนี้หรือไม่? ฉันรู้สึกว่าถ้าฉันกระโดดเข้ามาและใช้ห้องสมุด c # ฉันจะไม่มีพื้นฐานความรู้ที่แข็งแกร่งในการสร้าง ฉันคิดว่าฉันต้องเรียนรู้เรื่องนี้ตั้งแต่เริ่มต้นเหมือนนักเรียน com sci จากนั้นใช้ห้องสมุด C # ทุกคนสามารถแนะนำวิธีการเรียนรู้การทำเกลียวบางทีอาจจะมีลิงค์และหรือความคิดโครงงานบ้าง ขอบคุณล่วงหน้า! แก้ไขขอบคุณสำหรับคำตอบทั้งหมด บางคนกล่าวว่าหนังสืออาจเป็นความคิดที่ดีใคร ๆ ก็สามารถแนะนำได้บ้าง ฉันชอบภาษาที่ไม่เชื่อเรื่องพระเจ้า ไม่มีใครรู้ว่าสิ่งที่ชั้นนี้จะครอบคลุมในการศึกษาระดับปริญญาวิทยาศาสตร์คอมพิวเตอร์? ฉันพยายาม google เพื่อรับโน้ตและการบ้านออนไลน์ฟรี

5
ปรับสมดุลการพึ่งพาการฉีดด้วยการออกแบบ API สาธารณะ
ฉันได้ไตร่ตรองถึงวิธีการสร้างความสมดุลให้กับการออกแบบที่ทดสอบได้โดยใช้การฉีดแบบพึ่งพาและการให้ API สาธารณะคงที่แบบง่าย ขึ้นเขียงของฉันคือ: ผู้คนต้องการทำสิ่งที่ชอบvar server = new Server(){ ... }และไม่ต้องกังวลเกี่ยวกับการสร้างการอ้างอิงจำนวนมากและกราฟของการอ้างอิงที่ a Server(,,,,,,)อาจมี ในขณะที่กำลังพัฒนาฉันไม่ต้องกังวลมากเกินไปเพราะฉันใช้กรอบ IoC / DI เพื่อจัดการทุกอย่าง (ฉันไม่ได้ใช้แง่มุมการจัดการวงจรชีวิตของคอนเทนเนอร์ใด ๆ ซึ่งจะทำให้สิ่งต่าง ๆ ยุ่งยากมากขึ้น) ตอนนี้การพึ่งพาไม่น่าจะนำมาใช้ใหม่ การแยกชิ้นส่วนในกรณีนี้เกือบหมดจดสำหรับการทดสอบ (และการออกแบบที่เหมาะสม!) แทนที่จะสร้างตะเข็บเพื่อขยาย ฯลฯ คนจะ 99.999% ของเวลาที่ต้องการใช้การกำหนดค่าเริ่มต้น ดังนั้น. ฉันสามารถ hardcode การอ้างอิง ไม่ต้องการทำอย่างนั้นเราแพ้การทดสอบของเรา! ฉันสามารถสร้างคอนสตรัคเตอร์เริ่มต้นพร้อมการอ้างอิงแบบฮาร์ดโค้ดและตัวอ้างอิงที่ขึ้นต่อกัน นั่นคือ ... ยุ่งและมีแนวโน้มที่จะสับสน แต่ทำงานได้ ฉันสามารถสร้างการพึ่งพาที่ได้รับภายในตัวสร้างและทำให้หน่วยของฉันทดสอบการชุมนุมเพื่อน (สมมติว่า C #) ซึ่งเป็นที่สาธารณะ API สาธารณะ แต่ทิ้งกับดักซ่อนน่ารังเกียจที่ซุ่มซ่อนสำหรับการบำรุงรักษา การมีคอนสตรัคเตอร์สองตัวที่เชื่อมต่อโดยนัยมากกว่าการออกแบบที่ไม่ดีโดยทั่วไปในหนังสือของฉัน …
13 c#  api 

4
ข้อแตกต่างระหว่างการสอบการรับรอง. NET คืออะไร [ปิด]
ปิด คำถามนี้จะต้องมีมากขึ้นมุ่งเน้น ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้มุ่งเน้นที่ปัญหาเดียวโดยแก้ไขโพสต์นี้ ปิดให้บริการใน6 ปีที่ผ่านมา ฉันเป็นผู้พัฒนา. NET โดยใช้ WPF และ ASP.NET MVC และฉันหวังว่าจะผ่านการสอบรับรองบางประเภท ดูเหมือนจะมีการสอบสี่ครั้ง แต่ฉันไม่สามารถเข้าใจสิ่งที่แตกต่างกันได้แม้จะมีคำจำกัดความของ Microsoft: MCPD MCAD MCSD เอ็มที พวกเขาเกี่ยวข้องกันอย่างไร มีเส้นทางความก้าวหน้าตามธรรมชาติผ่านการสอบรับรองหรือไม่ . NET รุ่นใดที่เหมาะสำหรับ
13 c#  .net 

4
มีวิธีปฏิบัติที่ดีอะไรบ้างเมื่อพยายามสอนการเขียนโปรแกรมแบบเปิดเผยให้แก่โปรแกรมเมอร์ที่มีความจำเป็น
ฉันเสนอให้ทำการฝึกอบรมเล็กน้อยใน F # ที่ บริษัท ของฉันและพวกเขาดูเหมือนจะแสดงความสนใจ พวกเขามักจะเป็นโปรแกรมเมอร์ VB6 และ C # ที่ไม่ปฏิบัติตามการเขียนโปรแกรมด้วยความหลงใหลมากเกินไป ที่ถูกกล่าวว่าฉันรู้สึกว่ามันง่ายกว่าที่จะเขียนรหัสที่ถูกต้องเมื่อคุณคิดในเรื่องการทำงานเพื่อให้พวกเขาควรได้รับประโยชน์จากมันแน่นอน ใครบ้างที่สามารถให้คำแนะนำเกี่ยวกับวิธีที่ฉันควรเข้าหานี้ ไอเดีย อย่ามุ่งเน้นไปที่ไวยากรณ์แทนที่จะมุ่งเน้นไปที่วิธีการใช้ภาษานี้และสำนวนที่มันส่งเสริม ลองนึกถึงตัวอย่างที่เป็นความเจ็บปวดในการเขียนในรูปแบบที่จำเป็น แต่แปลเป็นรหัสที่สง่างามเมื่อเขียนในรูปแบบที่เปิดเผย

2
วิธีใช้งานการจัดการข้อผิดพลาด [ปิด]
ปิด คำถามนี้จะต้องมีมากขึ้นมุ่งเน้น ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้มุ่งเน้นที่ปัญหาเดียวโดยแก้ไขโพสต์นี้ ปิดให้บริการใน6 ปีที่ผ่านมา แม้ว่าฉันจะตั้งโปรแกรมในระดับมืออาชีพมาหลายปีแล้วก็ตามฉันก็ยังไม่เข้าใจการจัดการข้อผิดพลาดอย่างสมบูรณ์ แม้ว่าแอปพลิเคชันของฉันจะทำงานได้ดี แต่การจัดการข้อผิดพลาดไม่ได้ดำเนินการในระดับมืออาชีพและเป็นการผสมผสานและจับคู่เทคนิคต่าง ๆ ไม่มีโครงสร้างอยู่เบื้องหลังการจัดการข้อผิดพลาดของฉัน ฉันต้องการเรียนรู้และเข้าใจวิธีการใช้งานในระดับมืออาชีพ นี่คือสิ่งหนึ่งที่ฉันขาดความรู้ เมื่อใดที่ฉันควรใช้ข้อยกเว้นและเมื่อใดที่ฉันควรกลับสถานะความสำเร็จเมื่อต้องการตรวจสอบในโฟลว์ลอจิก ตกลงเพื่อผสมข้อยกเว้นและส่งคืนสถานะหรือไม่ ฉันรหัสใน C # ส่วนใหญ่

2
ฉันจะใช้ทักษะการเขียนโปรแกรมของฉันให้ดีได้อย่างไร
ในฤดูใบไม้ร่วงนี้เว็บไซต์ขนาดเล็กสองแห่งของฉันควรสร้างประมาณ $ 1,200 ต่อเดือนโดยมีการป้อนข้อมูลน้อยที่สุด / เป็นศูนย์ซึ่งเพียงพอสำหรับฉันที่จะใช้ชีวิตอย่างสะดวกสบาย แทนที่จะเริ่มดำเนินธุรกิจอื่นฉันอยากจะใช้เวลาสองสามปีข้างหน้าในการทำสิ่งที่ดีจริงๆหรือช่วยเหลือผู้อื่นที่ต้องการ ฉันต้องการใช้เวลา 4 หรือ 5 ปีทุ่มเทเวลาให้กับสิ่งที่สมควรและทำอย่างเต็มที่เท่าที่จะทำได้เพื่อช่วยในการพัฒนาเว็บและทักษะการเขียนโปรแกรมที่ฉันมีอยู่แล้ว ปัญหาคือฉันไม่รู้ว่าจะเริ่มจากตรงไหน ฉันไม่มีความคิดที่ยอดเยี่ยมเกี่ยวกับตัวฉันเองและไม่เชื่อในองค์กรการกุศลขนาดใหญ่มากมาย โดยหลักการแล้วฉันต้องการค้นหาโครงการขนาดเล็กที่ทุกคนไม่ได้รับค่าตอบแทนและมุ่งเน้นไปที่การช่วยเหลือ มีองค์กรขนาดเล็กเช่นนี้หรือไม่? ใครบ้างมีความคิดสำหรับโครงการ / เว็บไซต์ / แอพที่สามารถช่วยเหลือผู้คนที่ต้องการพวกเขาต้องการให้ฉันทำงานหรือทำงานกับพวกเขา ฉันรู้ว่านี่ไม่ใช่ StackOverflow ทั่วไป 2 + 2 =? พิมพ์คำถามและพวกคุณบางคนจะอยากลบ แต่พิจารณาลักษณะการกุศลของอุตสาหกรรมไอที (ดูที่ตัวเองดังนั้น) นี่เป็นคำถามที่เกี่ยวข้องมากกับนักพัฒนาหลายคนทั้งตอนนี้หรือ ณ จุดหนึ่งในอาชีพของพวกเขา เมื่อพิจารณาถึงเหตุการณ์ล่าสุดในญี่ปุ่นคำถามนี้มีความเกี่ยวข้องกับคนจำนวนมากที่มองหาวิธีที่พวกเขาสามารถช่วยเหลือผู้อื่นด้วยทักษะ / เวลาที่พวกเขามี รอคอยที่จะอ่านความคิด / คำตอบของคุณจริงๆขอบคุณพวกคุณ
13 c#  java  php  javascript  jquery 

8
อินเตอร์เฟสที่เปิดเผย async ทำหน้าที่เป็นนามธรรมหรือไม่?
ฉันกำลังอ่านหนังสือหลักการพึ่งพาวิธีปฏิบัติและรูปแบบการพึ่งพาหนังสือและฉันอ่านเกี่ยวกับแนวคิดของสิ่งที่เป็นนามธรรมซึ่งอธิบายไว้ในหนังสือ วันนี้ฉันกำลังสร้างฐานรหัส C # ขึ้นใหม่โดยใช้การฉีดอ้างอิงเพื่อให้มีการใช้การโทรแบบ async แทนการบล็อก การทำเช่นนี้ฉันกำลังพิจารณาอินเทอร์เฟซบางตัวที่เป็นนามธรรมในรหัสฐานของฉันและต้องได้รับการออกแบบใหม่เพื่อให้สามารถใช้การโทรแบบ async ได้ เป็นตัวอย่างให้พิจารณาอินเตอร์เฟสต่อไปนี้ที่แสดงถึงที่เก็บสำหรับผู้ใช้แอ็พพลิเคชัน: public interface IUserRepository { Task<IEnumerable<User>> GetAllAsync(); } ตามคำนิยามของหนังสือสิ่งที่เป็นนามธรรมคือสิ่งที่เป็นนามธรรมที่ได้รับการออกแบบมาโดยเฉพาะในใจนามธรรมเพื่อให้รายละเอียดของการดำเนินการ "รั่ว" ผ่านสิ่งที่เป็นนามธรรมเอง คำถามของฉันมีดังต่อไปนี้: เราสามารถพิจารณาอินเทอร์เฟซที่ออกแบบโดยคำนึงถึง async เช่น IUserRepository เป็นตัวอย่างของ Leaky Abstraction ได้หรือไม่? แน่นอนว่าการใช้งานที่เป็นไปไม่ได้ทั้งหมดมีบางอย่างที่เกี่ยวข้องกับ asynchrony: มีเพียงการติดตั้งแบบไม่ใช้กระบวนการ (เช่นการใช้ SQL) แต่การเก็บข้อมูลในหน่วยความจำไม่จำเป็นต้องใช้แบบอะซิงโครนัส ยากถ้าอินเทอร์เฟซถูกเปิดเผยเมธอด async ตัวอย่างเช่นคุณอาจต้องส่งคืนสิ่งที่ต้องการเช่น Task.CompletedTask หรือ Task.FromResult (ผู้ใช้) ในการประยุกต์ใช้เมธอด) คุณคิดยังไงเกี่ยวกับที่ ?

4
สร้าง Null Objects ด้วย Null-Coalescing Operator
พิจารณาสถานการณ์ทั่วไปดังต่อไปนี้: if(myObject == null) { myObject = new myClass(); } ฉันสงสัยว่าความคิดของการแทนที่ต่อไปนี้โดยใช้ตัวดำเนินการ null รวมกัน: myObject = myObject ?? new myClass(); ฉันไม่แน่ใจว่าควรใช้แบบฟอร์มที่สองหรือไม่ ดูเหมือนว่าจะเป็นชวเลขที่ดี แต่การmyObject = myObjectสร้างที่จุดเริ่มต้นดูเหมือนจะเป็นกลิ่นโค้ดเล็กน้อย นี่เป็นสิ่งที่สมเหตุสมผลที่ต้องทำหรือมีชวเลขที่ดีกว่าที่ฉันทำหายไปหรือไม่? หรืออาจจะ "มันเป็นสามบรรทัดเอาเลย!"? แก้ไข: ดังที่ได้กล่าวไว้บางทีการเรียกสิ่งนี้ว่าสถานการณ์โดยทั่วไปนั้นเป็นเรื่องที่เกินความจริง ฉันมักจะพบว่าฉันพบสถานการณ์นี้เมื่อฉันดึงข้อมูลเอนทิตี้จากฐานข้อมูลที่มีคุณสมบัติประเภทการอ้างอิงลูกที่อาจหรืออาจจะไม่ได้บรรจุ: myClass myObject = myClassService.getById(id); myObject.myChildObject = myObject.myChildObject ?? new myChildClass();
12 c#  operators 

5
มันสมเหตุสมผลหรือไม่ที่จะนิยามอินเตอร์เฟสถ้าฉันมีคลาสนามธรรมอยู่แล้ว?
ฉันมีชั้นเรียนพร้อมฟังก์ชั่นเริ่มต้น / แชร์ ฉันใช้abstract classมัน public interface ITypeNameMapper { string Map(TypeDefinition typeDefinition); } public abstract class TypeNameMapper : ITypeNameMapper { public virtual string Map(TypeDefinition typeDefinition) { if (typeDefinition is ClassDefinition classDefinition) { return Map(classDefinition); } ... throw new ArgumentOutOfRangeException(nameof(typeDefinition)); } protected abstract string Map(ClassDefinition classDefinition); } ITypeNameMapperที่คุณสามารถดูฉันยังมีอินเตอร์เฟซ มันเหมาะสมหรือไม่ที่จะกำหนดอินเทอร์เฟซนี้ถ้าฉันมีคลาสนามธรรมTypeNameMapperหรือabstract classเพียงพอหรือไม่? TypeDefinition …

4
struct ด้วยค่าเริ่มต้นที่ไร้สาระ
ในระบบของฉันฉันมักทำงานกับรหัสสนามบิน ( "YYZ", "LAX", "SFO"ฯลฯ ) พวกเขามักจะอยู่ในรูปแบบเดียวกันแน่นอน (3 ตัวอักษรแสดงเป็นตัวพิมพ์ใหญ่) โดยทั่วไประบบจะจัดการกับ 25-50 ของรหัส (ต่างกัน) ต่อคำขอ API ด้วยการจัดสรรรวมกว่าพันรายการระบบจะส่งผ่านแอปพลิเคชันของเราหลายเลเยอร์และเปรียบเทียบกับความเท่าเทียมกันบ่อยครั้ง เราเริ่มต้นด้วยการส่งสายไปรอบ ๆ ซึ่งใช้งานได้ดี แต่เราก็สังเกตเห็นข้อผิดพลาดในการเขียนโปรแกรมจำนวนมากได้อย่างรวดเร็วโดยการส่งรหัสผิดไปที่ไหนสักแห่งคาดว่ารหัส 3 หลัก นอกจากนี้เรายังพบปัญหาที่เราควรทำการเปรียบเทียบแบบตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ แต่ไม่ได้ทำให้เกิดข้อบกพร่อง จากนี้ฉันตัดสินใจที่จะหยุดการส่งผ่านสายไปรอบ ๆ และสร้างAirportชั้นเรียนซึ่งมีตัวสร้างเดียวที่ใช้และตรวจสอบรหัสสนามบิน public sealed class Airport { public Airport(string code) { if (code == null) { throw new ArgumentNullException(nameof(code)); } if (code.Length != 3 || …

5
ควรให้บริการมีข้อยกเว้นหรือส่งคืนเมื่อไม่มีรายการที่ระบุไว้สำหรับการลบ
ฉันมีโค้ดบางส่วนที่สามารถแสดงเป็น: public class ItemService { public void DeleteItems(IEnumerable<Item> items) { // Save us from possible NullReferenceException below. if(items == null) return; foreach(var item in items) { // For the purpose of this example, lets say I have to iterate over them. // Go to database and delete them. } } …

5
ห้ามการเรียกฟังก์ชั่น / คลาสโดยพลการในรหัสภายนอก
ฉันเคยประสบกรณีที่จะมีประโยชน์ในการ จำกัด การเข้าถึง API ของไลบรารีภายนอกและกรอบงานเพื่อป้องกันผลกระทบด้านลบในระบบ ตัวอย่างเช่นในแอปพลิเคชัน SharePoint อาจดูเหมือนเป็นเรื่องปกติที่จะเรียกspList.Items.GetItemByIdเพื่อรับรายการแม้ในวงวนโดยไม่ทราบว่าสิ่งนี้สามารถนำไปสู่ปัญหาประสิทธิภาพการทำงานขนาดใหญ่ได้ อาจเป็นไปได้ว่าเราต้องห้ามการใช้ SmtpClient เพื่อบังคับให้ทุกคนใช้คลาสของเราในการส่งอีเมลเพื่อให้แน่ใจว่าเราสามารถใช้พร็อกซีและเยาะเย้ยทางอีเมลได้อย่างถูกต้องเมื่ออยู่ในสภาพแวดล้อมการทดสอบ มีวิธีที่เชื่อถือได้และตรงไปตรงมาอย่างสมเหตุสมผลในการบรรลุข้อ จำกัด เหล่านี้ในรหัสภายนอกยกเว้นจากบางสถานที่ในรหัสของเราเองหรือไม่? ไม่จำเป็นที่จะต้องป้องกันการเข้าถึงวิธีการ / ชั้นเรียนเหล่านี้อย่างแน่นอนเช่นโดยการไตร่ตรองหรือปิดการใช้งานบางประเภทมันควรเป็นคำเตือนที่เข้มงวดว่าพวกเขาไม่ควรใช้ บังคับให้โปรแกรมเมอร์ใช้มาตรการเพื่อแก้ไขข้อ จำกัด เหล่านี้หากเป็นไปได้ / จำเป็น

4
เมื่อการเขียนโปรแกรมในลักษณะการทำงานคุณมีสถานะแอปพลิเคชันเดียวที่คุณสานผ่านตรรกะของแอปพลิเคชันหรือไม่
ฉันจะสร้างระบบที่มีสิ่งต่อไปนี้ทั้งหมดได้อย่างไร : การใช้ฟังก์ชั่นบริสุทธิ์กับวัตถุที่ไม่เปลี่ยนรูป ส่งผ่านไปยังข้อมูลฟังก์ชันที่ฟังก์ชันต้องการเท่านั้นไม่เกิน (เช่นไม่มีวัตถุสถานะแอปพลิเคชันขนาดใหญ่) หลีกเลี่ยงการขัดแย้งกับฟังก์ชันมากเกินไป หลีกเลี่ยงการสร้างวัตถุใหม่เพียงเพื่อจุดประสงค์ในการบรรจุและเอาพารามิเตอร์ออกจากฟังก์ชั่นเพื่อหลีกเลี่ยงการส่งพารามิเตอร์ไปยังฟังก์ชันมากเกินไป ถ้าฉันจะแพ็คหลายรายการไปยังฟังก์ชันเป็นวัตถุเดียวฉันต้องการให้วัตถุนั้นเป็นเจ้าของข้อมูลนั้นไม่ใช่สิ่งที่สร้างขึ้นชั่วคราว สำหรับฉันแล้วดูเหมือนว่ารัฐ monad ทำผิดกฎข้อที่ 2 ถึงแม้ว่ามันจะไม่ชัดเจนเพราะมันถูกสานต่อผ่าน monad ฉันรู้สึกว่าฉันจำเป็นต้องใช้เลนส์อย่างใด แต่มีน้อยมากที่เขียนเกี่ยวกับมันสำหรับภาษาที่ไม่สามารถใช้งานได้ พื้นหลัง ในการออกกำลังกายฉันกำลังแปลงแอปพลิเคชันที่มีอยู่ของฉันจากสไตล์เชิงวัตถุเป็นสไตล์การทำงาน สิ่งแรกที่ฉันพยายามทำคือการสร้างแกนในของแอปพลิเคชันให้ได้มากที่สุด สิ่งหนึ่งที่ฉันได้ยินคือวิธีการจัดการ "รัฐ" ในภาษาที่ใช้งานได้อย่างหมดจดและนี่คือสิ่งที่ฉันเชื่อว่าทำโดย Monads ของรัฐนั่นคือเหตุผลที่คุณเรียกฟังก์ชันบริสุทธิ์ว่า "ผ่านสถานะของ โลกตามที่มันเป็น "จากนั้นเมื่อฟังก์ชั่นกลับมาก็จะกลับสู่สถานะของโลกตามที่มีการเปลี่ยนแปลง เพื่อแสดงให้เห็นว่าวิธีการที่คุณสามารถทำ "สวัสดีโลก" ในลักษณะการทำงานล้วนเป็นเหมือนคุณผ่านโปรแกรมของคุณที่สถานะของหน้าจอและรับกลับสถานะของหน้าจอด้วยการพิมพ์ "สวัสดีโลก" ดังนั้นในทางเทคนิคคุณกำลังโทรไปยังฟังก์ชั่นที่บริสุทธิ์และไม่มีผลข้างเคียง จากนั้นฉันก็ผ่านแอปพลิเคชันของฉันและ: 1. ขั้นแรกให้สถานะแอปพลิเคชันทั้งหมดของฉันเป็นวัตถุระดับโลกเดียว (GameState) 2. ประการที่สองฉันทำให้ GameState ไม่เปลี่ยนรูป คุณไม่สามารถเปลี่ยนได้ หากคุณต้องการการเปลี่ยนแปลงคุณต้องสร้างสิ่งใหม่ ฉันทำสิ่งนี้โดยการเพิ่มตัวคัดลอกตัวเลือกที่จะเลือกหนึ่งหรือมากกว่าหนึ่งช่องที่มีการเปลี่ยนแปลง 3. สำหรับแต่ละแอปพลิเคชันฉันส่งผ่าน GameState เป็นพารามิเตอร์ ภายในฟังก์ชั่นหลังจากที่ทำสิ่งที่มันจะทำมันจะสร้าง GameState ใหม่และส่งคืน …

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.