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

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

3
TDD ต้องการแนวทางในการแก้ไขปัญหาอัลกอริทึม
ฉันล้มเหลวในการทดสอบอัลกอริทึมกับ Codility เพราะฉันพยายามหาวิธีแก้ปัญหาที่ดีกว่าและในที่สุดฉันก็ไม่มีอะไรเลย ดังนั้นฉันคิดว่าถ้าฉันสามารถใช้วิธีการคล้ายกับ TDD เช่นถ้าฉันสามารถพัฒนาวิธีแก้ปัญหาแบบค่อยเป็นค่อยไปในแบบเดียวกันได้หรือไม่ หากฉันกำลังเขียนอัลกอริทึมการเรียงลำดับฉันสามารถย้ายจาก Bubblesort มาตรฐานไปเป็น Bubbleort แบบ 2 ทางได้ แต่จากนั้นบางสิ่งที่ก้าวหน้ากว่าอย่าง Quicksort จะเป็น "quantum leap" แต่อย่างน้อยฉันจะมี testdata ฉันสามารถตรวจสอบได้อย่างง่ายดาย เคล็ดลับอื่น ๆ สำหรับการทดสอบ? สิ่งหนึ่งที่ฉันจะทำในครั้งต่อไปคือการใช้วิธีการ / ฟังก์ชั่นมากกว่าห่วงภายใน ตัวอย่างเช่นในการเรียงลำดับคุณมักจะต้องสลับ หากเป็นวิธีฉันจะต้องแก้ไขรหัสโทร ฉันยังสามารถมีวิธีแก้ปัญหาขั้นสูงเพิ่มเติมเป็นคลาสที่ได้รับ ด้วยปัญหา "อัลกอริทึม" กับ "ปกติ" ฉันหมายถึงปัญหาที่ความซับซ้อนของเวลาเป็นสิ่งสำคัญ ดังนั้นแทนที่จะผ่านการทดสอบมากขึ้นเช่นเดียวกับใน TDD คุณจะทำให้ "ทำงานได้ดีขึ้น" ด้วย "Similar to TDD" ฉันหมายถึง: เขียนการทดสอบที่ค่อนข้างอัตโนมัติเพื่อประหยัดเวลาในการเพิ่มการทดสอบแบบแมนนวล การพัฒนาที่เพิ่มขึ้น การทดสอบการถดถอยความสามารถในการตรวจสอบว่าตัวแบ่งรหัสหรืออย่างน้อยถ้าฟังก์ชั่นการเปลี่ยนแปลงระหว่างการเพิ่มขึ้น ฉันคิดว่านี่น่าจะง่ายต่อการเข้าใจถ้าคุณเปรียบเทียบ เขียนเชลล์เรียงลำดับโดยตรง กระโดดจาก …

7
บริการควรพูดคุยกันโดยตรงในสถาปัตยกรรมบริการไมโครสโคปหรือไม่?
ฉันมีเว็บเซอร์วิสจำนวนหนึ่งที่รวมเป็นเว็บแอปพลิเคชัน ลูกค้าสามารถเข้าถึงบริการเหล่านี้ผ่านการเรียกใช้ REST API บริการเหล่านี้ควรจะสามารถพูดคุยกันได้โดยตรงหรือไม่? ถ้าเป็นเช่นนั้นจะไม่ทำให้พวกเขาคู่ซึ่งขัดแย้งกับแนวคิดเกี่ยวกับ microservices? ลูกค้าควรเรียกพวกเขาโดยตรงเพื่อรับข้อมูลที่จำเป็นในการโหลดหน้าเว็บบนไคลเอนต์หรือไม่ หรือฉันควรมีเลเยอร์อื่นอยู่ด้านบนของบริการที่จัดการการร้องขอจากไคลเอนต์ดึงข้อมูลสำหรับการร้องขอนั้นแล้วส่งกลับไปยังไคลเอนต์หรือไม่

