วิศวกรรมซอฟต์แวร์

ถาม - ตอบสำหรับมืออาชีพนักวิชาการและนักเรียนที่ทำงานในวงจรการพัฒนาระบบ

7
ลิขสิทธิ์ซอฟต์แวร์: โอเพ่นซอร์ส แต่ไม่มีการแจกจ่าย (ฟรีหรือเพื่อผลกำไร)
ฉันเขียนโปรแกรมใน PHP ฉันต้องการให้ผู้คนสามารถใช้รหัสเพื่อเรียนรู้จากและรวมถึงบิตในแอพของตัวเอง แต่ฉันต้องการรักษาสิทธิ์ในการขายและทำให้ชัดเจนว่าผู้อื่นไม่แจกจ่ายสำเนาฟรีหรือเพื่อผลกำไร ฉันไม่ได้ใช้รหัสของผู้อื่นดังนั้นฉันจึงไม่ต้องกังวลเกี่ยวกับความเข้ากันได้ของใบอนุญาต ใบอนุญาตใดที่ถูกต้องสำหรับสิ่งนั้น ฉันรู้ว่าฉันไม่สามารถห้ามไม่ให้คนเพิกเฉยใบอนุญาต แต่ฉันต้องการให้พวกเขารู้ว่าอยู่ที่นั่นและรู้ว่าพวกเขากำลังทำอะไรผิดถ้าพวกเขาลอง ฉันไม่พบที่ใดที่อธิบายใบอนุญาตเป็นภาษาอังกฤษธรรมดาและใช่ฉันพยายามอ่านใบอนุญาต GNU และ BSD แต่ฉันไม่สามารถรับได้ ขอบคุณ ตกลงดังนั้นนี่คือคำอธิบายอื่น ๆ ที่ถาม: ฉันจะขายโปรแกรมนี้ในราคาถูกมาก ผู้คนมีอิสระที่จะใช้รหัสได้มากเท่าที่พวกเขาต้องการตราบใดที่พวกเขาซื้อโปรแกรมครั้งแรกและพวกเขาไม่ได้กำไรจากรหัสของฉัน ฉันจะไม่รังเกียจถ้าผู้คนเอาสิ่งทั้งหมดมาเสริมและทำให้ดีขึ้น แต่คนจะไม่ซื่อสัตย์และพวกเขาจะเพิ่มบางสิ่งและให้ฟรีและจากนั้นไม่มีใครจะซื้อผลิตภัณฑ์ของฉัน ฉันคิดว่าฉันควรปล่อยให้ผู้คนมีและขอบริจาค ดังนั้นบางทีฉันควร GPL หรือ BSD แก้ไข: ฉันเข้าใจว่าทำไมทุกคนสับสน เป็นเรื่องที่ขัดแย้งกัน แต่สิ่งที่เกี่ยวกับนักกฎหมายก็คือทุกสิ่งดูเหมือนขาวดำ ฉันพยายามที่จะบรรลุพื้นที่สีเทา ฉันต้องการคนที่จะซื้อสิ่งนี้จากฉันไม่คัดลอกและมอบให้กับผู้คนและใช้ชิ้นส่วนของมัน โดย "ใช้ชิ้นส่วน" สิ่งที่ฉันจะพูดถ้ามีคนถามฉันแบบสบาย ๆ ว่า "มีเหตุผล" ดังนั้นโดยทั่วไปอย่าใช้โค้ดส่วนใหญ่ในการทำงานของคุณและแสดงให้เห็นอย่างชัดเจนว่าฉันทำอะไรเพราะคุณจะทำได้ง่ายเหมือนที่ฉันเคยทำงานสกปรกมาแล้ว! ฉันหมายถึงแน่ใจว่าใช้สคริปต์เชื่อมต่อ DB ในโครงการของคุณฉันไม่สนใจ หรือ ... ใช้รหัสทั้งหมดและเพิ่มเข้าไป! แต่สำหรับการใช้งานส่วนตัวและคุณไม่กล้าที่จะให้มันออกเพราะฉันจะทำเงินออกจากสิ่งนี้และนั่นทำลายงานของฉันโดยสิ้นเชิง และมัน' ยินดีที่จะแสดงสิ่งที่คุณเพิ่มให้ฉันและฉันจะให้เครดิต แต่สิ่งสำคัญคืออย่าแจกจ่ายซอฟต์แวร์ของฉันที่ฉันต้องมีรายได้ด้วย มันยากที่จะนำความเชื่อมั่นนั้นไปสู่ความเป็นนักกฎหมาย …
20 licensing 

