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

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

6
เป็นการดีที่จะมีคอลัมน์“ บันทึกสถานะ” ในตารางฐานข้อมูลหรือไม่?
ฉันต้องชี้แจงก่อนว่าคอลัมน์สถานะไม่ได้มีไว้เพื่อสะท้อนสถานะของรายการในโลกแห่งความเป็นจริงที่แสดงโดยระเบียน (แถว) ในตาราง ค่อนข้างมีวัตถุประสงค์เพื่อแสดงสถานะของบันทึกเอง สามารถทำได้ง่ายเหมือนใช้งาน / ไม่ใช้งานหรือซับซ้อนเช่นอนุมัติ / ลบ / ล็อก / รอดำเนินการ / ปฏิเสธ ฯลฯ สถานะสามารถเก็บไว้ในคอลัมน์จำนวนเต็มบูลีน / สั้นหรือคอลัมน์อักขระเดี่ยวโดยมีการแมปเช่นtrue/ 1= ใช้งานหรือA= อนุมัติแล้ว แนวคิดพื้นฐานคือการมีการสนับสนุนการกู้คืนรีไซเคิล / เหมือนถังขยะในแอปพลิเคชัน (และจำลองในฐานข้อมูล) หากมีส่วนหน้า GUI หรือส่วนต่อประสานอื่นที่สามารถให้ผู้ใช้บันทึก "ลบ" มันไม่ได้ลบบันทึกในตาราง แต่เพียงเปลี่ยนสถานะของบันทึกเป็นไม่ใช้งานหรือถูกลบ เมื่ออินเทอร์เฟซดึงระเบียนมันจะได้รับระเบียนที่ตรงกับเงื่อนไขที่สถานะนั้นใช้งานอยู่หรืออนุมัติแล้วเท่านั้น หากผู้ใช้ทำผิดพลาดและจำเป็นต้องกู้คืน "ลบ" (ในมุมมองของผู้ใช้) DBA สามารถแก้ไขบันทึกกลับเป็น Active หรือ Approved ได้อย่างง่ายดายซึ่งจะดีกว่าการค้นหาสำเนาสำรองและหวังว่าจะค้นหาระเบียนต้นฉบับ ที่นั่น หรืออินเทอร์เฟซของตัวเองสามารถอนุญาตให้ผู้ใช้ดูบันทึกที่ถูกลบในมุมมองที่แยกต่างหากและเรียกคืนพวกเขาตามความจำเป็นหรือแม้กระทั่งลบพวกเขาอย่างถาวร (ลบบันทึกจริง) คำถามของฉัน: นี่เป็นแนวปฏิบัติที่ดีหรือเป็นแนวปฏิบัติที่เลวร้ายหรือไม่? ส่งผลกระทบต่อการทำให้ข้อมูลกลับสู่ปกติหรือไม่ ข้อผิดพลาดที่อาจเกิดขึ้นคืออะไร? มีวิธีอื่นในการบรรลุเป้าหมายเดียวกันหรือไม่? …

2
ฉันควรจะอนุญาตพารามิเตอร์ที่ไม่รู้จักหรือไม่?
ฉันกำลังออกแบบ RESTful API และประสบกับปัญหาชื่อเรื่องซึ่งได้รับการปรับปรุงใหม่เพื่อความชัดเจน: ฉันควรจะล้มเหลวอย่างรวดเร็วหากลูกค้าส่งพารามิเตอร์ที่ไม่รู้จัก? ตัวอย่างเช่น, http://example.com/api/foo?bar=true&paula=bean ในด้านบนbarเป็นพารามิเตอร์ที่ถูกต้อง แต่paulaไม่ได้ระบุไว้โดย API ฉันควร เตือนให้ลูกค้าทราบถึงข้อผิดพลาด ล้มเหลวอย่างรวดเร็ว ไม่ต้องสนใจมัน ถ้าฉันเตือนไคลเอนต์ฉันสามารถออกคำเตือนสำหรับพารามิเตอร์แรกเท่านั้นเนื่องจากพวกเขาสามารถส่งได้ใกล้จำนวนไม่สิ้นสุดและเซิร์ฟเวอร์น่าจะมีสิ่งที่ต้องทำดีกว่า ในทำนองเดียวกันเมื่อล้มเหลวมันจะระบุพารามิเตอร์ที่ไม่ถูกต้องครั้งแรกเป็นปัญหาเท่านั้น ฉันชอบความล้มเหลวมากกว่าการออกคำเตือนเพื่อบังคับให้โปรแกรมเมอร์ดำเนินการเนื่องจากอาจเพิกเฉยต่อปัญหาและทำให้สิ้นเปลืองทรัพยากรหรือทำให้การขนส่งสินค้าเกิดปัญหาโดยไม่ตั้งใจ การไม่ทำสิ่งใดที่เลวร้ายยิ่งไปกว่านั้นในแง่นั้น ข้อโต้แย้งของฉันสมเหตุสมผลหรือไม่ มีวิธีปฏิบัติที่เป็นที่ยอมรับในเรื่องดังกล่าวหรือไม่?
12 rest  api-design 