2
ทำไมคำสั่ง“ ใช้” และคำสั่ง“ ใช้” ใช้คำหลักเดียวกันใน C #
usingสั่งให้เราสามารถเข้าถึงประเภทโดยไม่ต้องใช้ชื่อที่มีคุณสมบัติครบถ้วนของพวกเขา using MyNamespace.Foo.Bar; usingงบทำหน้าที่เป็นน้ำตาลประโยคสำหรับtry/ finallyบล็อกซึ่งมั่นใจว่าวัตถุที่มีการกำจัดอย่างถูกต้อง using(var x = new MyDisposableClass()) { ... } สถานการณ์ทั้งสองนี้ดูเหมือนจะไม่มีอะไรเกี่ยวข้องกัน เพราะเหตุใดพวกเขาจึงใช้คำหลักเดียวกัน ฉันสงสัยว่าทุกคนจะสับสนทั้งสองกรณี แต่ดูเหมือนแปลกที่จะไม่สร้างคำศัพท์ใหม่สำหรับฟังก์ชั่นใหม่ นอกจากนี้ฉันได้อ่านเกี่ยวกับการใช้สองครั้งclassใน C ++ เช่นกัน (อันหนึ่งสำหรับการประกาศคลาส, หนึ่งสำหรับการกำหนดพารามิเตอร์เทมเพลต) แต่ในที่สุดกรณีที่สองมีคำสำคัญของตัวเองtypenameซึ่งทำให้ฉันมีเหตุผลมากขึ้น
10 c#  statement 

5
คำศัพท์ - ซอร์สโค้ดเป็นโปรแกรมหรือไม่ [ปิด]
ปิด คำถามนี้ต้องการรายละเอียดหรือความคมชัด ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ เพิ่มรายละเอียดและชี้แจงปัญหาโดยแก้ไขโพสต์นี้ ปิดให้บริการใน3 ปีที่ผ่านมา ฉันเป็นผู้เริ่มต้นในการเขียนโปรแกรมและฉันไม่เข้าใจคำศัพท์ที่ดี ฉันต้องการทราบว่าซอร์สโค้ดที่เขียนในภาษาที่คอมไพล์เช่น C หรือ C ++ ถือว่าเป็นโปรแกรมหรือไม่? ถ้าไม่ทุกคนสามารถอธิบายได้ว่าทำไม

3
การสร้างระบบที่ซ้ำซ้อนอย่างสมบูรณ์สำหรับการประกันคุณภาพ (QA) ของการปฏิบัติอื่นที่ไม่ดีหรือไม่
ที่ทำงานเรามีระบบที่ค่อนข้างซับซ้อน เรียกระบบนี้ว่า System_A ทีมงาน QA ของเราได้สร้างระบบอื่นเรียกระบบนี้ว่า System_B เพื่อทดสอบ System_A วิธีที่ใช้ System_B มีดังนี้ เราสร้างอินพุต (โดยใช้ System_B เอง), IN, ประมวลผลอินพุตดังกล่าวกลับผ่าน System_B และสร้างเอาต์พุต O_B ดังนั้นกระบวนการดังต่อไปนี้: System_B(IN) -> O_B. จากนั้นเราก็ทำเช่นเดียวกันสำหรับ System_A เพื่อสร้างผลลัพธ์ของตัวเอง O_A: System_A(IN) -> O_A. เมื่อใดก็ตามจะถือว่า O_B เป็นเอาต์พุตที่คาดหวังและ O_A เป็นเอาต์พุตที่ตรวจพบ / เกิดขึ้นจริง โดยนัยก็คือ O_B เป็นแหล่ง "ทองคำ" (ความจริง) อย่างไรก็ตามเราพบปัญหาหลายอย่าง O_A ผิด O_B ถูกต้อง O_A …

2
ในการต่อสู้แย่งชิงกันการอภิปรายเกี่ยวกับสิ่งที่ทำเมื่อวานนี้ควร จำกัด เฉพาะงานบนกระดานหรืองานที่ทำทั้งหมด?
ฉันรู้ว่ากฎการแย่งชิงกันของสกอตประจำวันบอกว่าทีมควรพูดคุยเกี่ยวกับสิ่งที่พวกเขาทำเมื่อวานนี้สิ่งที่พวกเขากำลังทำในวันนี้และอะไรก็ตามที่ปิดกั้นพวกเขา ไม่มีอะไรอีกแล้ว. แต่ปัญหาคือบางครั้งนักพัฒนาใช้เวลาทั้งวันในการทำงานที่ไม่เกี่ยวข้องกับงานของพวกเขาและจากนั้นพูดคุยเกี่ยวกับมันในขั้นตอนสุดท้าย มันเป็นสิ่งที่พวกเขาทำเมื่อวานนี้! จากประสบการณ์ของฉันฉันพบว่ามันมีประสิทธิภาพมากกว่าที่จะพูดคุยเกี่ยวกับงานบนกระดานเพื่อรักษาความโดดเด่นและเพื่อให้ทุกคนมุ่งเน้นงานของพวกเขาเพื่อตรวจสอบการประเมินและติดตามบันทึกของพวกเขาทุกวัน มันถูกต้องหรือไม่ที่จะ จำกัด การสนทนากับงานบนกระดาน?
10 agile  scrum  meetings 