9
จะเป็น 'ถ้ารหัสผ่าน == XXXXXXX' เพียงพอสำหรับความปลอดภัยขั้นต่ำหรือไม่
หากฉันสร้างล็อกอินสำหรับแอปที่มีความเสี่ยงปานกลางถึงต่ำ (กล่าวคือไม่ใช่แอพธนาคารหรืออะไรก็ตาม) เป็นสิ่งที่ยอมรับได้หรือไม่สำหรับฉันที่จะตรวจสอบรหัสผ่านที่ผู้ใช้ป้อนโดยเพียงแค่พูดว่า: if(enteredPassword == verifiedPassword) SendToRestrictedArea(); else DisplayPasswordUnknownMessage(); ดูเหมือนง่ายที่จะมีประสิทธิภาพ แต่แน่นอนฉันจะไม่รังเกียจถ้านั่นคือทั้งหมดที่จำเป็น การตรวจสอบคอมโบของชื่อผู้ใช้ / รหัสผ่านง่ายเพียงพอหรือไม่ อัปเดต:โครงการเฉพาะที่เกิดขึ้นเป็นบริการเว็บการตรวจสอบเป็นฝั่งเซิร์ฟเวอร์ทั้งหมดและไม่ใช่โอเพ่นซอร์ส โดเมนเปลี่ยนวิธีจัดการกับสิ่งนี้หรือไม่?

4
คุณควรนำอะไรมาไว้ในตารางในฐานะสถาปนิกซอฟต์แวร์ [ปิด]
ปิด. คำถามนี้เป็นคำถามปิดหัวข้อ ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัพเดตคำถามเพื่อให้เป็นหัวข้อสำหรับ Software Engineering Stack Exchange ปิดให้บริการใน4 ปีที่แล้ว มีการหลายคำถามที่มีคำตอบที่ดีเกี่ยวกับบทบาทของสถาปนิกซอฟต์แวร์ (SA) ในStackOverflowและโปรแกรมเมอร์ SE ฉันพยายามถามคำถามที่เน้นกว่าเล็กน้อย คำจำกัดความของ SA นั้นกว้างดังนั้นคำถามนี้จึงให้คำจำกัดความของ SA ดังนี้: สถาปนิกซอฟต์แวร์แนะนำการออกแบบโดยรวมของโครงการมีส่วนร่วมกับความพยายามในการเขียนโค้ดดำเนินการตรวจสอบโค้ดและเลือกเทคโนโลยีที่จะใช้ ในคำอื่น ๆ ฉันไม่ได้พูดเกี่ยวกับส่วนที่เหลือของการบริหารจัดการและเสื้อกั๊กที่ SAs ประเภทคำ (บทกวีคำต่อไป) ยอด ถ้าฉันจะไล่ตามตำแหน่ง SA ทุกประเภทฉันไม่ต้องการออกห่างจากการเข้ารหัส ฉันอาจเสียสละเวลาเพื่อติดต่อกับลูกค้าและนักวิเคราะห์ธุรกิจ ฯลฯ แต่ฉันยังคงมีส่วนร่วมทางเทคนิคและฉันไม่เพียงแค่รู้ว่าเกิดอะไรขึ้นในการประชุม เมื่อคำนึงถึงประเด็นเหล่านี้แล้ว SA ควรนำอะไรมาสู่ตาราง พวกเขาควรเข้ามาในความคิดของ "วางกฎหมาย" (เพื่อพูด) และบังคับใช้เครื่องมือบางอย่างเพื่อให้เหมาะสมกับ "ทาง" คือแนวทางการเข้ารหัสแหล่งควบคุมรูปแบบเอกสาร UML ฯลฯ ? หรือพวกเขาควรระบุทิศทางเริ่มต้นและกลยุทธ์แล้ววางกลับเข้ามาตามความจำเป็นเพื่อแก้ไขทิศทางของเรือ? ขึ้นอยู่กับองค์กรซึ่งอาจไม่ทำงาน SA …

