ภาษาโปรแกรมโดยการออกแบบสามารถบังคับใช้“ รหัสสะอาด” ได้หรือไม่? [ปิด]


19

ดังนั้นฉันจึงเขียนโค้ดโปรเจคแรกของฉันใน C ++ และดูเหมือนว่าจะใช้ความพยายามมากขึ้นในการทำให้โค้ด "สะอาด" แทนที่จะทำงานเพียงอย่างเดียว นั่นคือดูเหมือนว่า C ++ "อนุญาต" เพื่อเขียนน่าเกลียด แต่รหัสการทำงาน

ซึ่งทำให้ฉันคิด

ภาษาการเขียนโปรแกรมสามารถบังคับใช้โค้ดแบบคลีนได้ด้วยการออกแบบหรือไม่? มีภาษาดังกล่าวอยู่แล้วหรือไม่?

นอกจากนี้วิธีการนี้รวมเป็นหลักการออกแบบในการพัฒนาโปรแกรม / ทฤษฎีภาษา? มาตรการแบบไหนที่ใช้?


14
หลายภาษาได้ลองแล้ว ไม่มีใครประสบความสำเร็จในความคิดของฉันจากระยะไกล
Gort the Robot

5
น่าเสียดายที่นี่เป็นฐานความคิดเห็นทั้งหมดเนื่องจากไม่มีคำจำกัดความที่มีวัตถุประสงค์ของ "รหัสที่สะอาด" รู้สึกอิสระที่จะพูดคุยในห้องสนทนาของเราแม้ว่าฉันแน่ใจว่าทุกคนในนั้นจะมีความคิดเห็นที่จะแบ่งปัน
Ixrec

9
ไม่คุณสามารถเขียน FORTRAN ในภาษาใดก็ได้
whatsisname

4
คุณกำลังถามว่ามันเป็นไปได้ที่จะพิสูจน์ภาษางี่เง่า พวกเขากล่าวว่าโง่ที่มีความคิดสร้างสรรค์
Gort the Robot

2
"รหัสสะอาด" มีคุณลักษณะใดสำหรับวัตถุประสงค์ของคำถามนี้ คุณจำเป็นต้องกำหนดว่ามิฉะนั้นคำตอบใด ๆ ที่มีเหตุผลสามารถใช้ได้
Theodoros Chatzigiannakis

คำตอบ:


20

ผลกระทบหลักที่การออกแบบภาษามีต่อ "รหัสสะอาด" อยู่ในระดับประโยค ภาษาที่มีการจดชวเลขและตัวดำเนินการที่ไม่ชัดเจน (Perl / APL) ให้ยืมตัวเองเป็นรหัส "สกปรก" ในขณะที่ภาษาที่มีองค์ประกอบที่มีขนาดเล็กลง (เช่น Python) ให้ยืมเพื่อทำความสะอาดรหัส

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

ในตอนท้ายของวันความหมายมีความสำคัญมากกว่าไวยากรณ์ นอกจากนี้ยังเป็นส่วนที่ยากที่สุดในการคิดว่าเป็นนักพัฒนาการบำรุงรักษา (เช่น "รหัสนี้หมายความว่าอะไรจริง ๆ ฉันเห็นสิ่งที่มันทำ ... ")

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


2
ฉันจะบอกว่าระบบประเภทสามารถไปต่อการบังคับความหมายที่ถูกต้อง ตัวอย่างเช่นภาษาที่พิมพ์อย่างยิ่งให้แน่ใจว่าตัวแปรได้รับการกำหนดค่าของประเภทที่เกี่ยวข้อง ภาษาที่ทำให้ราคาถูกและง่ายส่งเสริมการเข้ารหัสความหมายเพิ่มเติมในประเภท ภาษาที่พิมพ์ออกมาอย่างแรงทำให้โปรแกรมเมอร์แสดงเจตนาเกี่ยวกับการแปลงชนิด ภาษาที่ปิดบังความหมายด้วยสำเร็จรูปก็ทำให้ยากที่จะให้เหตุผลเกี่ยวกับความหมาย ตอนนี้ความหมายของ "สะอาด" คืออะไรมันไม่ชัดเจน แต่ฉันคิดว่ามันมีการทับซ้อนอย่างมีนัยสำคัญกับความหมายที่ถูกต้อง
Reinstate Monica

7

