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

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

2
โครงการโอเพ่นซอร์ส C # ที่ใช้งานมากที่สุด?
ฉันกำลังมองหาโครงการโอเพนซอร์สที่กำลังดำเนินการใน C # ที่กำลังมองหานักพัฒนาและไม่สนใจว่าบุคคลที่เข้ามาจากพื้นหลัง C ++ คำแนะนำใด ๆ ที่ชื่นชม


1
การทดสอบการรวมในโครงการ OSS - วิธีจัดการกับบุคคลที่สามด้วยการรับรองความถูกต้อง?
หนึ่งในโปรเจ็กต์อดิเรก (โอเพ่นซอร์ส) ของฉันคือเครื่องมือสำรองซึ่งทำให้การสำรองข้อมูลออฟไลน์ของที่เก็บจาก GitHub, Bitbucket เป็นต้น มันเรียก API ของ hosters เพื่อรับรายการที่เก็บข้อมูล ดึงที่เก็บไปยังเครื่องคอมพิวเตอร์ ดังนั้นฉันจึงมีการทดสอบการรวมที่ฉันเรียก GitHub API ด้วยการตรวจสอบ (และเมื่อคุณสมบัติการโคลน / ดึงเสร็จอาจมีการทดสอบว่าที่เก็บโคลนจาก GitHub และต้องรับรองความถูกต้องด้วย) ฉันสร้างผู้ใช้และองค์กรโดยเฉพาะสำหรับใช้ในการทดสอบการรวมกลุ่มเหล่านี้ ปัญหา: ฉันไม่สามารถเข้ารหัสรหัสผ่านที่ยากที่ไหนสักแห่งในซอร์สโค้ดได้เนื่องจากเป็นโอเพ่นซอร์สและรหัสนั้นเป็นสาธารณะใน GitHub สิ่งที่ฉันทำตอนนี้ ในการทดสอบฉันได้รับชื่อผู้ใช้รหัสผ่านและชื่อที่เก็บจากตัวแปรสภาพแวดล้อมทั้งหมด นี่คือตัวอย่าง : config.Name = TestHelper.EnvVar("GithubApiTests_Name"); config.Password = TestHelper.EnvVar("GithubApiTests_PW"); ( TestHelper.EnvVarเป็นวิธีตัวช่วยซึ่งรับค่าของตัวแปรสภาพแวดล้อมและส่งข้อยกเว้นเมื่อไม่มีอยู่) จากนั้นฉันมีไฟล์แบตช์ซึ่งตั้งค่าตัวแปรสภาพแวดล้อมเหล่านั้น ตัวจริง ( environment-variables.bat) เรียกในสคริปต์สร้างของฉันและก่อนที่จะดำเนินการทดสอบ แต่ละเว้นในการควบคุมแหล่งที่มาดังนั้นจึงไม่ได้อยู่ในที่เก็บจริงของฉัน สิ่งที่อยู่ในการควบคุมแหล่งที่มาenvironment-variables.bat.sampleซึ่งตั้งค่าตัวแปรสภาพแวดล้อมเดียวกัน แต่ใช้รหัสผ่านปลอม: rem copy/rename this file to …

3
มีจุดใดบ้างในการใช้ตัวสร้างและส่วนต่อประสานกับวัตถุเริ่มต้น?
ใน Java และ C # คุณสามารถสร้างวัตถุที่มีคุณสมบัติที่สามารถตั้งค่าได้ที่การเริ่มต้นโดยการกำหนดตัวสร้างด้วยพารามิเตอร์การกำหนดแต่ละคุณสมบัติหลังจากการสร้างวัตถุหรือการใช้รูปแบบส่วนต่อประสานการสร้าง / ของเหลว อย่างไรก็ตาม C # 3 แนะนำวัตถุเริ่มต้นและคอลเลกชันซึ่งหมายความว่ารูปแบบการสร้างไม่ได้ผลส่วนใหญ่ ในภาษาที่ไม่มีค่าเริ่มต้นเราสามารถใช้เครื่องมือสร้างจากนั้นใช้มันเพื่อ: Vehicle v = new Vehicle.Builder() .manufacturer("Toyota") .model("Camry") .year(1997) .colour(CarColours.Red) .addSpecialFeature(new Feature.CDPlayer()) .addSpecialFeature(new Feature.SeatWarmer(4)) .build(); ในทางกลับกันใน C # one สามารถเขียน: var vehicle = new Vehicle { Manufacturer = "Toyota", Model = "Camry", Year = 1997, Colour = …

