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

พารามิเตอร์มีความสำคัญสำหรับโปรแกรมที่ไม่สำคัญใด ๆ เพื่อช่วยให้เป็นข้อมูลทั่วไปและขับเคลื่อนด้วยข้อมูล โดยทั่วไปพารามิเตอร์เป็นอาร์กิวเมนต์ของฟังก์ชัน แต่ยังสามารถเป็นส่วนหนึ่งของการกำหนดค่าได้


7
การส่งวัตถุเป็นวิธีที่เปลี่ยนวัตถุมันเป็นรูปแบบทั่วไป (ต่อต้าน -) หรือไม่?
ฉันอ่านเกี่ยวกับรหัสที่พบบ่อยมีกลิ่นในหนังสือ Refactoring Martin Fowler ของ ในบริบทนั้นฉันสงสัยเกี่ยวกับรูปแบบที่ฉันเห็นในฐานรหัสและไม่มีใครสามารถคิดว่ามันเป็นรูปแบบการต่อต้าน รูปแบบเป็นสิ่งหนึ่งที่วัตถุถูกส่งผ่านเป็นอาร์กิวเมนต์หนึ่งหรือหลายวิธีซึ่งทั้งหมดนี้เปลี่ยนสถานะของวัตถุ แต่ไม่มีใครกลับวัตถุ ดังนั้นจึงขึ้นอยู่กับการส่งผ่านโดยอ้างอิงธรรมชาติของ (ในกรณีนี้) C # /. NET var something = new Thing(); // ... Foo(something); int result = Bar(something, 42); Baz(something); ฉันพบว่า (โดยเฉพาะอย่างยิ่งเมื่อวิธีการไม่ได้ตั้งชื่ออย่างเหมาะสม) ฉันต้องมองหาวิธีการดังกล่าวเพื่อทำความเข้าใจว่าสถานะของวัตถุมีการเปลี่ยนแปลง มันทำให้เข้าใจรหัสมากขึ้นเนื่องจากฉันต้องการติดตาม call-stack หลายระดับ ฉันต้องการเสนอให้ปรับปรุงโค้ดดังกล่าวเพื่อส่งคืนออบเจ็กต์อื่น (โคลน) ด้วยสถานะใหม่หรืออะไรก็ตามที่จำเป็นในการเปลี่ยนออบเจ็กต์ที่ไซต์การโทร var something1 = new Thing(); // ... // Let's return a new instance …

5
ผ่านวัตถุสองครั้งเพื่อวิธีเดียวกันหรือรวมกับส่วนต่อประสานที่รวมกัน?
ฉันมีวิธีที่สร้างไฟล์ข้อมูลหลังจากคุยกับกระดานดิจิตอล: CreateDataFile(IFileAccess boardFileAccess, IMeasurer boardMeasurer) ที่นี่boardFileAccessและboardMeasurerเป็นเช่นเดียวกันของBoardวัตถุว่าการดำเนินการทั้งในและIFileAccess ใช้ในกรณีนี้สำหรับวิธีการเดียวที่จะตั้งหนึ่งพินบนกระดานเพื่อให้การวัดง่าย ข้อมูลที่ได้จากการวัดนี้จะถูกเก็บไว้แล้วไว้บนกระดานโดยใช้ ตั้งอยู่ในโครงการแยกต่างหากIMeasurerIMeasurerIFileAccessBoard ฉันมาถึงข้อสรุปที่CreateDataFileทำสิ่งหนึ่งโดยทำการวัดอย่างรวดเร็วแล้วเก็บข้อมูลและการทำทั้งสองอย่างในวิธีเดียวกันนั้นง่ายกว่าสำหรับคนอื่นที่ใช้รหัสนี้จากนั้นจึงต้องทำการวัดและเขียนไฟล์ เป็นการเรียกเมธอดแยกต่างหาก สำหรับฉันดูเหมือนว่าไม่เหมาะสมที่จะส่งวัตถุเดียวกันไปยังวิธีการสองครั้ง ฉันได้พิจารณาการทำอินเตอร์เฟซในท้องถิ่นIDataFileCreatorที่จะขยายIFileAccessและIMeasurerแล้วมีการดำเนินการที่มีBoardอินสแตนซ์ที่เพิ่งจะโทรที่จำเป็นต้องใช้Boardวิธีการ พิจารณาว่าวัตถุบอร์ดเดียวกันจะใช้สำหรับการวัดและการเขียนไฟล์เสมอหรือไม่มันเป็นวิธีที่ไม่ถูกต้องหรือไม่ที่จะส่งวัตถุเดียวกันไปยังวิธีการสองครั้ง? ถ้าเป็นเช่นนั้นใช้อินเทอร์เฟซท้องถิ่นและการใช้งานโซลูชันที่เหมาะสมหรือไม่