ภาษาสามารถบังคับหรือสนับสนุนให้โปรแกรมเมอร์เขียนแอดเดรสของคลาสของบั๊กซึ่งเป็นส่วนหนึ่งของนิยามของโค้ดที่ชัดเจน ตัวอย่างเช่นภาษาต่างๆทำงานค่อนข้างดีในการจัดการกับที่อยู่:

  • ข้อยกเว้นตัวชี้ Null
  • ข้อบกพร่องสถานะที่ใช้ร่วมกัน
  • ปัญหาการเกิดขึ้นพร้อมกัน
  • ข้อยกเว้นที่ไม่ได้ตรวจสอบ

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

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


6

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

เป็นตัวอย่างของ Python ที่บังคับให้คุณเยื้องบล็อกตามโครงสร้างความหมายของภาษาในขณะที่ภาษาอื่น ๆ อีกมากมายให้คุณเยื้องโดยสิ้นเชิงแบบสุ่มหรือไม่เลยก็ได้ นี่เป็นตัวอย่างของภาษาที่ส่งเสริมความสะอาดในอุดมคติ


3

หากคุณสามารถหาจำนวนมันได้คุณสามารถสร้างภาษาที่สามารถปรับให้เหมาะสม

ในขณะที่ฉันไม่ทราบภาษาเฉพาะใด ๆ ที่บังคับใช้นโยบาย "โค้ดแบบสะอาด" จริง ๆ แล้วสไตล์ตำรวจที่ทำงานบนบิลด์นั้นค่อนข้างทั่วไป

เหตุผลหลักที่ว่านี่เป็นขั้นตอนที่แยกต่างหากจากการถูกอบเข้าสู่ภาษานั้นเป็นส่วนสำคัญของการจัดลำดับความสำคัญ เป็นเรื่องที่ดีที่สุดสำหรับภาษาการเขียนโปรแกรมเพื่อให้ความยืดหยุ่นสูงสุดแก่โปรแกรมเมอร์ในการยอมรับในระดับกว้างที่สุด มีภาษาการเขียนโปรแกรมและ DSL ที่แตกต่างกันมากมายที่ จำกัด ฐานผู้ใช้โดยการเลือกสรรและให้ความเห็นเกี่ยวกับสิ่งที่อนุญาตให้ป้อนข้อมูลอาจมีแนวโน้มที่จะนำไปใช้ในวงกว้าง

ยกตัวอย่างเช่นการที่ C # ไม่สนใจที่จะบังคับให้คนเขียน

if (condition)
{

แทน

if (condition) {

แต่ตัวตรวจสอบรูปแบบสามารถให้ความเห็นที่พิถีพิถันได้เพราะนั่นคือสิ่งที่พวกเขาออกแบบมา

ดังนั้นเพื่อตอบคำถาม

ภาษาการเขียนโปรแกรมสามารถบังคับใช้โค้ดที่สะอาดได้โดยการออกแบบ

ฉันเน้น

แน่นอนตราบใดที่คุณให้คำจำกัดความที่ชัดเจนสำหรับความหมายของ "รหัสที่สะอาด"

ตัวอย่างเช่นฉันอาจกำหนด "รหัสสะอาด" เพื่อหมายถึง:

  • ความยาวบรรทัดไม่เกิน 80 อักขระ
  • ฟังก์ชั่นประกอบด้วยไม่เกิน 100 บรรทัด
  • การเยื้องจะต้องมีสองช่องว่าง
  • วงเล็บปีกกาเปิดจะต้องปฏิบัติตามในตอนท้ายของบรรทัดนำหน้าด้วยหนึ่งช่องว่าง
  • ไม่เกินสองตัวดำเนินการต่อบรรทัด

และคุณอาจไม่เห็นด้วยกับอนุสัญญาเหล่านี้บางส่วนหรือทั้งหมด แต่ในตอนท้ายของวันสิ่งเหล่านี้เป็นเชิงปริมาณและสามารถบังคับใช้โดยทางโปรแกรม


1

ไม่ไม่ใช่ในแง่ที่คุณอธิบาย การตรวจจับ "ความอัปลักษณ์" ไม่สามารถทำได้โดยอัตโนมัติ!

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

ฉันจะบอกว่าการออกแบบภาษาที่ดีมักจะมีปฏิกิริยาตอบสนอง: นักออกแบบมองสิ่งที่โปรแกรมเมอร์ที่ดีทำและพยายามทำให้ง่ายขึ้นและ "สวยกว่า"

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