2
Haskell หาทางแก้ไขปัญหา 3n + 1
นี่เป็นปัญหาที่การเขียนโปรแกรมอย่างง่ายจาก Spoj: http://www.spoj.com/problems/PROBTRES/ โดยพื้นฐานแล้วคุณจะถูกขอให้แสดงรอบวัฏจักร Collatz ที่ใหญ่ที่สุดสำหรับตัวเลขระหว่าง i และ j (รอบ Collatz ของจำนวน $ n $ คือจำนวนขั้นตอนที่จะได้รับจาก $ n $ ถึง 1 ในที่สุด) ฉันได้มองหาวิธี Haskell เพื่อแก้ปัญหาด้วยประสิทธิภาพเปรียบเทียบมากกว่าของ Java หรือ C ++ (เพื่อให้พอดีกับขีด จำกัด เวลาทำงานที่อนุญาต) แม้ว่าโซลูชัน Java อย่างง่ายที่จดจำความยาวของรอบของรอบใด ๆ ที่คำนวณแล้วจะใช้งานได้ แต่ฉันไม่ประสบความสำเร็จในการนำแนวคิดนี้ไปใช้เพื่อรับโซลูชัน Haskell ฉันได้พยายาม Data.Function.Memoize เช่นเดียวกับเทคนิค memoization ที่่กลั่นในบ้านเวลาเข้าสู่ระบบโดยใช้ความคิดจากการโพสต์นี้: /programming/3208258/memoization-in-haskell น่าเสียดายที่การบันทึกช่วยจำทำให้การคำนวณรอบ (n) ช้าลง ฉันเชื่อว่าช้าลงมาจากค่าใช้จ่ายของทาง Haskell …

3
มันจะดีกว่าที่จะป้องกันวิธีการโทรหรือวิธีการเอง?
ฉันกำลังเขียนใบสมัครและฉันมาถึงจุดนี้: private void SomeMethod() { if (Settings.GiveApples) { GiveApples(); } if (Settings.GiveBananas) { GiveBananas(); } } private void GiveApples() { ... } private void GiveBananas() { ... } นี่ดูตรงไปตรงมาสวย มีเงื่อนไขบางอย่างและหากเป็นจริงวิธีการที่จะถูกเรียก อย่างไรก็ตามฉันคิดว่ามันค่อนข้างดีกว่าที่จะทำสิ่งนี้: private void SomeMethod() { GiveApples(); GiveBananas(); } private void GiveApples() { if (!Settings.GiveApples) { return; } ... } private …