3
ข้อแตกต่างระหว่าง ref และ out ใน runtime คืออะไร?
C # จัดให้มีrefและoutคำหลักเพื่อสร้างอาร์กิวเมนต์ที่จะส่งผ่านโดยการอ้างอิง ความหมายของทั้งสองนั้นคล้ายกันมาก ข้อแตกต่างเพียงอย่างเดียวคือการเริ่มต้นของตัวแปร flaged: refต้องการตัวแปรที่จะเริ่มต้นก่อนที่จะส่งผ่านไปยังฟังก์ชั่นoutไม่ได้ outต้องการตัวแปรที่จะเริ่มต้นภายในฟังก์ชั่นrefไม่ได้ กรณีการใช้งานของคำหลักสองคำนี้ก็เกือบจะเหมือนกันและการใช้งานที่บ่อยเกินไปของพวกเขาคือฉันเชื่อว่ามีกลิ่นรหัส (แม้ว่าจะมีกรณีการใช้ที่ถูกต้องเช่นTryParseและTryGetValueรูปแบบ) ด้วยเหตุนี้ใครบางคนสามารถอธิบายได้ว่าทำไมมีเครื่องมือสองอย่างที่คล้ายกันมากใน C # สำหรับกรณีการใช้งานที่แคบมาก? นอกจากนี้ในMSDNมีการระบุว่าพวกเขามีพฤติกรรมการใช้งานที่แตกต่างกัน: แม้ว่าคีย์เวิร์ด ref และ out จะทำให้เกิดพฤติกรรมรันไทม์ที่แตกต่างกัน แต่ก็ไม่ได้พิจารณาว่าเป็นส่วนหนึ่งของลายเซ็นเมธอดในเวลารวบรวม พฤติกรรมรันไทม์ของพวกเขาแตกต่างกันอย่างไร ข้อสรุป คำตอบทั้งสองนั้นดูถูกต้องขอบคุณทั้งคู่ ฉันยอมรับjmorenoเพราะชัดเจนกว่า

7
ฟังก์ชั่นส่งกลับเฉพาะพารามิเตอร์ที่ไม่เปลี่ยนแปลงไม่มีประโยชน์หรือไม่
ฉันเพิ่งพบฟังก์ชันนี้ในโครงการที่ฉันทำงานอยู่: -- Just returns the text unchanged. -- Note: <text> may be nil, function must return nil in that case! function Widget:wtr(text) return text end น่าเศร้าที่ผู้ทำรหัสไม่ทำงานใน บริษัท อีกต่อไป ทำไมหนึ่งจะสร้างฟังก์ชั่นที่ไม่ทำอะไรเลย แต่ส่งกลับพารามิเตอร์ที่เรียกว่าด้วย? มีการใช้ฟังก์ชันดังกล่าวไม่ได้ระบุตัวอย่างนี้ แต่โดยรวมในกรณีใด ๆ ? เนื่องจาก function aFunction(parameter) return parameter end จบลงแล้ว aFunction(parameter) == parameter ทำไมฉันต้องเขียนอะไรบางอย่าง aFunction(parameter) == whatIWantToCheck แทน parameter …