7
ทำไมความซับซ้อนของวงจรจึงมีความสำคัญสำหรับวิธีการเดียว?
ฉันกำลังใช้SonarLint สำหรับ Eclipseตั้งแต่เมื่อเร็ว ๆ นี้และมันช่วยฉันได้มาก อย่างไรก็ตามมันทำให้ฉันมีคำถามเกี่ยวกับความซับซ้อนของวัฏจักร SonarLint ถือว่า CC ที่ยอมรับได้ของ 10 และมีบางกรณีที่ฉันเกินกว่านั้นประมาณ 5 หรือ 6 หน่วย ชิ้นส่วนเหล่านั้นเกี่ยวข้องกับตัวทำแผนที่ที่ค่าอาศัยตัวแปรที่แตกต่างกันตัวอย่างเช่น ฟิลด์ A อาศัยสตริง sA; ฟิลด์ B อาศัยสตริง sB; ฟิลด์ C อาศัย String sC; ฯลฯ ... ฉันไม่มีทางเลือกอื่นที่วางifสำหรับแต่ละฟิลด์ นี่ไม่ใช่ตัวเลือกของฉัน (โชคดี) แต่เป็นระบบที่ซับซ้อนและมีอยู่แล้วที่ฉันไม่สามารถเปลี่ยนแปลงได้ด้วยตัวเอง หลักของคำถามของฉันคือเหตุผลที่มันเป็นสิ่งสำคัญมากที่จะได้มีซีซีสูงเกินไปในวิธีการเดียว ? หากคุณย้ายเงื่อนไขบางอย่างของคุณในวิธีย่อยอย่างน้อยหนึ่งวิธีเพื่อลดความซับซ้อนมันไม่ลดค่าใช้จ่ายโดยรวมของฟังก์ชั่นของคุณมันเป็นเพียงการเคลื่อนย้ายปัญหาที่อื่นฉันเดา? (ขออภัยในความผิดพลาดเล็กน้อยหากมี) แก้ไข คำถามของฉันไม่ได้อ้างถึงความซับซ้อนของวัฏจักรโลก แต่มีเพียงความซับซ้อนของวิธีการเดียวและวิธีการแยก (ฉันมีเวลาคร่าวๆอธิบายสิ่งที่ฉันหมายถึงขอโทษ) ฉันถามว่าเพราะเหตุใดจึงอนุญาตให้แบ่งเงื่อนไขของคุณเป็นวิธีที่เล็กกว่าถ้ามันยังเป็นของ 'วิธีสุดยอด' ซึ่งจะดำเนินการทุกวิธีย่อยจึงเพิ่มความซับซ้อนให้อัลกอริทึม อย่างไรก็ตามลิงค์ที่สอง ( เกี่ยวกับ …

3
มันสมเหตุสมผลหรือไม่ที่จะไม่มีเกณฑ์ผ่าน / ไม่ผ่านสำหรับการทดสอบความเครียด
เพียงเพื่อความชัดเจนการทดสอบความเครียดที่ฉันได้เขียนเพิ่มขึ้นอย่างต่อเนื่องในระบบจนกว่าจะถึงจุดแตกหัก ในทางทฤษฎีมันจะทำงานไปเรื่อย ๆ แต่เนื่องจากทรัพยากรระบบมี จำกัด จึงคาดว่าจะล้มเหลวหลังจากผ่านไประยะหนึ่ง ฉันมีโหลดที่คาดไว้สำหรับระบบ แต่นี่เป็นการทดสอบแยกต่างหากในการทดสอบโหลด จุดประสงค์ของการทดสอบความเครียดนี้คือการหาว่าฉันสามารถโหลดระบบได้มากเท่าไรก่อนที่ฉันจะต้องทำการปรับขนาด ฉันอยู่ในกระบวนการเขียนการทดสอบความเครียดสำหรับระบบและฉันสงสัยว่ามันสมเหตุสมผลหรือไม่ที่จะต้องผ่านเกณฑ์ / ไม่ผ่าน ตามลักษณะของการทดสอบโหลดจะเพิ่มขึ้นเรื่อย ๆ จนกว่าจะถึงจุดแตกหัก (เช่นการทดสอบล้มเหลว ) เห็นได้ชัดว่าฉันไม่ทราบว่าจุดแตกหักนี้อยู่ก่อนและดังนั้นจึงไม่มีความคาดหวังของโหลดที่ระบบสามารถจัดการ (ในทางทฤษฎีแล้ว) ตอนนี้ฉันมีการทดสอบประสิทธิภาพอื่น ๆ เพื่อทดสอบระบบภายใต้ภาระที่คาดไว้ ฯลฯ ซึ่งฉันสามารถกำหนดเกณฑ์การผ่าน / ไม่ผ่านได้อย่างง่ายดายและฉันสามารถใช้เกณฑ์เหล่านี้เป็นพื้นฐานสำหรับการทดสอบความเครียดของฉัน ในคำอื่น ๆ ฉันสามารถตั้งค่าพื้นฐานขั้นต่ำสำหรับการทดสอบความเครียดของฉันไปถึง แต่ฉันไม่แน่ใจว่านี่เป็นสิ่งที่ถูกต้องที่จะทำ (นี่คือ 'การทำซ้ำ' การทดสอบอื่น ๆ ของฉัน?) ฉันหวังว่าบางคนที่มีประสบการณ์มากขึ้นในการทดสอบประสิทธิภาพสามารถช่วยฉันได้ที่นี่ เกณฑ์อื่น ๆ สำหรับการผ่าน / ไม่ผ่านมีอะไรบ้างเมื่อใช้การทดสอบความเครียด (ถ้ามี)

1
วิธีโยกย้าย webapp ดั้งเดิมที่มีอยู่เพื่อใช้ OAuth2
ขณะนี้ฉันมีเว็บแอพพลิเคชั่นเสาหินอายุ 15 ปีที่มีผู้ใช้งานเกือบ 1 ล้านคนโดยใช้ระบบการอนุญาตและรับรองความถูกต้อง: JAAS ชื่อผู้ใช้ & ร้านค้า pwds ในฐานข้อมูลด้วยการแฮชรหัสผ่านขั้นพื้นฐาน อัลกอริทึมคร่ำเครียด ฯลฯ ) ฉันจะปรับปรุงแอปพลิเคชั่นในช่วง 12-18 เดือนข้างหน้าโดยเน้นที่ UI เป็นหลัก แต่จะค่อยๆอัพเกรดชิ้นส่วนพื้นฐานเช่นกัน (อัพเกรดเป็น Spring, Spring Security, เป็นต้น) ภายในโครงการนี้เราได้ตัดสินใจที่จะแก้ไขปัญหาการอัพเกรด UI แบบโมดูลต่อโมดูล ทำให้แต่ละโมดูลพร้อมใช้งานเมื่อเสร็จสมบูรณ์ โอกาสที่สมบูรณ์แบบในการแบ่งเสาหินออกเป็นเว็บแอปแต่ละอัน (ทั้งหมดยังคงการออกแบบ UX ที่เหมือนกัน) ที่ฉันพยายามจะวางแผนเรื่องนี้อยู่ที่ระดับการรับรองความถูกต้อง & การอนุญาต ฉันต้องการโซลูชันการตัดขวางที่จะอาร์คโมดูลทั้งหมดดังนั้นเมื่อผู้ใช้ถูกส่งจากเว็บแอปหนึ่งไปยังอีกเว็บหนึ่งนั่นเป็นการเปลี่ยนที่ราบรื่น - พวกเขาไม่รู้ด้วยซ้ำว่าพวกเขาอยู่ในเว็บแอพที่แตกต่างกัน OAuth2 ฟังดูเหมือนเป็นโซลูชั่นที่สมบูรณ์แบบ ฉันกำลังพยายามเข้าใจวิธีรวมสิ่งนี้ ฉันต้องสร้างเซิร์ฟเวอร์ OAuth2 ที่กำหนดเองของตัวเองหรือไม่ นั่นทำให้ฉันชอบความคิดที่แย่มาก แต่ฉันจะ: โอนย้ายบัญชีผู้ใช้และกระบวนการอนุญาตทั้งหมดไปยังเซิร์ฟเวอร์ OAuth2 ของบุคคลที่สาม …

