คำถามติดแท็ก language-agnostic

แท็กนี้มีไว้สำหรับคำถามที่ไม่เฉพาะกับภาษาการเขียนโปรแกรมหรือสภาพแวดล้อม

5
ควรทำการตรวจสอบโค้ดก่อนหรือหลังการทดสอบหน่วย
ฉันกำลังถกเถียงกับเพื่อนร่วมงานของฉันในเวลาที่จะทำการตรวจสอบโค้ด - ก่อนหรือหลังการทดสอบหน่วย การปฏิบัติที่ดีที่สุดคืออะไร? ปัจจัยบางประการที่เราอาจต้องคำนึงถึง (อาจมีมากกว่านี้): ขนาดของการเปลี่ยนแปลงรหัส - การเปลี่ยนแปลงครั้งใหญ่หมายถึงการเปลี่ยนแปลงเพิ่มเติมจะเกิดขึ้นจากการตรวจสอบรหัส หากการเปลี่ยนแปลงเหล่านี้มีขนาดใหญ่กว่าถ้าเป็น UT ก่อนการตรวจสอบโค้ดคุณจะต้องทำซ้ำ UT ส่วนใหญ่อีกครั้ง เวลาที่ใช้ในการทดสอบหน่วย มันเป็นฟังก์ชั่นใหม่หรือการแก้ไขข้อบกพร่อง

4
STDOUT และสิ่งเจือปน
ฉันได้อ่านหนังสือและบทความจำนวนมากเกี่ยวกับการเขียนโปรแกรมการทำงานและยังคงรู้สึกละอายใจที่ไม่สามารถเข้าใจแนวคิดพื้นฐานบางอย่างได้อย่างแน่นอน หนึ่งในแนวคิดหลักของการเขียนโปรแกรมฟังก์ชั่นคืออินพุตเดียวกันควรสร้างเอาต์พุตเดียวกัน ดังนั้นการสอบถามฐานข้อมูลหรือการเขียนไฟล์จึงไม่สามารถทำได้ในลักษณะการทำงานที่บริสุทธิ์ตามคำจำกัดความ ตัวอย่างเช่นนั่นเป็นหนึ่งในเหตุผลที่เราต้องการพระ คำถามคือ - ทำไมเราถึงถือว่า STDOUT เป็นสิ่งที่ไม่บริสุทธิ์? ใช่ filehandler มีความเสี่ยง - เราไม่สามารถมั่นใจได้ว่าข้อมูลจะถูกเขียนเสมอ แต่แล้ว STDOUT ล่ะ? ทำไมเราควรคิดว่ามันเป็นสิ่งที่ไม่น่าเชื่อถือ? การประเมินตนเองนั้นไม่น่าเชื่อถือมากขึ้นหรือไม่ ฉันหมายความว่าเราสามารถดึงทริกเกอร์ได้เสมอดังนั้นการคำนวณแบบขัดจังหวะ

14
คุณรักษาทุกภาษาเหล่านั้นไว้ในหัวของคุณได้อย่างไร
ฉันรู้ Java, C #, C ++ ฉันใช้ Perl แล้วและกำลังเก็บ Python และ Actionscript 3 นี่เป็นเส้นทางที่คนอื่นเคยเหยียบย่ำดังนั้นฉันจึงถามว่าคุณรักษาภาษาทั้งหมดเหล่านี้ไว้ในหัวของคุณได้อย่างไร

4
อะไรทำให้ทรัพยากร“ แพง”?
ฉันกำลังอ่านจำศีลและฉันพบข้อความเช่น "การเชื่อมต่อ JDBC ที่เปิดในหลาย ๆ คำขอไม่ใช่สิ่งที่ดีเพราะเป็นทรัพยากรที่มีราคาแพง" ทรัพยากรราคาแพงหมายถึงอะไร? แก้ไข: ฉันกำลังเพิ่มสิ่งที่ผู้ใช้ที่ไม่รู้จักได้เพิ่มไว้เป็นความคิดเห็นด้านล่าง หากการสร้างการเชื่อมต่อฐานข้อมูลมีราคาแพงแล้วทำไมไม่ใช้สิ่งเดียวกันซ้ำแล้วซ้ำอีก (ไม่ใช่แคช) แทนที่จะปิดและเปิดทุกครั้ง?

