คำถามติดแท็ก code-quality

คำถามสำหรับแนวทางปฏิบัติที่ดีที่สุดสำหรับการเขียนโค้ดคุณภาพสูง

13
เราควรหลีกเลี่ยงคุณสมบัติภาษาที่ C ++ มี แต่ Java ไม่ได้หรือไม่
สมมติว่าฉันถูก จำกัด ให้ใช้ C ++ โดยสภาพแวดล้อมในโครงการ เป็นการดีหรือไม่ที่จะป้องกันการใช้คุณสมบัติภาษาบางอย่างที่ C ++ มี แต่ Java ไม่ได้มี (เช่น: การสืบทอดหลายตัว ฉันคิดว่าเหตุผลคือ: เนื่องจาก Java เป็นรุ่นใหม่กว่า C ++ หาก Java ไม่มีคุณสมบัติที่ C ++ มีหมายความว่าคุณลักษณะนั้นไม่ดีดังนั้นเราจึงควรหลีกเลี่ยงการใช้งาน รหัส C ++ พร้อมคุณสมบัติเฉพาะ C ++ (เช่น: ฟังก์ชั่นเพื่อนหลายมรดก) สามารถดูแลรักษาหรือตรวจสอบโดยโปรแกรมเมอร์ C ++ เท่านั้น แต่ถ้าเราเขียน C ++ เช่น Java (โดยไม่มีคุณสมบัติเฉพาะภาษา C ++) โค้ดนั้นสามารถรักษาหรือตรวจสอบได้โดยทั้งสอง โปรแกรมเมอร์ C …
110 java  c++  code-quality 

14
ช่วงเวลาสั้น ๆ ที่ไม่ได้เป็นคุณธรรมอีกต่อไปคืออะไร?
การแก้ไขข้อผิดพลาดเมื่อเร็ว ๆ นี้ทำให้ฉันต้องใช้รหัสที่เขียนโดยสมาชิกในทีมคนอื่นซึ่งฉันพบสิ่งนี้ (เป็น C #) return (decimal)CostIn > 0 && CostOut > 0 ? (((decimal)CostOut - (decimal)CostIn) / (decimal)CostOut) * 100 : 0; ตอนนี้การอนุญาตให้มีเหตุผลที่ดีสำหรับการปลดเปลื้องเหล่านี้ยังคงเป็นเรื่องยากมากที่จะติดตาม มีข้อบกพร่องเล็กน้อยในการคำนวณและฉันต้องแก้ให้หายยุ่งเพื่อแก้ไขปัญหา ฉันรู้ว่ารูปแบบการเขียนโค้ดของบุคคลนี้จากการตรวจสอบโค้ดและวิธีการของเขาก็คือสั้นกว่านั้นเกือบจะดีกว่าเสมอ และแน่นอนว่ามันมีคุณค่าอยู่ที่นั่น: เราทุกคนได้เห็นกลุ่มของตรรกะที่มีเงื่อนไขที่ซับซ้อนโดยไม่จำเป็น แต่เขาเก่งกว่าฉันมากในตอนต่อไปของเครือข่ายผู้ประกอบการที่อัดแน่นไปด้วยคำพูดเดียว แน่นอนว่านี่เป็นเรื่องของสไตล์ แต่มีอะไรที่เขียนหรือค้นคว้าเกี่ยวกับการตระหนักถึงจุดที่ความพยายามในการกระชับรหัสหยุดที่มีประโยชน์และกลายเป็นอุปสรรคต่อความเข้าใจ? สาเหตุของการปลดเปลื้องคือ Entity Framework db จำเป็นต้องเก็บสิ่งเหล่านี้เป็นชนิดที่ไม่สามารถใช้ได้ ทศนิยม? ไม่เทียบเท่ากับทศนิยมใน C # และจำเป็นต้องร่าย

30
ตำนานไร้สาระที่สุดเกี่ยวกับปัญหาการเขียนโปรแกรมคืออะไร?
หากต้องการนำไปใช้อีกทางหนึ่ง ... อะไรคือความเข้าใจผิดที่เกิดขึ้นบ่อยที่สุดและน่าผิดหวังเกี่ยวกับการเขียนโปรแกรม ท่านใดที่ตำนานอย่างกว้างขวางและยาวนาน / ความเข้าใจผิดหายากสำหรับโปรแกรมเมอร์ที่จะปัดเป่า / ที่ถูกต้อง กรุณาอธิบายว่าทำไมนี่เป็นตำนาน

30
สิ่งใดที่กริ่งสัญญาณเตือนทันทีเมื่อดูรหัส? [ปิด]
ฉันเข้าร่วมงานฝีมือซอฟแวร์เมื่อสองสามสัปดาห์ที่แล้วและหนึ่งในความคิดเห็นที่ทำคือ "ฉันแน่ใจว่าเราทุกคนจำรหัสไม่ดีเมื่อเราเห็นมัน" และทุกคนพยักหน้าอย่างสุภาพโดยไม่มีการอภิปรายเพิ่มเติม เรื่องแบบนี้มักจะทำให้ฉันเป็นกังวลเพราะมีความจริงอยู่ที่ทุกคนคิดว่าพวกเขาเป็นคนขับที่สูงกว่าค่าเฉลี่ย แม้ว่าฉันคิดว่าฉันสามารถรับรู้รหัสที่ไม่ดีฉันชอบที่จะเรียนรู้เพิ่มเติมเกี่ยวกับสิ่งที่คนอื่นคิดว่าเป็นกลิ่นรหัสเนื่องจากไม่ค่อยมีการพูดถึงรายละเอียดในบล็อกของผู้คนและในหนังสือเพียงไม่กี่เล่มเท่านั้น โดยเฉพาะอย่างยิ่งฉันคิดว่ามันน่าสนใจที่จะได้ยินเกี่ยวกับสิ่งต่าง ๆ ที่มีกลิ่นรหัสในภาษาหนึ่ง แต่ไม่ใช่อีกภาษาหนึ่ง ฉันจะเริ่มต้นด้วยสิ่งที่ง่าย: โค้ดในการควบคุมซอร์สที่มีโค้ดที่ใส่ความคิดเห็นสูง - ทำไมถึงมี หมายความว่าถูกลบไหม เป็นงานที่เสร็จแล้วครึ่งหนึ่งหรือไม่ บางทีมันไม่ควรถูกคอมเม้นท์และทำเมื่อมีคนทดสอบอะไรบางอย่างเท่านั้น? โดยส่วนตัวแล้วฉันพบว่าสิ่งนี้น่ารำคาญจริง ๆ แม้ว่ามันจะเป็นแค่เส้นคี่ที่นี่และที่นั่น แต่เมื่อคุณเห็นบล็อกขนาดใหญ่สลับกับส่วนที่เหลือของรหัสมันไม่สามารถยอมรับได้โดยสิ้นเชิง นอกจากนี้ยังเป็นตัวบ่งชี้ว่าส่วนที่เหลือของรหัสน่าจะมีคุณภาพที่น่าสงสัยเช่นกัน

13
วิธีจัดการกับโค้ด 'เกือบจะดี' จากนักพัฒนารุ่นเยาว์ [ปิด]
ฉันมีคำถามเกี่ยวกับการจัดการทีม ตอนนี้ฉันกำลังติดต่อกับนักพัฒนารุ่นน้องที่ทำงานจากระยะไกลจากโรงงานเข้ารหัส ผู้ชายคนนี้เปิดรับการวิจารณ์และยินดีที่จะเรียนรู้ แต่ฉันมีข้อสงสัยว่าฉันควรผลักดันบางสิ่ง ตอนนี้เมื่อมีบางสิ่งที่ตรงและชัดเจนว่าเป็นการละเมิดแนวปฏิบัติที่ดี: เช่นการละเมิด SRP วัตถุพระเจ้าชื่อที่ไม่มีความหมายสำหรับวิธีการหรือตัวแปร ฉันชี้ให้เห็นสิ่งที่เขาต้องแก้ไขและพยายามอธิบายว่าทำไมมันผิด คำถามของฉันคือ: ฉันจะหยุดเมื่อไหร่ ตอนนี้ถ้ามีการละเมิดเล็กน้อยของรูปแบบการเข้ารหัสเช่นชื่อตัวแปรในภาษาที่ไม่ถูกต้อง (ทีมก่อนหน้าผสมสเปนและอังกฤษและฉันกำลังพยายามแก้ไขปัญหานั้น) หรือปัญหาโครงสร้างเล็กน้อยที่ฉันปล่อยและแก้ไขถ้า ฉันมีเวลาว่างหรือต้องการแก้ไขคลาสที่มีปัญหา ฉันรู้สึกว่านี่เป็นสิ่งที่ดีสำหรับขวัญกำลังใจของทีมดังนั้นฉันจึงไม่กดรหัสกลับไปเรื่อย ๆ เกี่ยวกับสิ่งที่มือใหม่อาจดูเหมือนรายละเอียดเล็กน้อยซึ่งค่อนข้างน่าหงุดหงิด แต่ฉันก็กังวลว่าการที่ 'อ่อน' เกินไปอาจป้องกันผู้ชาย จากการเรียนรู้วิธีทำบางสิ่ง ฉันจะรักษาความสมดุลระหว่างการสอนผู้ชายกับไม่วิจารณ์เขาอย่างต่อเนื่องได้อย่างไร? สำหรับรุ่นน้องมันน่าหงุดหงิดถ้าคุณบอกให้เขาทำซ้ำสิ่งที่ตาของเขากำลังทำงานอยู่

11
ทำไมหลัก () ควรสั้น
ฉันได้เขียนโปรแกรมมานานกว่า 9 ปีและตามคำแนะนำของครูผู้สอนโปรแกรมคนแรกของฉันฉันมักจะทำให้main()ฟังก์ชั่นของฉันสั้นมาก ตอนแรกฉันไม่รู้ว่าทำไม ฉันแค่เชื่อฟังโดยไม่เข้าใจมากนักเพื่อความสุขใจของอาจารย์ หลังจากได้รับประสบการณ์ฉันรู้ว่าถ้าฉันออกแบบรหัสของฉันอย่างถูกต้องมีmain()ฟังก์ชั่นสั้น ๆแค่เกิดขึ้น การเขียนโค้ดที่ทำให้เป็นโมดูลและทำตามหลักการความรับผิดชอบเดียวทำให้รหัสของฉันถูกออกแบบเป็น "ช่อ" และmain()ทำหน้าที่เป็นตัวเร่งปฏิกิริยาเพื่อให้โปรแกรมทำงาน กรอไปข้างหน้าเมื่อไม่กี่สัปดาห์ที่ผ่านมาฉันมองไปที่โค้ด souce ของ Python และฉันพบmain()ฟังก์ชัน: /* Minimal main program -- everything is loaded from the library */ ... int main(int argc, char **argv) { ... return Py_Main(argc, argv); } งูหลามเย็ด main()ฟังก์ชั่นสั้น== รหัสที่ดี ครูการเขียนโปรแกรมถูกต้อง อยากดูลึกกว่านี้ฉันลองดู Py_Main ครบถ้วนถูกกำหนดไว้ดังนี้: /* Main program */ …

20
การลดจำนวนบรรทัดในโค้ดมีความสำคัญอย่างไร
ฉันเป็นนักพัฒนาซอฟต์แวร์ที่ทำงานกับ J2SE (core java) บ่อยครั้งในระหว่างการตรวจสอบรหัสของเราเราถูกขอให้ลดจำนวนบรรทัดในรหัสของเรา มันไม่เกี่ยวกับการลบรหัสที่ซ้ำซ้อนมันเกี่ยวกับการติดตามสไตล์ที่เน้นการทำสิ่งเดียวกันโดยมีบรรทัดน้อยลงในรหัสในขณะที่ฉันเชื่อว่าการมีความชัดเจนในโค้ดแม้ว่ามันจะหมายถึงการเพิ่มจำนวนบรรทัด คุณคิดว่าเป็นวิธีที่ถูกต้องในการทำสิ่งต่าง ๆ ? หาก LOC (บรรทัดของรหัส) มีจำนวนน้อยจะมีผลกับรหัสอย่างไร หาก LOC เป็นจำนวนที่มากกว่าจะมีผลกับรหัสอย่างไร ตัวอย่างจากเว็บไซต์: "javaranch" - public static void happyBirthday(int age) { if ((age == 16) || (age == 21) || ((age > 21) && (((age % 10) == 0) || ((age % 25) == 0)))) { …

15
ทำไม DRY ถึงสำคัญ?
ค่อนข้างง่ายทำไมฉันจึงต้องการเขียนโค้ดที่ใช้กับทุกกรณีและข้อมูลที่ปรับขนาดได้เมื่อสิ่งที่ฉันต้องทำคือทำซ้ำกระบวนการเดียวกันสองสามครั้งด้วยการปรับแต่งเล็กน้อย ฉันไม่น่าจะต้องแก้ไขอีกในเร็ว ๆ นี้ ดูเหมือนว่าจะมีงานน้อยลงที่จะไป ... function doStuff1(){/*.a.*/} function doStuff2(){/*.b.*/} function doStuff3(){/*.c.*/} และถ้าฉันต้องการเพิ่มอะไรบางอย่าง ... function doStuff4(){/*.d.*/} และถ้าฉันต้องการลบฉันก็จะลบมัน เป็นการยากที่จะหาวิธีที่จะทำให้สิ่งเหล่านี้เป็นรูปแบบตรงไปข้างหน้าเดียวที่ฉันสามารถป้อนข้อมูลและจัดการกับทุกกรณีและทำการเปลี่ยนแปลงมากมายฉันไม่รู้สึกว่าฉันจะมี ทำ. ทำไมต้องเป็น DRY เมื่อดูเหมือนว่าการตัดแปะ + แบบเร็วจะทำงานได้น้อยลงมาก
81 code-quality  dry 

9
ไลบรารีโอเพ่นซอร์สขนาดใหญ่จะได้รับการดูแลรักษาอย่างไรในขณะที่มีรหัสห่างไกลจากวิธีปฏิบัติที่“ สะอาดโค้ด”
ฉันยังไม่มีประสบการณ์ในการเขียนรหัสคุณภาพสูงดังนั้นฉันจึงอ่านหนังสือเกี่ยวกับปัญหาเช่นClean Codeของ Robert C. Martin และตรวจสอบรหัสของห้องสมุดที่มีชื่อเสียงเพื่อพัฒนาทักษะของฉัน แม้ว่าไลบรารีโอเพนซอร์สจำนวนมากได้รับการดูแลรักษามานานหลายปีซึ่งหมายความว่ามันไม่น่าเป็นไปได้ที่พวกเขาจะไม่ได้อยู่ในเส้นทางที่ถูกต้อง แต่ฉันพบว่าโค้ดในหลาย ๆ โค้ดหลายร้อยบรรทัด ดังนั้นคำถามของฉันคือ: หลักการของโค้ดที่สะอาดเกินไปถูก จำกัด และเราสามารถทำได้โดยไม่ต้องใช้พวกมันในห้องสมุดหลาย ๆ ถ้าไม่เป็นเช่นนั้นห้องสมุดขนาดใหญ่จะได้รับการดูแลอย่างไรโดยไม่คำนึงถึงหลักการเหล่านี้มากมาย? ฉันขอขอบคุณที่ชี้แจงสั้น ๆ ฉันขอโทษถ้าคำถามดูเหมือนว่าโง่จากมือใหม่ แก้ไข ตรวจสอบตัวอย่างนี้ในห้องสมุดButterknife - หนึ่งในห้องสมุดที่มีชื่อเสียงที่สุดในชุมชน Android

6
หมายเลขมายากลทั้งหมดถูกสร้างขึ้นเหมือนกันหรือไม่?
ในโครงการที่ผ่านมาผมจำเป็นต้องมีการแปลงจากไบต์กิโลไบต์ กิบิไบต์ รหัสตรงไปตรงมามากพอ: var kBval = byteVal / 1024; หลังจากเขียนสิ่งนั้นฉันได้ฟังก์ชั่นที่เหลือและทำงานต่อไป แต่ต่อมาฉันเริ่มสงสัยว่าฉันเพิ่งฝังหมายเลขเวทย์มนตร์ไว้ในรหัสของฉันหรือไม่ ส่วนหนึ่งของฉันบอกว่ามันใช้ได้เพราะจำนวนนั้นเป็นค่าคงที่คงที่และควรเข้าใจได้ง่าย BYTES_PER_KBYTEแต่ส่วนหนึ่งของฉันอีกคิดว่ามันจะได้รับสุดชัดเจนว่าในห่อคงที่ที่กำหนดไว้เช่น ดังนั้นตัวเลขที่เป็นค่าคงที่ที่รู้จักกันดีจริง ๆ ทั้งหมดนั้นวิเศษหรือไม่? คำถามที่เกี่ยวข้อง: เมื่อไหร่ที่มีจำนวนเวทมนตร์? และทุกหมายเลขในรหัสถือเป็น "หมายเลขวิเศษ" หรือไม่? - คล้ายกัน แต่มีคำถามที่กว้างกว่าคำถามที่ฉันถาม คำถามของฉันมุ่งเน้นไปที่ตัวเลขคงที่ที่รู้จักกันดีซึ่งไม่ได้ระบุไว้ในคำถามเหล่านั้น กำจัดหมายเลขเวทย์มนตร์: เมื่อไหร่เวลาที่จะพูดว่า "ไม่" มีความเกี่ยวข้องเช่นกัน แต่มุ่งเน้นไปที่การปรับโครงสร้างใหม่เมื่อเทียบกับจำนวนที่คงที่หรือไม่นั้นเป็นจำนวนเวทย์มนตร์

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

10
ฉันถูกบังคับให้เขียนรหัสไม่ดี ฉันจะบันทึกใบหน้าของฉันได้อย่างไร [ปิด]
ฉันเป็นแค่นักพัฒนารุ่นเยาว์ แต่งานของฉันบังคับให้ฉันต้องทำงานกับโค้ด PHP ที่แย่มาก ๆ (ลองนึกถึงโค้ด PHP ที่แย่ที่สุดที่คุณเคยเห็นจากนั้นคิดโค้ดสองครั้งแย่) ฉันมักจะพยายามแก้ไขข้อบกพร่องและต่อสู้กับ codebase เพื่อเพิ่มคุณสมบัติใหม่ บางครั้งฉันได้รับคำสั่งให้ทำงานโดยเร็วซึ่งบ่อยครั้งไม่เกี่ยวข้องกับแฮ็กที่สกปรก ผลิตภัณฑ์นี้เคยเป็นโอเพ่นซอร์สมาก่อนและฉันกังวลว่ามันจะเป็นโอเพ่นซอร์สในอนาคต ฉันจะละอายใจถ้ามีคน (โดยเฉพาะผู้ที่มีโอกาสเป็นนายจ้าง) สามารถหาชื่อของฉันต่อจากการเปลี่ยนแปลงบางอย่างได้ ฉันจะทำอย่างไรเพื่อปกป้องชื่อที่ดีของฉัน ฉันไม่แน่ใจว่าสิ่งนี้เกี่ยวข้องหรือไม่ แต่ฉันจะเพิ่มว่าทั้งเจ้านายของฉันและเพื่อนร่วมงานของฉันต้องการยอมรับว่ารหัสนั้นไม่ดี แต่ฉันไม่แน่ใจว่าฉันสามารถตำหนิพวกเขาได้ - สำหรับพวกเขาหลายคนนี่เป็นของพวกเขา งานแรก

12
ป้องกันโค้ดที่ไม่สนับสนุนจากการรวบรวมหลังจากถึงกำหนดเวลา [ปิด]
ในทีมของฉันเราได้ทำความสะอาดสิ่งเก่า ๆ มากมายในโครงการเสาหินขนาดใหญ่ (ทั้งชั้นเรียนวิธีการและอื่น ๆ ) ในระหว่างการทำความสะอาดนั้นฉันสงสัยว่ามีคำอธิบายประกอบหรือห้องสมุดที่@Deprecatedชื่นชอบมากกว่าปกติ สิ่งนี้@FancyDeprecatedควรป้องกันไม่ให้บิลด์โปรเจ็กต์สำเร็จหากคุณไม่ได้ล้างโค้ดเก่าที่ไม่ได้ใช้หลังจากวันที่ระบุ ฉันค้นหาในอินเทอร์เน็ตและไม่พบสิ่งใดที่มีความสามารถตามที่อธิบายไว้ด้านล่าง: ควรเป็นคำอธิบายประกอบหรือสิ่งที่คล้ายกันเพื่อวางในรหัสที่คุณต้องการลบก่อนวันที่ระบุ ก่อนวันที่รหัสจะรวบรวมและทุกอย่างจะทำงานได้ตามปกติ หลังจากวันที่รหัสจะไม่รวบรวมและจะให้ข้อความเตือนคุณเกี่ยวกับปัญหา ฉันคิดว่าฉันกำลังค้นหายูนิคอร์น ... มีเทคโนโลยีที่คล้ายคลึงกันสำหรับภาษาโปรแกรมใด ๆ หรือไม่? ในขณะที่แผน BI กำลังคิดถึงความเป็นไปได้ในการสร้างเวทย์มนตร์ด้วยการทดสอบหน่วยบางอย่างของรหัสที่ตั้งใจจะเอาออกซึ่งเริ่มล้มเหลวใน "วันครบกำหนด" คุณคิดอย่างไรเกี่ยวกับเรื่องนี้? มีความคิดที่ดีกว่านี้ไหม?

11
ฉันจะคำนวณปริมาณหนี้ทางเทคนิคที่มีอยู่ในโครงการได้อย่างไร
ไม่มีใครรู้ว่ามีเครื่องมือบางอย่างที่จะใส่ตัวเลขในหนี้ทางเทคนิคของฐานรหัสเป็นรหัสตัวชี้วัดหรือไม่? ถ้าไม่เป็นเช่นนั้นมีใครรู้ถึงอัลกอริทึมหรือชุดของฮิวริสติกหรือไม่? หากไม่มีสิ่งเหล่านี้มาก่อนฉันจะสนใจความคิดเกี่ยวกับวิธีเริ่มต้นกับสิ่งนั้น นั่นคือฉันจะหาจำนวนหนี้ทางเทคนิคที่เกิดขึ้นโดยวิธีการคลาสเนมสเปซแอสเซมบลี ฯลฯ ได้อย่างไร ฉันสนใจที่จะวิเคราะห์และประเมินโค้ด C # มากที่สุด แต่โปรดอย่าลังเลที่จะพูดภาษาอื่นเช่นกัน

16
เรามีความรับผิดชอบในการปรับปรุงรหัสเก่าหรือไม่?
ฉันกำลังดูรหัสเก่าที่ฉันเขียน มันใช้งานได้ แต่มันก็ไม่ได้รหัสที่ดี ตอนนี้ฉันรู้มากกว่าที่ฉันทำในเวลานั้นดังนั้นฉันจึงสามารถปรับปรุงได้ มันไม่ใช่โครงการปัจจุบัน แต่มันเป็นปัจจุบัน, ทำงานได้, รหัสการผลิต เรามีความรับผิดชอบในการย้อนกลับและปรับปรุงรหัสที่เราเคยเขียนในอดีตหรือเป็นทัศนคติที่ถูกต้อง "ถ้ามันไม่พังไม่แก้ไขไม่ได้"? บริษัท ของฉันสนับสนุนชั้นเรียนทบทวนรหัสเมื่อไม่กี่ปีที่ผ่านมาและหนึ่งในประเด็นสำคัญคือบางครั้งมันก็ดีพอ เดินหน้า. ดังนั้นในบางจุดคุณควรเรียกมันว่าดีพอและเดินหน้าต่อไปหรือคุณควรจะพยายามผลักดันโครงการเพื่อปรับปรุงรหัสเก่าเมื่อคุณคิดว่ามันจะดีขึ้นหรือไม่

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