4
อะไรคือความรับผิดชอบหลักในการเขียนโปรแกรมเชิงวัตถุ?
ฉันใหม่สำหรับการเขียนโปรแกรมเชิงวัตถุและฉันไม่เข้าใจว่าจุดประสงค์หลักของอะไร ใช่ฉันอ่านว่ามันเป็น "จุดเริ่มต้น" ของโปรแกรม แต่สิ่งที่ฉันไม่เข้าใจคือสิ่งที่ควรจะเป็นในหลัก และความรับผิดชอบของมันคืออะไร? อาจเกิดขึ้นว่าสิ่งที่เขียนในหลักอาจถูกห่อหุ้มในวัตถุอื่น แต่คุณควรใช้วิธีการนี้มากแค่ไหน? นี่คือหลักแรกของฉันที่ฉันเขียนใน Java มันง่ายมาก แต่อาจทำให้คุณเข้าใจข้อสงสัยของฉันดีขึ้น ฉันมีสัตว์ที่เป็นนามธรรมซึ่งขยายโดย "Cat" และ "Dog" ฉันใช้หลักในการสร้างวัตถุบางอย่างและยังเป็น "ส่วนต่อประสาน" กับผู้ใช้ด้วยอย่างที่คุณเห็นฉันใช้คำสั่งแบบมีเงื่อนไขเพื่อ "ถามผู้ใช้" สิ่งที่เขาต้องการจะทำ คำถามของฉันเกิดขึ้นจากความจริงที่ว่าอินเทอร์เฟซสามารถถูกห่อหุ้มในวัตถุอื่นและไม่ให้ความรับผิดชอบหลัก public static void main(String[] args) { Scanner input = new Scanner(System.in); System.out.println("What type of animal do you want to create? \n dog cat"); String type = input.nextLine(); if …

5
การเพิ่มประสิทธิภาพการจัดสรรสตริงที่ซ้ำซ้อนใน C ++
ฉันมีองค์ประกอบ C ++ ที่ค่อนข้างซับซ้อนซึ่งประสิทธิภาพได้กลายเป็นปัญหา การทำโปรไฟล์แสดงให้เห็นว่าเวลาดำเนินการส่วนใหญ่นั้นใช้เพียงการจัดสรรหน่วยความจำสำหรับstd::strings เท่านั้น ฉันรู้ว่ามีจำนวนมากซ้ำซ้อนในสายเหล่านั้น ค่าจำนวนเล็กน้อยทำซ้ำบ่อยมาก แต่ก็มีค่าที่ไม่ซ้ำกันจำนวนมาก โดยทั่วไปแล้วสตริงค่อนข้างสั้น ตอนนี้ฉันแค่คิดว่ามันจะทำให้รู้สึกถึงการใช้ซ้ำการจัดสรรบ่อยเหล่านั้นอย่างใด แทนที่จะเป็น 1,000 พอยน์เตอร์ถึง 1,000 ค่า "foobar" ที่แตกต่างกันฉันสามารถมี 1,000 พอยน์เตอร์ต่อหนึ่งค่า "foobar" ความจริงที่ว่านี้จะมีประสิทธิภาพมากขึ้นของหน่วยความจำเป็นโบนัสที่ดี แต่ฉันส่วนใหญ่กังวลเกี่ยวกับความล่าช้าที่นี่ ฉันเดาว่าตัวเลือกหนึ่งจะรักษารีจิสทรีของค่าที่จัดสรรไว้บางส่วน แต่เป็นไปได้หรือไม่ที่จะทำให้การค้นหารีจิสทรีเร็วขึ้นกว่าการจัดสรรหน่วยความจำซ้ำซ้อน นี่เป็นวิธีที่ปฏิบัติได้หรือไม่?

3
วิธีการใช้ RESTful API ภายนอกด้วย Symfony
เรากำลังสร้างสถาปัตยกรรม Microservice สำหรับโครงการของเราโดยส่วนใหญ่แล้วแอพพลิเคชั่นส่วนหน้าของ Symfony จะโต้ตอบกับ RESTful APIs ส่วนหลัง ปัญหาคือวิธีนี้กำลังทำลายการจัดการเอนทิตี้ของ Symfony ที่อาศัยหลักคำสอนกับฐานข้อมูลเป็นอย่างมาก โดยที่ Symfony มักจะจัดการเอนทิตีกับ Doctrine โดยอัตโนมัติงานส่วนใหญ่สิ่งนี้ไม่สามารถทำซ้ำได้ง่ายเมื่อเราต้องเข้าถึงข้อมูลภายนอกจาก API ตัวอย่างเช่นกับเอนทิตีของลูกค้า: ด้วยการใช้ Doctrine เราต้องกำหนดคลาสลูกค้าของเราและตอนนี้มันเป็นเรื่องง่ายที่จะสร้างปรับปรุงเรียกลูกค้าของเรา การใช้วิธี REST API ลูกค้าสามารถเข้าถึงได้ผ่าน API แต่เรามีงานจำนวนมากเพื่อกำหนดวิธีสร้างไคลเอ็นต์ (POST), อัปเดต (PUT), ดึง (GET) ฯลฯ เพื่อให้ลูกค้าสังเกตเห็นมีการใช้งานโดยแอปพลิเคชั่นหลายแห่งไม่เพียง แต่แอพพลิเคชั่นส่วนหน้าเท่านั้นดังนั้นจึงเป็น API เฉพาะ เราควรสร้างคลาสที่มีวิธีคล้ายเอนทิตีที่ซ่อนความซับซ้อนในการเรียก API การนำเข้าข้อมูล API ทั้งหมดในพื้นที่และเข้าถึงพวกเขาผ่าน Doctrine หรือวิธีอื่นใด?

5
การวางเครื่องหมายข้อความไว้ในรูปแบบของสตริงที่ไม่ดีหรือไม่? มีทางเลือกอื่นหรือไม่?
ฉันทำงานกับสตริงจำนวนมากซึ่งต้องการการจัดการอย่างมาก ตัวอย่างเช่นฉันอาจสร้างสตริงเช่นนี้ ส่วนที่ 1 เรือ ส่วนการ เขียนโปรแกรมA ส่วนที่ 2 การแบ่งพาร์ติชั่นสำหรับการเขียนโปรแกรม ส่วน AA มาตรารายการ SQL สตริงจะใหญ่เกินไปที่จะตรวจสอบด้วยตนเองทุกส่วน ตอนนี้ฉันต้องsplitนี้stringเป็นstringlistโดยส่วนและชิ้นส่วน ฉันนึกถึงตัวเลือกสองทาง: นิพจน์ปกติ: QStringList sl = s.split(QRegularExpression("\n(?=Part [0-9]+|Section [A-Z]+)")); ดูเหมือนว่าจะใช้งานได้ แต่บางครั้งมีข้อยกเว้นเกิดขึ้น (IE: Section SQL Entriesอาจแยกได้) มิฉะนั้นสิ่งที่ฉันสามารถทำได้คือวางเครื่องหมายเมื่อฉันสร้างสตริงเริ่มต้น: art ส่วนที่ 1 เรือ ection ส่วน โปรแกรมA art ส่วนที่2 การแบ่งพาร์ติชันสำหรับการเขียนโปรแกรม ection ส่วนมาตราAA ของมาตรา SQL ซึ่งหมายความว่าการแยกสตริงจะกลายเป็นเรื่องง่าย: QStringList sl = s.split("🚤💻")); …