4
วิธีการพัฒนาซอฟต์แวร์ใดที่สามารถถูกมองว่าเป็นรากฐาน
ฉันกำลังเขียนบทความวิจัยขนาดเล็กที่เกี่ยวข้องกับวิธีการพัฒนาซอฟต์แวร์ ฉันกำลังมองหาวิธีการทั้งหมดที่มีอยู่และฉันสงสัยว่าจากวิธีการทั้งหมดมีผู้ใดบ้างที่ให้รากฐานสำหรับผู้อื่น ตัวอย่างเช่นดูที่วิธีการต่อไปนี้: Agile, Prototyping, Cleanroom, Iterative, RAD, RUP, Spiral, Waterfall, XP, Lean, Scrum, V-Model, TDD เราสามารถพูดได้ ไหมว่า: การทำต้นแบบการทำซ้ำการวนและน้ำตกเป็น "รากฐาน" สำหรับผู้อื่นหรือไม่? หรือไม่มีสิ่งเช่น "รากฐาน" และแต่ละวิธีการมีประวัติที่เป็นเอกลักษณ์ของตัวเองหรือไม่? ฉันอยากจะอธิบายวิธีการทั้งหมดในรายงานการวิจัยของฉัน แต่ฉันไม่มีเวลาทำเช่นนั้นและนั่นคือเหตุผลที่ฉันอยากจะรู้ว่าวิธีการใดที่สามารถเป็นตัวแทน

1
ชื่อของเทคนิคสำหรับอาร์กิวเมนต์ประเภทอนุมานของพารามิเตอร์ชนิดหรือไม่
ตั้งค่า:สมมติว่าเรามีประเภทที่เรียกว่าIteratorซึ่งมีพารามิเตอร์ประเภทElement: interface Iterator<Element> {} แล้วเรามีอินเตอร์เฟซที่มีวิธีการหนึ่งที่จะกลับIterableIterator // T has an upper bound of Iterator interface Iterable<T: Iterator> { getIterator(): T } ปัญหาของIteratorการเป็นแบบทั่วไปคือเราต้องระบุอาร์กิวเมนต์ประเภท แนวคิดหนึ่งในการแก้ไขปัญหานี้คือ "อนุมาน" ประเภทของตัววนซ้ำ หลอกรหัสต่อไปนี้เป็นการแสดงออกถึงความคิดที่ว่ามีตัวแปรประเภทElementซึ่งอนุมานว่าจะเป็นอาร์กิวเมนต์ประเภทไปที่Iterator: interface <Element> Iterable<T: Iterator<Element>> { getIterator(): T } จากนั้นเราก็ใช้มันในที่นี้: class Vec<Element> implements Iterable<VecIterator<Element>> {/*...*/} คำจำกัดความของคำIterableว่าไม่ใช้Elementที่อื่นในคำจำกัดความของมัน แต่กรณีใช้งานจริงของฉัน ฟังก์ชั่นบางอย่างที่ใช้Iterableยังจำเป็นต้องสามารถ จำกัด พารามิเตอร์ของตนเพื่อยอมรับIterables ซึ่งคืนค่าตัววนซ้ำบางชนิดเช่นตัววนซ้ำสองทิศทาง คำถาม: มีชื่อที่กำหนดขึ้นสำหรับตัวแปรประเภทอนุมานเหล่านี้หรือไม่ เทคนิคโดยรวมเป็นอย่างไร การไม่รู้ระบบการตั้งชื่อเฉพาะทำให้การค้นหาตัวอย่างของสิ่งนี้เป็นเรื่องยากหรือเรียนรู้เกี่ยวกับคุณลักษณะเฉพาะทางภาษา ไม่ใช่ทุกภาษาที่มีชื่อสามัญมีเทคนิคนี้ …