2
วิธี Parametrize เทียบกับตัวแปรทั่วโลก
ฉันมีคำถามง่าย ๆ ที่หลอกหลอนฉันซักพักเมื่อรหัสของฉันเริ่มขึ้น พารามิเตอร์ควรถูกแทนที่ด้วยตัวแปรโกลบอลเมื่อพวกเขาผ่านเส้นทางยาวของการเรียกฟังก์ชันที่ซ้อนกัน? ฉันเข้าใจว่าสภาพแวดล้อมทั่วโลกสามารถทำให้สถานะของโปรแกรมไม่สามารถคาดเดาได้เพราะฟังก์ชั่นหลายอย่างสามารถปรับเปลี่ยนตัวแปรที่แชร์ได้ แต่ถึงกระนั้นโลกก็ยังทำให้สิ่งต่าง ๆ ง่ายขึ้น ให้ฉันอธิบายตัวเอง: functionA(){ x = something functionB(x) } functionB(x){ functionC(x) } functionC(x){ finallyDoSomethingWithX(x) } finallyDoSomethingWithX(x){ x += 1 //Very dummy example ignoring pass by value, not reference. } แทนที่โดย: globalX; functionA(){ globalX = something functionB() } ... ... ... finallyDoSomethingWithX(){ globalX += 1 …

2
การสร้างคลาสที่มีวัตถุประสงค์เพื่อแปลงเป็นคลาสอื่นโดยปริยายหรือไม่?
ลองนึกภาพสถานการณ์ที่เรากำลังใช้ห้องสมุดที่อนุญาตให้คุณสร้างCircleวัตถุที่คุณสามารถระบุรัศมีและศูนย์กลางของวงกลมเพื่อกำหนด อย่างไรก็ตามด้วยเหตุผลบางอย่างมันยังใช้flavourพารามิเตอร์ที่จำเป็น ตอนนี้สมมติว่าฉันจำเป็นต้องใช้Circleในแอพของฉันเอง แต่สำหรับวัตถุประสงค์ของแอพของฉันฉันสามารถกำหนดรสชาติให้เป็นFlavours.Cardboardทุกครั้ง ในการ "แก้ปัญหา" สิ่งนี้ฉันสร้างCircleคลาสของตัวเองในเนมสเปซที่ต่างกันซึ่งใช้radiusและcenterเป็นพารามิเตอร์เท่านั้น แต่มีตัวแปลงโดยนัยไปยังCircleคลาสของไลบรารีภายนอกซึ่งเพิ่งสร้างCircle(this.radius, this.center, Flavours.Cardboard)วัตถุ ดังนั้นทุกที่ที่ฉันต้องการประเภทอื่นCircleฉันจะให้การแปลงอัตโนมัติเกิดขึ้น อะไรคือผลของการสร้างชั้นเรียนดังกล่าว? มีวิธีแก้ปัญหาที่ดีกว่านี้ไหม? มันจะสร้างความแตกต่างหรือไม่ถ้าแอปพลิเคชันของฉันเป็น API ที่สร้างอยู่บนห้องสมุดภายนอกนี้มีไว้สำหรับใช้งานโดยโปรแกรมเมอร์อื่น ๆ ?

2
ตัวระบุเทียบกับวัตถุโดเมนเป็นพารามิเตอร์วิธีการ
มีข้อโต้แย้งวัตถุประสงค์สำหรับหรือต่อต้านการใช้วัตถุกับ ID ที่ไม่ซ้ำกันเป็นพารามิเตอร์วิธีการ / ฟังก์ชั่น? (และสมาชิกของวัตถุอื่น ๆ ?) เป็นพิเศษในบริบทของภาษาที่พิมพ์แบบคงที่ (C # / Java / Scala) ข้อดีของวัตถุเอง: โทร typesafe เพิ่มเติม ด้วย IDs มีความเสี่ยงในการเรียงลำดับอาร์กิวเมนต์อย่างไม่ถูกต้อง สิ่งนี้สามารถบรรเทาได้ด้วยการรักษาคลาส 'มินิ' สำหรับแต่ละคลาสที่เก็บ ID ของคลาสนั้นเท่านั้น รับเพียงครั้งเดียวจากการคงอยู่ไม่จำเป็นต้องกลับมาอีก ด้วย ID หากการเปลี่ยนแปลงประเภท id บอกว่า int -> long จะต้องมีการเปลี่ยนแปลงทั่วกระดานโดยอาจเกิดข้อผิดพลาด .. (courtey: https://softwareengineering.stackexchange.com/a/284734/145808 ) ข้อดีของการใช้ ID: เวลาส่วนใหญ่ไม่จำเป็นต้องใช้วัตถุจริงเพียง แต่เอกลักษณ์จะทำดังนั้นการมี ID ช่วยประหยัดเวลาจากการทำให้มันคงอยู่ การผสมผสานของเทคนิคเหล่านี้เท่าที่ฉันเห็นมีเพียงข้อเสียของทั้งสองและข้อดีของทั้งสองอย่าง ระบุว่านี่เป็นปัญหาที่กำหนดไว้อย่างชัดเจนฉันหวังว่าจะมีคำตอบที่ตรงตามวัตถุประสงค์และไม่ใช่ - …

6
อาร์กิวเมนต์ของฟิลด์เทียบกับวิธีการ [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน6 ปีที่ผ่านมา ฉันเพิ่งเริ่มเขียนคลาสใหม่และมันเกิดขึ้นกับฉันว่าฉันได้เพิ่มการโต้แย้งวิธีที่ไม่จำเป็นอย่างเคร่งครัด สิ่งนี้กำลังติดตามพฤติกรรมเพื่อหลีกเลี่ยงการมีสถานะในคลาสที่เฉพาะเจาะจงกับการเรียกใช้เมธอดบางตัวแทนที่จะเป็นการกำหนดค่าทั่วไปหรือการพึ่งพาของคลาส การทำเช่นนั้นหมายความว่าวิธีการมากมายที่อาจไม่มีข้อโต้แย้งจบลงด้วยหนึ่งสองหรือสาม ฉันต้องการฟังความคิดเห็นของคุณเกี่ยวกับสิ่งที่คุณคิดเกี่ยวกับการแลกเปลี่ยนนี้และวิธีการตัดสินใจเกี่ยวกับวิธีการที่จะใช้ในสถานการณ์ใด เนื่องจากรหัสมักจะเข้าใจง่ายกว่าภาษาอังกฤษเมื่ออธิบายรหัสฉันจึงสร้างส่วนเล็กน้อยที่มีทั้งสองรูปแบบ: https://gist.github.com/JeroenDeDauw/6525656
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.