4
การรับประกันความไม่สามารถเปลี่ยนแปลงได้นั้นเป็นเพียงเหตุผลในการเปิดเผยฟิลด์แทนที่จะเป็นคุณสมบัติหรือไม่?
คำแนะนำทั่วไปสำหรับ C # คือการใช้คุณสมบัติเหนือเขตข้อมูลสาธารณะเสมอ สิ่งนี้สมเหตุสมผลโดยการเปิดเผยฟิลด์คุณจะเปิดเผยรายละเอียดการใช้งานมากมาย ด้วยคุณสมบัติคุณสามารถสรุปรายละเอียดดังกล่าวได้ดังนั้นจึงซ่อนตัวจากการใช้งานรหัสและการเปลี่ยนแปลงการใช้งานจะแยกออกจากการเปลี่ยนแปลงส่วนต่อประสาน อย่างไรก็ตามฉันสงสัยว่าบางครั้งมีข้อยกเว้นที่ถูกต้องสำหรับกฎนี้เมื่อจัดการกับreadonlyคำหลัก โดยการใช้คำหลักนี้กับเขตข้อมูลสาธารณะคุณจะรับประกันเพิ่มเติม: immutability นี่ไม่ได้เป็นเพียงรายละเอียดการนำไปปฏิบัติความไม่เปลี่ยนแปลงเป็นสิ่งที่ผู้บริโภคอาจสนใจการใช้readonlyเขตข้อมูลทำให้เป็นส่วนหนึ่งของสัญญาสาธารณะและสิ่งที่ไม่สามารถทำลายได้โดยการเปลี่ยนแปลงในอนาคตหรือการสืบทอดโดยไม่ต้องปรับเปลี่ยนส่วนต่อสาธารณะ นั่นคือสิ่งที่ทรัพย์สินไม่สามารถให้ได้ ดังนั้นการรับประกันการเปลี่ยนแปลงไม่ได้จึงเป็นเหตุผลที่ถูกกฎหมายในการเลือกreadonlyเขตข้อมูลเหนือทรัพย์สินในบางกรณี? (เพื่อความกระจ่างฉันไม่ได้พูดอย่างแน่นอนว่าคุณควรเลือกตัวเลือกนี้เสมอเพราะสนามไม่สามารถเปลี่ยนแปลงได้ในขณะนี้เฉพาะเมื่อมันมีความเหมาะสมในการเป็นส่วนหนึ่งของการออกแบบของชั้นเรียน ฉันส่วนใหญ่สนใจคำตอบที่เพ่งความสนใจไปที่ว่านี่อาจเป็นเหตุผลมากกว่ากรณีเฉพาะที่ไม่เช่นเมื่อคุณต้องการสมาชิกที่อยู่ในinterfaceหรือต้องการโหลดขี้เกียจ)