1
การโทรแบบอะซิงโครนัสจำนวนมากเทียบกับการโทรครั้งเดียวไปยัง API
เรากำลังพัฒนา REST API ซึ่งส่วนอื่น ๆ จะถูกใช้โดยส่วนหน้า HTML5 ผ่านทางจาวาสคริปต์ แอปพลิเคชันมีไว้สำหรับใช้ภายในองค์กรและมักจะมีผู้ใช้ประมาณ 300 คน แต่เราต้องการที่จะขยายผู้ใช้ให้ได้มากถึง 1,000 คน โดยทั่วไปแล้วการเชื่อมต่อกับ API จะทำภายใน LAN ดังนั้นคุณภาพและเวลาแฝงของการเชื่อมต่อจะดีแม้ว่าจะไม่ได้ยกเว้นการใช้งานผ่านอินเทอร์เน็ตเป็นครั้งคราวซึ่งการเชื่อมต่ออาจช้าลงและมีความล่าช้ามากขึ้นผ่านทาง 3G / 4G ตัวเลือกสองตัวที่เราคิดคือ: ส่วนหน้าจะทำการเรียกใช้แบบอะซิงโครนัสพร้อมกันหลายครั้งเพื่อโหลดส่วนประกอบต่าง ๆ ของอินเทอร์เฟซ จุดเด่น: เรียบง่าย จุดด้อย: การเชื่อมต่อกับเซิร์ฟเวอร์มากขึ้น ตัวควบคุมของส่วนหน้าจะทำการเรียก API ผ่านครั้งเดียวเป็นพารามิเตอร์ที่ต้องดึงข้อมูลวัตถุ ข้อดี: มีการเชื่อมต่อกับเซิร์ฟเวอร์เพียงครั้งเดียวแม้ว่าเซิร์ฟเวอร์จะทำการเชื่อมต่อกับฐานข้อมูลหลายครั้ง ข้อด้อย: ต้องใช้กลไกทั้งในส่วนหน้าและ API มันซับซ้อนการออกแบบ คำอธิบายเพิ่มเติม: จะมีทรัพยากรที่แตกต่างกัน ... / ผลิตภัณฑ์ ... / ที่ตั้ง ฯลฯ ทรัพยากรเหล่านี้สามารถดึงข้อมูลได้เพียงอย่างเดียว แต่จะมีทรัพยากรที่เป็นนามธรรม …
12 rest  api  ajax 