11
หัวหนังสือเล่มแรกเป็นอย่างไร? [ปิด]
ตามที่เป็นอยู่ในปัจจุบันคำถามนี้ไม่เหมาะสำหรับรูปแบบคำถาม & คำตอบของเรา เราคาดหวังคำตอบที่จะได้รับการสนับสนุนจากข้อเท็จจริงการอ้างอิงหรือความเชี่ยวชาญ แต่คำถามนี้จะเรียกร้องให้มีการอภิปรายโต้แย้งโต้แย้งหรือการอภิปรายเพิ่มเติม หากคุณรู้สึกว่าคำถามนี้สามารถปรับปรุงและเปิดใหม่ได้โปรดไปที่ศูนย์ช่วยเหลือเพื่อขอคำแนะนำ ปิดให้บริการใน7 ปีที่ผ่านมา ฉันไม่เคยอ่านอะไรเลย แต่ฉันคิดว่าสไตล์ของพวกเขาน่าสนใจและไม่เหมือนใคร ฉันไม่แน่ใจว่าพวกเขาคุ้มค่าที่จะให้เงินหรือเวลาหรือไม่?
20 books 

2
ใน git มันเป็นความคิดที่ดีที่จะสร้างแท็กที่มีชื่อเดียวกันกับสาขาที่ถูกลบหรือไม่?
ผมมีโครงการที่มีการแตกแขนงคอมไพล์รูปแบบที่ประมาณดังนี้ว่าnvie ของคอมไพล์ไหล สาขาที่วางจำหน่ายของเรามีชื่ออยู่ในรูปแบบของSemVerเช่นv1.5.2 เมื่อสาขาย่อยได้รับไฟสีเขียวเพื่อการผลิตเราจะปิดสาขาโดยรวมมันเข้ากับต้นแบบใช้แท็กแล้วลบสาขา เมื่อเราลบสาขาที่วางจำหน่ายทันทีเราได้ใช้ตัวระบุเดียวกันสำหรับการติดแท็กสาขาเช่น v1.5.2 นี่คือคำสั่งที่เราใช้ปิดสาขาที่วางจำหน่าย: $ git checkout master $ git merge v1.5.2 $ git tag -a v1.5.2 -m "Version 1.5.2 - foo bar, baz, etc" $ git branch -d v1.5.2 $ git branch -dr origin/v1.5.2 $ git push origin :v1.5.2 $ git push $ git push --tags …

1
ทำสำเนาเอกสารเกี่ยวกับการใช้งานอินเตอร์เฟส / แทนที่ดีหรือไม่ดี?
ดังนั้นเราจึงมีส่วนต่อประสานเช่นนั้น /// <summary> /// Interface for classes capable of creating foos /// </summary> public interface ICreatesFoo { /// <summary> /// Creates foos /// </summary> void Create(Foo foo); /// <summary> /// Does Bar stuff /// </summary> void Bar(); } เมื่อเร็ว ๆ นี้เราได้เล่นเรื่องเอกสารที่เกี่ยวข้องกับการสร้างและตรวจสอบให้แน่ใจว่ามีเอกสาร XML มากมายดังกล่าวข้างต้น สิ่งนี้ทำให้เกิดเอกสารซ้ำซ้อนมากมาย ตัวอย่างการนำไปใช้: /// <summary> /// A Foo …