3
คุณสมบัตินามธรรมในคลาสฐานเพื่อบังคับให้โปรแกรมเมอร์กำหนดมัน
ฉันกำลังเขียนโค้ดด้วยรูปแบบสถานะสำหรับอุปกรณ์ฝังตัว ฉันมีคลาสฐาน / นามธรรมที่เรียกว่าสถานะและจากนั้นแต่ละสถานะแยก (คอนกรีต) แยกชั้นใช้ระดับรัฐนามธรรม ในระดับรัฐฉันมีวิธีนามธรรมหลายอย่าง ถ้าฉันไม่ใช้วิธีนามธรรมในคลาส discrete (คอนกรีต), Visual Studio จะให้ข้อผิดพลาดดังนี้: ... ข้อผิดพลาด 1 'myConcreteState' ไม่ได้ใช้สมาชิกนามธรรมที่สืบทอด 'myAbstractState' ตอนนี้: ฉันกำลังพยายามสร้างคุณสมบัติสตริงสำหรับแต่ละรัฐชื่อ StateName เมื่อใดก็ตามที่ฉันสร้างคลาสคอนกรีตใหม่ฉันต้องกำหนด StateName ฉันต้องการให้ VS ส่งข้อผิดพลาดหากฉันไม่ได้ใช้ มีวิธีง่าย ๆ ในการทำเช่นนี้? ฉันได้ลองในชั้นนามธรรม / ฐาน: public abstract string StateName { get; set; } แต่ฉันไม่จำเป็นต้องใช้วิธีการรับและตั้งค่าในแต่ละรัฐ คำถามที่มีการแก้ไข: ในสถานการณ์ที่เหมาะสมอุดมคติแต่ละระดับของรัฐจะต้องกำหนดให้ StateName กำหนดและสืบทอดมาจากคลาสฐานนามธรรม StateName = "MyState1"; //or …

2
ฉันสามารถอัปเดตวัตถุที่แนบโดยใช้วัตถุที่แยกออกมา แต่เท่ากันได้หรือไม่
ฉันดึงข้อมูลภาพยนตร์จาก API ภายนอก ในระยะแรกฉันจะขูดภาพยนตร์แต่ละเรื่องแล้วใส่ลงในฐานข้อมูลของฉันเอง ในระยะที่สองฉันจะอัปเดตฐานข้อมูลเป็นระยะโดยใช้ API "การเปลี่ยนแปลง" ของ API ซึ่งฉันสามารถสืบค้นเพื่อดูว่าภาพยนตร์เรื่องใดที่ข้อมูลของพวกเขาเปลี่ยนไป เลเยอร์ ORM ของฉันคือ Entity-Framework คลาสภาพยนตร์มีลักษณะดังนี้: class Movie { public virtual ICollection<Language> SpokenLanguages { get; set; } public virtual ICollection<Genre> Genres { get; set; } public virtual ICollection<Keyword> Keywords { get; set; } } ปัญหาเกิดขึ้นเมื่อผมมีหนังที่ต้องมีการปรับปรุงฐานข้อมูลของฉันจะคิดว่าของวัตถุที่มีการติดตามและคนใหม่ที่ฉันได้รับจากสายการปรับปรุง API .Equals()เป็นวัตถุที่แตกต่างกันโดยไม่คำนึงถึง สิ่งนี้ทำให้เกิดปัญหาเพราะเมื่อฉันพยายามอัปเดตฐานข้อมูลด้วยภาพยนตร์ที่อัปเดตแล้วมันจะแทรกแทนการอัปเดตภาพยนตร์ที่มีอยู่ ฉันมีปัญหานี้มาก่อนด้วยภาษาและวิธีการแก้ปัญหาของฉันคือการค้นหาวัตถุภาษาที่แนบมาแยกพวกเขาออกจากบริบทย้าย PK ของพวกเขาไปยังวัตถุที่อัปเดตและแนบไปกับบริบท …

2
ผู้ส่งเหตุการณ์ควรเป็นวัตถุทั่วไปหรือไม่
เมื่อกิจกรรมการเขียนโปรแกรมใน C # ขอแนะนำให้สร้างผู้แทนในรูปแบบของ: delegate XEventHandler(object sender, XEventArgs e); คำถามของฉันอยู่ที่อาร์กิวเมนต์แรกของผู้รับมอบสิทธิ์object sender. มันจำเป็นต้องเป็นยาสามัญobjectหรือไม่? การมีผู้ส่งเป็นประเภทobjectจะส่งผลให้เกิดรหัสคล้ายกัน val = ((ConcreteType)sender).Property; หรือยิ่ง verbose ConcreteType obj = sender as ConcreteType if (obj != null) { ... } ข้อโต้แย้งอย่างหนึ่งสำหรับผู้ส่งที่พิมพ์อย่างรุนแรงคือวัตถุอื่น ๆ สามารถส่งต่อเหตุการณ์โดยไม่ต้องกังวลเกี่ยวกับประเภท แม้ว่าสิ่งนี้อาจสมเหตุสมผลในสภาพแวดล้อม GUI แต่ฉันไม่แน่ใจว่าจะได้ประโยชน์นอก GUI หรือไม่ ถ้าคลาสของผู้ส่งเป็นที่รู้จักกันเสมอ (อย่างน้อยก็เป็นคลาสนามธรรม)? ตัวอย่างเช่นถ้าฉันกำลังดำเนินการListChangedจัดกิจกรรมในนามธรรมListชั้นและถ้าชั้นเรียนอื่น ๆ จะได้รับมรดก (เช่นLinkedList, ArrayList) มันเป็นสิทธิ์ที่จะกำหนดผู้รับมอบสิทธิ์ของฉันที่มีผู้ส่งประเภทList? delegate ListChangedEventHander(List sender, …
10 c#  event 