1
รักษา API กับการใช้สำนวนในพอร์ต
ฉันกำลังทำงานบนพอร์ตจาก Python ถึง Rust และพบกับโค้ดบางอย่างที่ไม่สามารถแสดงออกได้อย่างเป็นธรรมชาติใน Rust ตามที่ทำได้ใน Python กรณีนี้มีการใช้พารามิเตอร์เริ่มต้น: class Foo: def __init__(self, a="Hello"): self._a = a ในสนิมคุณอาจใช้สิ่งนี้โดยใช้เครื่องมือสร้าง: struct FooBuilder { a: &'static str, } struct Foo { _a: &'static str } impl FooBuilder { fn new() -> FooBuilder { FooBuilder { a: "Hello", } } fn change_a(self, new_a: &'static …

3
การอ้างถึงองค์ประกอบอาร์เรย์เข้าถึงผ่านตัวชี้เลขคณิตแทนที่จะเป็นตัวดำเนินการ [] ใช่ไหม
ฉันเพิ่งเริ่มเรียนรู้การเขียนโปรแกรมใน C และเพื่อปรับปรุงความเข้าใจของฉันเกี่ยวกับพอยน์เตอร์และอาร์เรย์ฉันพยายามอ้างถึงองค์ประกอบของอาร์เรย์โดยไม่สร้างตัวชี้ใด ๆ เลย: for(k1 = 0; k1 < ROW; k1++){ for(k2 = 0; k2 < COLUMN; k2++){ array[k1][k2] = k1*COLUMN + k2 + 1; printf("[%d][%d] = %d\n", k1, k2, *(array[k1] + k2)); } } รหัสทั้งหมดรวบรวมและทำงานอย่างไม่มีที่ติ ฉันคิดว่าต้องสร้างตัวชี้สำหรับทุก ๆ อาร์เรย์ในซอร์สโค้ดขนาดใหญ่ดูเหมือนว่าจะไม่มีประสิทธิภาพสูง ดังนั้นแทนที่จะมีที่อยู่ของอาร์เรย์ที่เก็บและดึงข้อมูลโดยใช้ตัวชี้มันเป็นวิธีการเขียนโปรแกรมที่ไม่ดีหรือไม่ที่จะใช้ที่อยู่ของอาร์เรย์โดยตรงดังที่แสดงไว้ด้านบน

2
การปรับใช้อย่างต่อเนื่องกับ gitignore
เมื่อทำการปรับใช้อย่างต่อเนื่องกับ Git คุณจะจัดการไฟล์ที่ถูกละเว้นใน gitignore ได้อย่างไร? ไฟล์เหล่านั้นจะถูกละเว้นด้วยเหตุผลความเป็นส่วนตัว (เช่นไม่ต้องการให้ถูกส่งไปยังที่เก็บข้อมูลระยะไกลอื่น ๆเช่น GitHub) แต่ด้วยไฟล์ที่ถูกเพิกเฉยไม่ได้ถูกผลักไปยังที่เก็บการปรับใช้อย่างต่อเนื่องพวกเขาจะไม่ทำงาน จำเป็นสำหรับซอฟต์แวร์เพื่อให้ทำงานได้อย่างถูกต้อง) คนทั่วไปจะไปเกี่ยวกับเรื่องนี้ได้อย่างไร ในกรณีนี้ Git ไม่ใช่ตัวเลือกที่ดีที่สุดสำหรับการปรับใช้อย่างต่อเนื่องเนื่องจากไฟล์ถูกละเว้นหรือไม่

2
เวิร์กโฟลว์แก้ไขสิ่งที่ไม่ได้อยู่ในงานปัจจุบันของคุณ
โดยปกติเมื่อฉันเขียนโปรแกรมฉันมีงานที่ชัดเจนก่อนหน้าฉัน แต่พบสิ่งที่น่ารำคาญที่ฉันต้องการทำความสะอาดเมื่อฉันไป ที่นี่ฉันเห็นสามตัวเลือก: ทำในภายหลัง (อาจลืม / ต้องใช้เวลาในการเพิ่มตั๋ว) ทำทันทีและส่งมอบงานของฉันในปัจจุบัน (ไม่ชัดเจน) ทำทันทีและกระทำแยกต่างหาก (ต้องค้นหาอาจทำผิดพลาดและไปที่ตัวเลือก # 2 โดยไม่ได้ตั้งใจ) นี่อาจเป็นพื้นฐานค่อนข้าง แต่มีวิธีใดบ้างที่จะหลีกเลี่ยงสิ่งนี้โดยใช้ svn / git / other?

2
อินสแตนซ์ Java 8 Stream ควรจะปิด () เสมอหรือไม่
Quad the Javadoc : สตรีมมีเมธอด BaseStream.close () และใช้ AutoCloseable แต่อินสแตนซ์สตรีมเกือบทั้งหมดไม่จำเป็นต้องปิดจริงหลังการใช้งาน โดยทั่วไปเฉพาะสตรีมที่มีแหล่งที่มาเป็นแชนเนล IO (เช่นที่ส่งคืนโดย Files.lines (Path, Charset)) เท่านั้นที่จะต้องปิด สตรีมส่วนใหญ่ได้รับการสนับสนุนโดยคอลเลกชันอาร์เรย์หรือการสร้างฟังก์ชั่นซึ่งไม่จำเป็นต้องมีการจัดการทรัพยากรพิเศษ (หากกระแสต้องปิดก็สามารถประกาศเป็นทรัพยากรในงบลองกับทรัพยากร) "เกือบทั้งหมด" และ "โดยทั่วไป" นั้นคลุมเครือ - ถ้าคุณกำลังเขียนไลบรารีและคุณกำลังสรุปแหล่งที่มาของสตรีมของคุณจากผู้ใช้สตรีมนั้นคุณต้องถามตัวเองเสมอ - "ฉันควรปิดหรือไม่ นี้?" IO-ได้รับการสนับสนุนสตรีมจะต้องมีการปิดเพราะการดำเนินงานสถานีไม่ได้เรียกcloseเพื่อให้ได้อย่างมีประสิทธิภาพฉันมักจะมีทั้งจำ / เอกสารที่สตรีมของฉันมาจากหรือฉันมักจะต้องcloseมัน ตัวเลือกนิวเคลียร์ที่ฉันคิดว่าน่าจะไม่ส่งคืนสตรีมจากวิธีการหรือยอมรับพารามิเตอร์สตรีมซึ่งเป็นความเชื่อมั่นที่บางคนสะท้อนในทีม JDK ฉันพบว่ามัน จำกัด มากเกินไปเมื่อพิจารณาถึงประโยชน์ในทางปฏิบัติของสตรีม อะไรคือวิธีปฏิบัติที่ดีที่สุดของคุณเกี่ยวกับการปิดสายธาร ฉันดูออนไลน์เพื่อหาคำตอบสำหรับเรื่องนี้จากบางคนของ JDK ที่มักจะใช้งานกับคำถามชุมชนที่คล้ายกัน แต่ไม่พบสิ่งใดที่เกี่ยวข้อง
12 java  resources  java8 

5
วิธีหลีกเลี่ยงการละเมิด SRP ในชั้นเรียนเพื่อจัดการแคช?
หมายเหตุ:ตัวอย่างโค้ดเขียนด้วย c # แต่นั่นไม่ควรสำคัญ ฉันใส่ c # เป็นแท็กเพราะหาแท็บไม่ได้อีก นี่คือเกี่ยวกับโครงสร้างรหัส ฉันอ่าน Clean Code และพยายามเป็นโปรแกรมเมอร์ที่ดีขึ้น ฉันมักจะพบว่าตัวเองกำลังดิ้นรนเพื่อทำตามหลักการความรับผิดชอบเดียว (ชั้นเรียนและฟังก์ชั่นควรทำเพียงสิ่งเดียว) โดยเฉพาะอย่างยิ่งในฟังก์ชั่น บางทีปัญหาของฉันคือ "สิ่งหนึ่ง" ไม่ชัดเจน แต่ก็ยัง ... ตัวอย่าง: ฉันมีรายการ Fluffies ในฐานข้อมูล เราไม่สนใจว่าปุยคืออะไร ฉันต้องการชั้นเรียนเพื่อกู้คืนความผิดปกติ อย่างไรก็ตาม fluffies สามารถเปลี่ยนแปลงได้ตามตรรกะบางอย่าง คลาสนี้จะส่งคืนข้อมูลจากแคชหรือรับข้อมูลล่าสุดจากฐานข้อมูลทั้งนี้ขึ้นอยู่กับตรรกะบางอย่าง เราสามารถพูดได้ว่ามันจัดการกับความฟู่ฟ่าและนั่นคือสิ่งหนึ่ง เพื่อให้ง่ายสมมติว่าข้อมูลที่โหลดนั้นดีสำหรับหนึ่งชั่วโมงจากนั้นจะต้องโหลดใหม่ class FluffiesManager { private Fluffies m_Cache; private DateTime m_NextReload = DateTime.MinValue; // ... public Fluffies GetFluffies() { …

5
อะไรคือความแตกต่างทางแนวคิดระหว่างสุดท้ายและผู้ทำลายล้าง
ก่อนอื่นฉันตระหนักดีว่าเหตุใดจึงไม่มีการสร้าง 'ที่สุด' ใน C ++ แต่การอภิปรายความคิดเห็นที่เพิ่มขึ้นอย่างต่อเนื่องในคำถามอื่นดูเหมือนจะรับประกันคำถามแยกต่างหาก นอกเหนือจากปัญหาที่finallyใน C # และ Java สามารถมีอยู่ได้เพียงครั้งเดียว (== 1) ต่อขอบเขตและขอบเขตเดียวสามารถมี destructors C ++ หลายตัว (== n) ฉันคิดว่ามันเป็นสิ่งเดียวกัน (ด้วยความแตกต่างทางเทคนิค) อย่างไรก็ตามผู้ใช้คนอื่นแย้ง : ... ฉันพยายามที่จะบอกว่า dtor เป็นเครื่องมือสำหรับ (sematics ที่วางจำหน่าย) และในที่สุดก็เป็นเครื่องมือสำหรับ (Commit semantics) หากคุณไม่เห็นสาเหตุ: ลองคิดดูว่าทำไมการโยนข้อยกเว้นทับซ้อนทับกันในที่สุดก็เป็นเรื่องถูกกฎหมายและทำไมสิ่งเดียวกันถึงไม่ได้สำหรับผู้ทำลายล้าง (ในบางแง่มันเป็นข้อมูลเทียบกับสิ่งควบคุม Destructors สำหรับการปล่อยข้อมูลในที่สุดก็เพื่อปล่อยการควบคุมพวกมันต่างกันโชคไม่ดีที่ C ++ เชื่อมโยงพวกเขาเข้าด้วยกัน) มีคนล้างข้อมูลนี้ได้ไหม

1
วิธีการตรวจสอบเพื่อนกับ GitHub คำขอดึง?
เรากำลังย้ายจาก Bitbucket ไปเป็น GitHub และสิ่งหนึ่งที่เรากำลังดิ้นรนคือความคิดเห็นเกี่ยวกับโค้ดเพียร์ที่ทำงานได้อย่างราบรื่นบน Bitbucket เช่นนี้: ผู้เขียนเปิดคำขอดึง(GitHub: เหมือนกัน) ผู้เขียนเพิ่มเพื่อนร่วมงานของเขา / เธอเป็นผู้ตรวจสอบ(GitHub: ดิ้นรนที่นี่กับผู้รับมอบหมายหลายคน ) ผู้ตรวจสอบทั้ง: อนุมัติ PR ด้วยเครื่องหมายสีเขียว(GitHub: ??) เพิ่มความคิดเห็น(GitHub: เหมือนกัน) สร้างงานที่มีน้ำหนักเบา(GitHub: เรียงลำดับที่คล้ายกันหาก- [ ]มีการใช้ไวยากรณ์ในคำอธิบาย PR; น่าเสียดายที่มันไม่ทำงานสำหรับงาน) มีรายการของ PRs ที่ฉันสามารถดูได้อย่างรวดเร็วซึ่งมีการตรวจทานและตกลงที่จะรวมและที่ต้องการความสนใจเพิ่มเติม(GitHub: ??) ฉันควรชี้ให้เห็นว่าเราต้องการหลีกเลี่ยงเครื่องมือตรวจสอบโค้ดของบุคคลที่สามหากเป็นไปได้ทั้งหมดและต้องการที่จะอยู่ใน Vanilla GitHub ด้วยวิธีแก้ปัญหาบางอย่าง

1
Git branching จากฟีเจอร์ branch เพื่อทำงานบนฟีเจอร์ย่อย
ขณะนี้เราอยู่ในสถานการณ์ต่อไปนี้ที่สาขาฟีเจอร์ได้รับการแยกสาขาสำหรับฟีเจอร์ย่อย (เช่นทำงานบนแบ็กเอนด์และส่วนหน้าสำหรับฟีเจอร์เดียวกัน): o | o development |\ | o feature-a | | | o | |\ | | o feature-a-sub | | | | | | | \ | o merged feature-a into feature-a-sub | / o feature-a-sub merged into development | | | o feature-a with future work on …
12 git  branching 

3
ตัวชี้ที่ไม่ใช่ตัวเลือกเทียบกับการอ้างอิงที่ไม่ใช่แบบ const ใน C ++
ในคุณสมบัติ C ++ อื่น ๆ , อาร์กิวเมนต์อ้างอิงของคู่มือสไตล์ Google C ++ , ฉันอ่านว่าต้องไม่ใช้การอ้างอิงที่ไม่ใช่ const พารามิเตอร์ทั้งหมดที่ส่งผ่านโดยการอ้างอิงจะต้องระบุว่า const เป็นที่ชัดเจนว่าการดูการเรียกใช้ฟังก์ชันที่ใช้การอ้างอิงเป็นอาร์กิวเมนต์ทำให้ผู้เขียนโปรแกรม C สับสน แต่ C และ C ++ เป็นภาษาที่แตกต่างกันในขณะนี้ หากจำเป็นต้องใช้พารามิเตอร์เอาต์พุตโดยใช้ตัวชี้สำหรับพารามิเตอร์เอาต์พุตที่ต้องการอาจทำให้ฟังก์ชันการทำงานทั้งหมดถูกข้ามไปซึ่งทำให้การใช้งานฟังก์ชั่นมีความซับซ้อนมากขึ้น (เพิ่มความซับซ้อนของวงจรและความลึกของฟังก์ชัน) ฉันต้องการสร้างรหัส C ++ ให้เข้าใจและบำรุงรักษาได้ง่ายที่สุดดังนั้นโดยทั่วไปฉันสนใจที่จะอ่านคู่มือการเขียนโค้ดสไตล์ แต่เพื่อปรับแนวทางปฏิบัติที่ดีที่สุดในทีมฉันคิดว่าความเข้าใจเหตุผลเบื้องหลังองค์ประกอบของแนวทางนำเสนอเป็นปัจจัยสำคัญ การอ้างอิงที่ไม่ใช่ const นั้นแย่จริง ๆ หรือไม่? การห้ามเฉพาะ Google เท่านั้นหรือเป็นกฎที่ยอมรับกันโดยทั่วไปหรือไม่ อะไรคือเหตุผลของความพยายามพิเศษสำหรับการใช้พารามิเตอร์เอาต์พุตเป็นพอยน์เตอร์?

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