4
มีสิ่งอำนวยความสะดวกด้านภาษาของเครื่องกำเนิดไฟฟ้าเช่น `yield 'เป็นความคิดที่ดีหรือไม่?
PHP, C #, Python และภาษาอื่น ๆ สองสามภาษามีyieldคำสำคัญที่ใช้ในการสร้างฟังก์ชั่นเครื่องกำเนิดไฟฟ้า ใน PHP: http://php.net/manual/en/language.generators.syntax.php ใน Python: https://www.pythoncentral.io/python-generators-and-yield-keyword/ ใน C #: https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/yield ฉันกังวลว่าในฐานะคุณสมบัติทางภาษา / สิ่งอำนวยความสะดวกyieldแบ่งการประชุมบางส่วน หนึ่งในนั้นคือสิ่งที่ฉันจะอ้างถึงคือ "ความแน่นอน" มันเป็นวิธีการที่ส่งกลับผลลัพธ์ที่แตกต่างกันทุกครั้งที่คุณเรียกมัน ด้วยฟังก์ชั่นที่ไม่ใช่เครื่องกำเนิดไฟฟ้าปกติคุณสามารถเรียกมันได้และถ้ามันได้รับอินพุตเดียวกันมันก็จะส่งคืนเอาต์พุตเดียวกัน ด้วยผลผลิตจะส่งคืนเอาต์พุตที่ต่างกันตามสถานะภายใน ดังนั้นหากคุณสุ่มเรียกใช้ฟังก์ชันการสร้างโดยไม่ทราบสถานะก่อนหน้าคุณจะไม่สามารถคาดหวังว่าจะให้ผลลัพธ์ที่แน่นอน ฟังก์ชั่นเช่นนี้เหมาะสมกับกระบวนทัศน์ทางภาษาอย่างไร จริง ๆ แล้วมันเป็นการทำลายอนุสัญญาใด ๆ เป็นความคิดที่ดีที่จะมีและใช้คุณสมบัตินี้หรือไม่? (เพื่อเป็นตัวอย่างของสิ่งที่ดีและสิ่งที่ไม่ดีgotoเคยเป็นคุณสมบัติของหลายภาษาและยังคงเป็น แต่มันก็ถือว่าเป็นอันตรายและถูกกำจัดให้หมดไปจากบางภาษาเช่น Java) คอมไพเลอร์ภาษาโปรแกรม / ล่ามต้องแยกออกจากอนุสัญญาใด ๆ ที่จะใช้คุณลักษณะดังกล่าวตัวอย่างเช่นภาษาต้องใช้หลายเธรดสำหรับคุณลักษณะนี้ในการทำงานหรือสามารถทำได้โดยไม่ต้องเทคโนโลยีเกลียว?

3
การเขียนโปรแกรมการทำงานคืออะไรคำตอบให้กับค่าคงที่ประเภทตาม?
ฉันรู้ว่าแนวคิดของค่าคงที่มีอยู่ในกระบวนทัศน์การเขียนโปรแกรมหลายรายการ ตัวอย่างเช่นค่าคงที่ลูปมีความเกี่ยวข้องใน OO การเขียนโปรแกรมเชิงฟังก์ชันและโพรซีเดอร์ อย่างไรก็ตามชนิดหนึ่งที่มีประโยชน์มากที่พบใน OOP คือค่าคงที่ของข้อมูลประเภทใดประเภทหนึ่ง นี่คือสิ่งที่ฉันเรียกว่า "ค่าคงที่ประเภทตาม" ในชื่อ ตัวอย่างเช่นFractionประเภทอาจมีnumeratorและdenominatorด้วยค่าคงที่ gcd ของพวกเขาเสมอ 1 (เช่นเศษส่วนอยู่ในรูปแบบลดลง) ฉันสามารถรับประกันได้เพียงแค่มีการห่อหุ้มบางประเภทไม่ให้ข้อมูลถูกตั้งค่าอย่างอิสระ ในทางกลับกันฉันไม่ต้องตรวจสอบว่ามันลดลงหรือไม่ดังนั้นฉันจึงสามารถลดความซับซ้อนของอัลกอริทึมเช่นการตรวจสอบความเท่าเทียมกันได้ ในทางตรงกันข้ามถ้าฉันเพียงแค่ประกาศFractionประเภทโดยไม่ให้การรับประกันนี้ผ่านการห่อหุ้มฉันไม่สามารถเขียนฟังก์ชันใด ๆ ในประเภทนี้ได้อย่างปลอดภัยซึ่งคิดว่าเศษส่วนจะลดลงเพราะในอนาคตคนอื่นอาจเข้ามาและเพิ่มวิธี จากการได้รับเศษส่วนที่ไม่ลดลง โดยทั่วไปการขาดค่าคงที่ประเภทนี้อาจนำไปสู่: อัลกอริทึมที่ซับซ้อนมากขึ้นเนื่องจากต้องมีการตรวจสอบ / รับประกันล่วงหน้าในหลาย ๆ สถานที่ การละเมิด DRY เนื่องจากเงื่อนไขล่วงหน้าซ้ำ ๆ เหล่านี้แสดงถึงความรู้พื้นฐานที่เหมือนกัน (ที่ค่าคงที่ควรเป็นจริง) มีการบังคับใช้เงื่อนไขล่วงหน้าผ่านความล้มเหลวรันไทม์มากกว่าการรวบรวมเวลารับประกัน ดังนั้นคำถามของฉันคือสิ่งที่การเขียนโปรแกรมการทำงานตอบสนองค่าคงที่ประเภทนี้ มีวิธีการทำงานที่เป็นไปตามสำนึกของการบรรลุสิ่งเดียวกันมากขึ้นหรือน้อยลง? หรือมีลักษณะบางอย่างของการเขียนโปรแกรมฟังก์ชั่นซึ่งทำให้ประโยชน์ที่เกี่ยวข้องน้อยลง?

3
ใช้ PUT โดยมีผลกระทบด้านข้างที่ยอมรับได้ (REST)
ฉันต้องการสร้างประวัติการเลิกทำเมื่อใดก็ตามที่ผู้ใช้อัปเดตฟอร์ม เนื่องจากเป็นการอัปเดตฉันต้องการใช้คำขอ PUT แต่ผมอ่านที่ความต้องการนำไปไม่มีผลข้างเคียง เป็นที่ยอมรับหรือไม่ที่จะใช้ PUT ที่นี่ มีทางเลือกที่ดีกว่านี้ไหม? PUT /person/F02E395A235 { time: 1234567, fields: { name: 'John', age: '41' } } ในเซิร์ฟเวอร์ doPut('person/:personId', // create a new person snapshot ) แก้ไข: ผู้ใช้จะสามารถเห็นประวัติได้การเรียกหลายครั้งจะทำให้หลายเวอร์ชัน วิธีแก้ไขคือการตรวจสอบว่าเป็นรุ่นที่ไม่ซ้ำกันก่อนที่จะสร้างมัน

3
จะโหลดและจัดเก็บการตั้งค่าจากไฟล์ได้ที่ไหน
ฉันคิดว่าคำถามนี้ควรใช้กับโปรแกรมส่วนใหญ่ที่โหลดการตั้งค่าจากไฟล์ คำถามของฉันมาจากมุมมองการเขียนโปรแกรมและเป็นวิธีจัดการกับการโหลดการตั้งค่าจากไฟล์ในแง่ของคลาสและการเข้าถึงที่แตกต่างกัน ตัวอย่างเช่น หากโปรแกรมมีsettings.iniไฟล์อย่างง่ายเนื้อหาของมันควรจะโหลดในload()วิธีการเรียนหรือบางทีนวกรรมิก? ควรเก็บค่าไว้ในpublic staticตัวแปรหรือควรมีstaticวิธีรับและตั้งค่าคุณสมบัติหรือไม่ จะเกิดอะไรขึ้นหากไฟล์ไม่มีอยู่หรืออ่านไม่ได้? คุณจะให้โปรแกรมที่เหลือรู้ว่าไม่สามารถรับคุณสมบัติเหล่านั้นได้อย่างไร เป็นต้น ฉันหวังว่าฉันจะขอสิ่งนี้ในสถานที่ที่เหมาะสมที่นี่ ฉันต้องการตั้งคำถามให้เป็นผู้ไม่เชื่อเรื่องภาษามากที่สุด แต่ฉันมุ่งเน้นที่ภาษาที่มีสิ่งต่าง ๆ เช่นมรดกโดยเฉพาะ Java และ C # .NET

6
หากแบบจำลองนี้ตรวจสอบความถูกต้องของข้อมูลมันไม่ควรโยนข้อยกเว้นเกี่ยวกับอินพุตที่ไม่ดี?
การอ่านคำถาม SOนี้ดูเหมือนว่าการโยนข้อยกเว้นสำหรับการตรวจสอบความถูกต้องของข้อมูลเข้าของผู้ใช้ แต่ใครควรตรวจสอบข้อมูลนี้ ในแอปพลิเคชันของฉันการตรวจสอบความถูกต้องทั้งหมดจะทำในชั้นธุรกิจเนื่องจากมีเพียงคลาสเท่านั้นที่ทราบถึงค่าที่ถูกต้องสำหรับคุณสมบัติแต่ละรายการ ถ้าฉันจะคัดลอกกฎสำหรับการตรวจสอบคุณสมบัติไปยังตัวควบคุมมันเป็นไปได้ที่การเปลี่ยนแปลงกฎการตรวจสอบและตอนนี้มีสองสถานที่ที่ควรทำการปรับเปลี่ยน หลักฐานของฉันที่การตรวจสอบควรทำในชั้นธุรกิจผิดหรือเปล่า? สิ่งที่ฉันทำ ดังนั้นรหัสของฉันมักจะจบลงเช่นนี้ <?php class Person { private $name; private $age; public function setName($n) { $n = trim($n); if (mb_strlen($n) == 0) { throw new ValidationException("Name cannot be empty"); } $this->name = $n; } public function setAge($a) { if (!is_int($a)) { if (!ctype_digit(trim($a))) { throw …

9
ทำไม (ตำแหน่ง <ขนาด) รูปแบบที่แพร่หลายเช่นนี้ในเงื่อนไข
ในคำสั่งเงื่อนไข (IF) ทุกคนใช้(position &lt; size)แต่ทำไม? การประชุมเท่านั้นหรือมีเหตุผลที่ดีสำหรับสิ่งนั้น? พบในป่า: if (pos &lt; array.length) { // do some with array[pos]; } ไม่ค่อยพบ: if (array.length &gt; pos) { // do some with array[pos]; }

2
ข้อดีและข้อเสียของการสื่อสารระหว่างกระบวนการทำผ่านซ็อกเก็ตและหน่วยความจำที่ใช้ร่วมกันคืออะไร
ฉันเข้าใจว่าสองตัวเลือกอื่น ๆ อีกมากมายสำหรับการสื่อสารระหว่างกระบวนการสามารถ: แชร์หน่วยความจำ ซ็อกเก็ต จริงๆแล้วฉันเห็นตัวเลือกทั้งสองนี้ถูกเปิดเผยโดย Intellij Idea สำหรับการดีบักแอปพลิเคชัน Java ฉันต้องการทราบว่าข้อดีและข้อเสียของแต่ละวิธีคืออะไร

4
ใช้“ ข้อยกเว้นที่จับได้” เพื่อปรับปรุงความสามารถในการอ่านดีหรือไม่ดี?
ในส่วนเวลาที่จะใช้ข้อยกเว้นในThe Pragmatic Programmerหนังสือเขียนว่า: retcode = OK; if (socket.read(name) != OK) { retcode = BAD_READ; } else { processName(name); if (socket.read(address) != OK) { retcode = BAD_READ; } else { processAddress(address); if (socket.read(telNo) != OK) { retcode = BAD_READ; } else { // etc, etc... } } } return retcode; พวกเขาชอบ: …

3
เมื่อคิดถึงวันที่และเวลา - เที่ยงคืนของวันนี้ในอดีตหรืออนาคต
นี่เป็นปริศนาสำหรับฉันเสมอและฉันตระหนักดีว่าไม่ใช่ปัญหาในการเขียนโปรแกรมหรือการพัฒนาซอฟต์แวร์ แต่ก็ดูเหมือนจะเป็นเรื่องธรรมดาที่สมเหตุสมผลในสาขาของเรา ตัวอย่างเช่นหากฉันต้องตั้งค่าวันหมดอายุเป็น 2011-04-08 00:00:00 - และเวลาท้องถิ่นปัจจุบันของฉันคือ 10:45 ในวันที่ 8 - ฉันหมดอายุไปแล้วหรือยัง หรือฉันยังเหลือครึ่งวันหรือมากกว่านั้น? มีมาตรฐานสากลที่จุดสิ้นสุดของเที่ยงคืนของวันหรือไม่ หรือฉันควรจะออกจากกองทัพอังกฤษและบอกว่าวันนั้นจะสิ้นสุดในเวลา 23:59:59 น. และเริ่มเวลา 00:00:01 และไม่มีเที่ยงคืน?

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