1
เบลอเส้นระหว่างแอซิงก์และฟังก์ชั่นปกติใน C # 5.0
เมื่อเร็ว ๆ นี้ดูเหมือนว่าฉันจะไม่สามารถรับรูปแบบasync-await ที่น่าทึ่งของ C # 5.0 ได้ คุณอยู่ที่ไหนตลอดชีวิตของฉัน ฉันตื่นเต้นอย่างมากกับไวยากรณ์ที่เรียบง่าย แต่ฉันมีปัญหาเล็กน้อย ปัญหาของฉันคือฟังก์ชั่น async มีการประกาศที่แตกต่างกันโดยสิ้นเชิงจากฟังก์ชั่นปกติ เนื่องจากมีเพียง async เท่านั้นที่สามารถรอฟังก์ชั่นอื่น ๆ ของ async ได้เมื่อฉันพยายามที่จะแปลงรหัสการบล็อกเก่า ๆ ให้เป็น async ฉันจึงมีผลกระทบโดมิโนของฟังก์ชั่นที่ฉันต้องแปลง คนได้รับการอ้างถึงนี้เป็นทำลายผีดิบ เมื่อ async เริ่มกัดรหัสของคุณมันก็จะยิ่งใหญ่ขึ้นเรื่อย ๆ กระบวนการ porting ไม่ยากมันเป็นเพียงแค่การขว้างปาในการประกาศและการตัดค่าตอบแทนด้วยasync Task<>แต่มันเป็นเรื่องที่น่ารำคาญที่จะทำเช่นนี้ซ้ำแล้วซ้ำอีกเมื่อทำการพอร์ตรหัสซิงโครนัสเก่า ดูเหมือนว่าฉันจะเป็นธรรมชาติมากขึ้นถ้าทั้งสองประเภทฟังก์ชั่น (async และซิงค์เก่าธรรมดา) มีไวยากรณ์เดียวกันแน่นอน หากเป็นกรณีนี้การย้ายจะใช้ความพยายามเป็นศูนย์และฉันสามารถสลับระหว่างสองรูปแบบได้อย่างไม่ลำบาก ฉันคิดว่าสิ่งนี้สามารถใช้งานได้หากเราปฏิบัติตามกฎเหล่านี้: ฟังก์ชัน Async ไม่จำเป็นต้องมีการasyncประกาศอีกต่อไป Task<>ประเภทการกลับมาของพวกเขาจะได้ไม่ต้องถูกห่อใน คอมไพเลอร์จะระบุฟังก์ชั่น async ระหว่างการคอมไพล์ด้วยตัวเองและทำการตัดคำสั่งงาน <> โดยอัตโนมัติตามต้องการ ไม่มีการเรียกและฟังก์ชั่น …