1
การเรียงลำดับด้วย java 8 สตรีมทำงานอย่างไรภายใต้ประทุน?
เมื่อฉันเรียกว่าStream.sort(..)มีอาร์เรย์ขององค์ประกอบใหม่ที่สร้างขึ้นและสตรีม iterates มากกว่าอาร์เรย์ที่เรียงใหม่ที่สร้างขึ้น? กล่าวอีกนัยหนึ่งว่า Java 8 Stream ทำsortอะไรได้บ้าง?

1
ทำไมสวิฟท์จึงต้องมีโต๊ะสำหรับพยาน?
ฉันพยายามอ่านรายละเอียดการใช้งาน Swift และสิ่งหนึ่งที่ฉันไม่สามารถตะลึงได้คือ "โต๊ะพยาน" ดูเหมือนว่าพวกเขาเป็นตัวชี้ vtable แยกที่ใช้สำหรับ structs แต่ทำไมคุณต้องใช้มัน โครงสร้างจะถูกคัดลอกโดยค่าดังนั้นคุณจึงรู้อยู่แล้วในเวลารวบรวมว่าเป็นประเภทใด ดังนั้นคุณจะไม่เพียงรหัสยากที่วิธีการโทรและจะทำหรือไม่ ทำไมต้องทำการจัดส่งเสมือนกับวิธีการเหล่านี้

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