3
ฉันจะให้ข้อมูลเพิ่มเติมเกี่ยวกับข้อยกเว้นได้อย่างไร
ทุกครั้งที่ฉันต้องการให้ข้อมูลเพิ่มเติมเกี่ยวกับข้อยกเว้นที่ฉันสงสัยว่าวิธีใดเป็นวิธีที่ถูกต้องในการทำสิ่งนี้ เพื่อประโยชน์ของคำถามนี้ฉันได้เขียนตัวอย่าง สมมติว่ามีคลาสที่เราต้องการอัพเดตAbbreviationคุณสมบัติ จากมุมมองของโซลิดมันอาจจะไม่สมบูรณ์แบบ แต่แม้ว่าเราจะผ่านวิธีปฏิบัติงานผ่าน DI ด้วยบริการบางอย่างสถานการณ์เดียวกันก็จะเกิดขึ้น - มีข้อยกเว้นเกิดขึ้นและไม่มีบริบทใด ๆ เกิดขึ้น กลับไปที่ตัวอย่าง ... class Person { public int Id { get; set; } public string Name { get; set; } public string Abbreviation { get; set; } } จากนั้นมีอินสแตนซ์ของคลาสและลูปที่เรียกเมธอดของผู้ปฏิบัติงาน StringTooShortExceptionมันสามารถโยน var persons = { new Person { Id = 1, …
20 c#  exceptions 

4
ทำไมไม่ใช้ SQL แทน GraphQL
เมื่อเร็ว ๆ นี้ฉันได้เรียนรู้เกี่ยวกับ GraphQL ซึ่งอ้างว่าเหนือกว่า RESTful อย่างไรก็ตามฉันเริ่มสงสัยว่าทำไมเราไม่ใส่คำสั่ง SQL ลงในคำขอ HTTP GET ตัวอย่างเช่นใน GraphQL ฉันจะเขียน { Movie(id: "cixos5gtq0ogi0126tvekxo27") { id title actors { name } } } ซึ่งไม่ง่ายกว่า SQL แบบเดียวกัน SELECT id, title FROM movies WHERE id = cixos5gtq0ogi0126tvekxo27; SELECT actors.name FROM actors, actors_movies WHERE actors.id == movies.actor_id AND movie.id == …

5
การส่งผ่านข้อโต้แย้งเป็นการอ้างอิง const การเพิ่มประสิทธิภาพก่อนกำหนดหรือไม่
"การเพิ่มประสิทธิภาพก่อนวัยอันควรเป็นรากฐานของความชั่วร้ายทั้งหมด" ฉันคิดว่าสิ่งนี้เราทุกคนสามารถตกลงกันได้ และฉันพยายามอย่างหนักเพื่อหลีกเลี่ยงการทำเช่นนั้น แต่เมื่อเร็ว ๆ นี้ผมได้รับการสงสัยเกี่ยวกับการปฏิบัติของพารามิเตอร์ผ่านโดยอ้างอิง constแทนโดยราคา ฉันได้รับการสอน / เรียนรู้ว่าการโต้แย้งฟังก์ชั่นที่ไม่สำคัญ (เช่นประเภทที่ไม่ใช่แบบดั้งเดิม) ควรจะถูกส่งผ่านโดยการอ้างอิง const - หนังสือบางเล่มที่ฉันได้อ่านแนะนำว่านี่เป็น "แนวปฏิบัติที่ดีที่สุด" ถึงกระนั้นฉันก็อดไม่ได้ที่จะสงสัย: คอมไพเลอร์สมัยใหม่และคุณสมบัติภาษาใหม่สามารถทำงานได้อย่างน่าอัศจรรย์ดังนั้นความรู้ที่ฉันได้เรียนรู้อาจล้าสมัยไปแล้วและฉันไม่เคยใส่ใจในโปรไฟล์เลยหากมีความแตกต่างระหว่างประสิทธิภาพ void fooByValue(SomeDataStruct data); และ void fooByReference(const SomeDataStruct& data); เป็นวิธีปฏิบัติที่ฉันได้เรียนรู้ - ผ่านการอ้างอิง const (โดยค่าเริ่มต้นสำหรับประเภทที่ไม่สำคัญ) - การเพิ่มประสิทธิภาพก่อนวัยอันควร?

8
ควรมีการยืนยันในการสร้างงาน
พฤติกรรมเริ่มต้นของassertใน C ++ คือการไม่ทำอะไรเลยใน build build ฉันเข้าใจว่ามันทำด้วยเหตุผลด้านประสิทธิภาพและอาจป้องกันไม่ให้ผู้ใช้เห็นข้อความแสดงข้อผิดพลาดที่น่ารังเกียจ อย่างไรก็ตามฉันขอยืนยันว่าสถานการณ์เหล่านั้นที่assertมีผู้ถูกไล่ออก แต่ถูกปิดการใช้งานมีปัญหามากขึ้นเพราะแอปพลิเคชันอาจจะล้มเหลวในทางที่แย่ลงกว่าเดิมเพราะค่าคงที่บางส่วนถูกทำลาย นอกจากนี้อาร์กิวเมนต์ประสิทธิภาพสำหรับฉันนับเฉพาะเมื่อมันเป็นปัญหาที่วัดได้ ส่วนใหญ่assertในรหัสของฉันไม่ซับซ้อนกว่า assert(ptr != nullptr); ซึ่งจะมีผลกระทบเล็กน้อยกับรหัสส่วนใหญ่ สิ่งนี้นำไปสู่คำถาม: ควรยืนยัน (หมายถึงแนวคิดไม่ใช่การนำไปปฏิบัติเฉพาะ) ควรมีการใช้งานใน build build หรือไม่? ทำไมจะไม่ล่ะ)? โปรดทราบว่าคำถามนี้ไม่ได้เกี่ยวกับวิธีเปิดใช้งาน asserts ใน build builds (เช่น#undef _NDEBUGหรือใช้การยืนยัน assert แบบกำหนดเอง) นอกจากนี้มันไม่เกี่ยวกับการเปิดใช้งาน asserts ในรหัสห้องสมุดของบุคคลที่สาม / มาตรฐาน แต่ในรหัสที่ควบคุมโดยฉัน

1
ประวัติของการตั้งชื่อค่าคงที่ในตัวพิมพ์ใหญ่ทั้งหมดคืออะไร?
ประวัติศาสตร์ที่อยู่เบื้องหลังการประชุมของการตั้งชื่อค่าคงที่ในตัวพิมพ์ใหญ่ทั้งหมดคืออะไร? สัญชาตญาณของฉันคือมันเริ่มต้นด้วยตัวประมวลผลล่วงหน้า C ซึ่งผู้คนพัฒนาวิธีปฏิบัติเพื่อตั้งชื่อมาโครตัวประมวลผลล่วงหน้าในตัวพิมพ์ใหญ่ทั้งหมดเพื่อให้พวกเขาอาศัยอยู่ในเนมสเปซแยกกันอย่างมีประสิทธิภาพ ความเชื่อของฉันคือว่าการปฏิบัตินี้ถูกเข้าใจผิดและ bastardized เพื่อนำไปใช้กับค่าคงที่ที่ไม่ใช่ preprocessor ด้วย ( enums, constตัวแปร) การตั้งชื่อมาโครตัวประมวลผลล่วงหน้าในตัวพิมพ์ใหญ่ทั้งหมดนั้นมีประโยชน์สำหรับฉันจริงๆ การตั้งชื่อค่าคงที่ทั่วไปนั้นไม่มาก (และต่อต้านหากสร้างการชนด้วยชื่อแมโคร) ฉันอยู่นอกฐานหรือไม่ การฝึกฝนการใช้ประโยชน์จากตัวพิมพ์ใหญ่ยังคงอยู่ก่อนวันที่ C หรือไม่?

3
สิ่งห่อหุ้มควรเปรียบเทียบให้เท่ากันโดยใช้ตัวดำเนินการ == เมื่อทำการล้อมวัตถุเดียวกันหรือไม่?
ฉันกำลังเขียน wrapper สำหรับองค์ประกอบ XML ที่ช่วยให้นักพัฒนาสามารถวิเคราะห์แอตทริบิวต์จาก XML ได้อย่างง่ายดาย เสื้อคลุมไม่มีสถานะอื่นนอกจากวัตถุที่ถูกห่อ ฉันกำลังพิจารณาการติดตั้งต่อไปนี้ (ทำให้ง่ายขึ้นสำหรับตัวอย่างนี้) ซึ่งรวมถึงโอเวอร์โหลดสำหรับ==โอเปอเรเตอร์ class XmlWrapper { protected readonly XElement _element; public XmlWrapper(XElement element) { _element = element; } public string NameAttribute { get { //Get the value of the name attribute } set { //Set the value of the name attribute } …
19 c#  .net  operators 

5
คือการใช้ *** Helper หรือ *** ใช้ประโยชน์จากคลาสที่มีเพียงวิธีคงที่ AntiPattern
ฉันมักจะเผชิญหน้ากับผู้ช่วยหรือใช้คลาสใน Java หรือภาษาอะไรก็ได้ ดังนั้นฉันจึงถามตัวเองว่านี่เป็น Anti Pattern หรือไม่และการมีอยู่ของคลาสเหล่านี้เป็นเพียงการขาดการออกแบบและสถาปัตยกรรมของซอฟต์แวร์ บ่อยครั้งที่คลาสเหล่านี้ถูก จำกัด ด้วยวิธีการคงที่ซึ่งทำสิ่งต่างๆมากมาย แต่ส่วนใหญ่มันแน่นอนขึ้นอยู่กับบริบทและรัฐเต็ม คำถามของฉันคืออะไรความคิดเห็นของคุณเกี่ยวกับประเภทของผู้ช่วยคงที่ / ใช้ประโยชน์เช่นชั้นเรียนเพราะข้อได้เปรียบแน่นอนว่าการร้องขออย่างรวดเร็วโดยใช้เพียงชื่อชั้นเรียน แล้วคุณจะหลีกเลี่ยงการใช้คลาสประเภทนี้ในระดับใด ในความคิดของฉันคำหลัก "คงที่" ควรได้รับอนุญาตภายในการประกาศของคลาส (Java) และไม่ได้สำหรับวิธีการ ในความคิดของฉันคือการใช้วิธีนี้อาจเป็นทางเลือกที่ดีและตรงกลางเพื่อให้สามารถรวม Procuedural- และ OO-Paradigms ใน Java และหลีกเลี่ยงการใช้คำหลักที่ผิดพลาด เพิ่มเติมเนื่องจากคำตอบ: ตอนแรกฉันคิดว่ามันถูกกฎหมายอย่างสมบูรณ์เพื่อให้สามารถรวมกระบวนทัศน์ที่แตกต่างกันและแม้กระทั่งใช้ภาษาสคริปต์ตีความตีความรันไทม์ภายในเครื่องหรือรหัสที่รวบรวม vm ประสบการณ์ของฉันคือระหว่างกระบวนการพัฒนาโครงการผู้ช่วยเหลือและสิ่งของประเภทนั้นหรืออะไรก็ตามที่ชื่อกำลังเติบโตและเติบโตและใช้ในทุกมุมที่ลืมของ codebase ซึ่ง แต่เดิมได้รับการออกแบบให้เป็นแบบแยกส่วนและยืดหยุ่น และเนื่องจากไม่มีเวลาที่จะทำการปรับโครงสร้างใหม่หรือคิดเกี่ยวกับการออกแบบอีกครั้งคุณเพียงแค่ทำให้มันแย่ลงในช่วงเวลานั้น ฉันคิดว่าstaticควรถูกลบออกจาก Java โดยเฉพาะอย่างยิ่งตอนนี้ที่เป็นไปได้ที่จะใช้องค์ประกอบภาษาที่ซับซ้อนยิ่งขึ้น

6
สิ่งที่คุณเรียกว่าเมื่อคุณเปลี่ยนเวลาดำเนินการ Big O ของฟังก์ชั่น [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดเมื่อปีที่แล้ว สมมติว่าฉันมีฟังก์ชั่นที่เรียงลำดับฐานข้อมูลในO(n^2)เวลา ฉันต้องการที่จะทำการปรับโครงสร้างใหม่เพื่อให้มันทำงานได้O(n log(n))ทันเวลาและในการทำเช่นนั้นฉันจะเปลี่ยนวิธีพื้นฐานในการทำงานของการดำเนินการในขณะที่รักษาค่าส่งคืนและอินพุตให้เท่ากัน ฉันจะเรียกกิจกรรมการปรับโครงสร้างซ้ำนี้ว่าอะไร "Speeding-up-ifying" ดูเหมือนไม่ถูกต้องเนื่องจากคุณสามารถทำให้อัลกอริทึมเร็วขึ้นโดยไม่ต้องเปลี่ยนความเร็ว O ขนาดใหญ่ที่มันทำงาน "การทำให้เรียบง่าย" ก็ดูไม่ถูกต้องเช่นกัน ฉันจะเรียกกิจกรรมนี้ว่าอะไร ปรับปรุง คำตอบที่ดีที่สุดที่ฉันสามารถหาได้คือการลดความซับซ้อนของเวลาแบบอสมมาตร
19 complexity  big-o 

8
มีวิธีที่ดีกว่าในการใช้พจนานุกรม C # มากกว่า TryGetValue หรือไม่
ฉันพบว่าตัวเองมักจะค้นหาคำถามออนไลน์และวิธีแก้ปัญหาหลายอย่างรวมถึงพจนานุกรม อย่างไรก็ตามเมื่อใดก็ตามที่ฉันพยายามที่จะใช้พวกเขาฉันได้กลิ่นที่น่ากลัวนี้ในรหัสของฉัน เช่นทุกครั้งที่ฉันต้องการใช้ค่า: int x; if (dict.TryGetValue("key", out x)) { DoSomethingWith(x); } นั่นคือโค้ด 4 บรรทัดที่จะทำสิ่งต่อไปนี้: DoSomethingWith(dict["key"]) ฉันได้ยินมาว่าการใช้คีย์เวิร์ด out เป็นรูปแบบการต่อต้านเพราะทำให้ฟังก์ชั่นกลายพันธุ์พารามิเตอร์ของพวกเขา นอกจากนี้ฉันพบว่าตัวเองมักต้องการพจนานุกรม "กลับด้าน" ที่ฉันพลิกคีย์และค่าต่างๆ ในทำนองเดียวกันฉันมักจะทำซ้ำผ่านรายการในพจนานุกรมและพบว่าตนเองกำลังแปลงคีย์หรือค่าไปยังรายการ ฯลฯ เพื่อทำสิ่งนี้ให้ดีขึ้น ฉันรู้สึกว่ามีวิธีการใช้พจนานุกรมที่ดีกว่าและสง่างามกว่าอยู่เกือบตลอดเวลา แต่ฉันรู้สึกแย่

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