1
ทำไมคุณต้องสร้างสคริปต์การปรับใช้ใน PowerShell เมื่อคุณมี TFS
ฉันกำลังทดลองใช้การปรับใช้อัตโนมัติ / บูรณาการอย่างต่อเนื่องและได้คุยกับหัวหน้าทีมของฉัน ฉันบอกเขาว่าฉันกำลังตรวจสอบการสร้างสคริปต์สร้าง / ปรับใช้ใน PowerShell และเขากล่าวว่าการปรับใช้อัตโนมัตินั้นง่ายมากในการติดตั้งใน TFS โดยใช้ GUI และฉันควรทำการวิจัยแทน ฉันไม่มีประสบการณ์เกี่ยวกับ TFS ยกเว้นการมุ่งมั่นที่จะควบคุมแหล่งข้อมูลจาก VS TFS จะล้มเหลวในสถานการณ์ใดและคุณจะดีขึ้นด้วย PowerShell สำหรับการปรับใช้อัตโนมัติ? มีเหตุผลและข้อดีอื่น ๆ อีกบ้างในการเลือก PowerShell แทน TFS และอีกอย่าง: ฉันสามารถเรียกใช้เครื่องมือของบุคคลที่สามได้หรือไม่เช่นลบไฟล์ JS จาก TFS หรือไม่ ข้อดีของ PowerShell ที่ฉันสามารถนึกได้: PowerShell มอบความยืดหยุ่นสูงสุด คุณสามารถสลับไปยังระบบควบคุมแหล่งอื่นได้อย่างง่ายดายเช่น Mercurial สคริปต์จะง่ายต่อการดูแลมากกว่าที่ TFS สร้าง PowerShell มีน้ำหนักเบา: คุณสามารถเรียกใช้สคริปต์บนพีซีเครื่องใดก็ได้

6
เหตุใดจึงต้องประกาศตัวแปรใกล้กับตำแหน่งที่ใช้
ฉันเคยได้ยินคนพูดว่าควรจะประกาศตัวแปรที่ใกล้เคียงกับการใช้งานมากที่สุด ฉันไม่เข้าใจสิ่งนี้ ตัวอย่างเช่นนโยบายนี้จะแนะนำให้ฉันทำ: foreach (var item in veryLongList) { int whereShouldIBeDeclared = item.Id; //... } แต่นี่หมายถึงค่าโสหุ้ยในการสร้างสิ่งใหม่intเกิดขึ้นในทุก ๆ การวนซ้ำ มันจะไม่ดีกว่าที่จะใช้: int whereShouldIBeDeclared; foreach (var item in veryLongList) { whereShouldIBeDeclared = item.Id; //... } ได้โปรดอธิบายใครสักคน
10 c#  .net  variables 

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

3
ทำไมการใช้ตัวดำเนินการที่ได้รับมอบหมายหรือลูปหมดกำลังใจในการเขียนโปรแกรมใช้งานได้?
หากฟังก์ชั่นของฉันมีคุณสมบัติตรงตามข้อกำหนดสองข้อข้างล่างฉันเชื่อว่าฟังก์ชั่นSum จะคืนค่าการสรุปของรายการในรายการที่รายการประเมินเป็นจริงสำหรับเงื่อนไขที่กำหนดมีคุณสมบัติเหมาะสมที่จะเรียกว่าเป็นฟังก์ชันบริสุทธิ์ใช่ไหม 1) สำหรับชุด i / p ที่กำหนดจะส่งคืน o / p เดียวกันโดยไม่คำนึงถึงเวลาที่เรียกใช้ฟังก์ชัน 2) มันไม่มีผลข้างเคียงใด ๆ public int Sum(Func<int,bool> predicate, IEnumerable<int> numbers){ int result = 0; foreach(var item in numbers) if(predicate(item)) result += item; return result; } ตัวอย่าง: Sum(x=>x%2==0, new List<int> {1,2,3,4,5...100}); เหตุผลที่ฉันถามคำถามนี้เพราะฉันเห็นเกือบทุกที่ที่ผู้คนแนะนำให้หลีกเลี่ยงการมอบหมายและลูปเพราะมันเป็นรูปแบบการเขียนโปรแกรมที่จำเป็น ดังนั้นสิ่งที่สามารถไปผิดกับตัวอย่างข้างต้นซึ่งทำให้การใช้ลูปและผู้ประกอบการที่ได้รับมอบหมายในบริบทของการเขียนโปรแกรมฟังก์ชั่น?

3
สำหรับถ้า antipattern
ฉันอ่านโพสต์บล็อกนี้เกี่ยวกับรูปแบบการต่อต้านถ้าและฉันค่อนข้างแน่ใจว่าฉันเข้าใจว่าทำไมมันเป็นรูปแบบการต่อต้าน foreach (string filename in Directory.GetFiles(".")) { if (filename.Equals("desktop.ini", StringComparison.OrdinalIgnoreCase)) { return new StreamReader(filename); } } คำถามที่ 1: เป็นเพราะreturn new StreamReader(filename);ภายในfor loop? หรือความจริงที่ว่าคุณไม่จำเป็นต้องforวนซ้ำในกรณีนี้ ในฐานะผู้เขียนบล็อกชี้ให้เห็นว่ารุ่นที่บ้าน้อยกว่านี้คือ: if (File.Exists("desktop.ini")) { return new StreamReader("desktop.ini"); } ทั้งประสบจากสภาพการแข่งขันเพราะถ้าไฟล์ถูกลบออกก่อนที่จะสร้างของคุณจะได้รับStreamReaderFile­Not­Found­Exception คำถามที่ 2: ในการแก้ไขตัวอย่างที่สองคุณจะเขียนใหม่โดยไม่มีคำสั่ง if และล้อมรอบStreamReaderด้วยบล็อก try-catch แทนและถ้ามันโยนFile­Not­Found­Exceptionคุณจัดการมันในcatchบล็อกตามนั้นหรือไม่

6
มีอะไรผิดพลาดในบริบทของการเขียนโปรแกรมการทำงานถ้าวัตถุของฉันไม่แน่นอน?
ฉันสามารถเห็นประโยชน์ของวัตถุที่เปลี่ยนแปลงไม่ได้กับวัตถุที่เปลี่ยนแปลงไม่ได้เช่นวัตถุที่ไม่เปลี่ยนรูปทำให้ยากต่อการแก้ไขปัญหาในการเขียนโปรแกรมแบบมัลติเธรดเนื่องจากสถานะที่ใช้ร่วมกันและเขียนได้ ในทางตรงกันข้ามวัตถุที่ไม่แน่นอนช่วยในการจัดการกับตัวตนของวัตถุมากกว่าการสร้างสำเนาใหม่ทุกครั้งและยังปรับปรุงประสิทธิภาพและการใช้หน่วยความจำโดยเฉพาะอย่างยิ่งสำหรับวัตถุขนาดใหญ่ สิ่งหนึ่งที่ฉันพยายามเข้าใจคือสิ่งที่ผิดพลาดในการมีวัตถุที่ไม่แน่นอนในบริบทของการเขียนโปรแกรมการทำงาน อย่างหนึ่งในจุดที่บอกกับฉันคือผลลัพธ์ของการเรียกฟังก์ชั่นในลำดับที่แตกต่างกันนั้นไม่ได้กำหนดขึ้น ฉันกำลังมองหาตัวอย่างที่เป็นรูปธรรมที่ชัดเจนว่าอะไรผิดพลาดได้โดยใช้วัตถุที่ไม่แน่นอนในการเขียนโปรแกรมฟังก์ชั่น โดยทั่วไปถ้ามันไม่ดีก็ไม่ดีโดยไม่คำนึงถึง OO หรือกระบวนทัศน์การเขียนโปรแกรมการทำงานใช่ไหม ฉันเชื่อว่าข้อความของฉันตอบคำถามนี้เอง แต่ฉันก็ยังต้องการตัวอย่างเพื่อที่ฉันจะได้รู้สึกเป็นธรรมชาติมากขึ้น OO ช่วยในการจัดการการพึ่งพาและเขียนโปรแกรมที่ง่ายขึ้นและบำรุงรักษาด้วยความช่วยเหลือของเครื่องมือเช่น encapsulation, polymorphism เป็นต้น ฟังก์ชั่นการเขียนโปรแกรมยังมีแรงจูงใจเดียวกันในการส่งเสริมรหัสที่สามารถบำรุงรักษาได้ แต่โดยการใช้สไตล์ซึ่งไม่จำเป็นต้องใช้เครื่องมือและเทคนิค OO - หนึ่งในสิ่งที่ฉันเชื่อคือการลดผลข้างเคียงฟังก์ชั่นบริสุทธิ์ ฯลฯ

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