การขัดแย้งสไตล์ Java ภายในทีม


12

ฉันเป็นส่วนหนึ่งของทีมพัฒนา Java ด้วยกำหนดเวลา 6 สัปดาห์ สิ่งนี้ทำให้การเขียนโค้ดเป็นไปอย่างรวดเร็วมาก อย่างไรก็ตามทีมพัฒนาของเรามีรูปแบบการเข้ารหัสที่แตกต่างกัน ทุกอย่างตั้งแต่แบบแผนชื่อไปจนถึงวิธีการนามธรรมต่างกันในทีม ไม่มีใครรู้ว่าเอกสารใด ๆ ที่กำหนด "มาตรฐาน" สำหรับ java หรือไม่

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

คำตอบ:


18

มีองค์กรดังกล่าวคือ Sun / Oracle เอง เอกสารนี้เรียกว่าCode Conventions สำหรับ Java Programming Languageและมันอธิบายเกี่ยวกับอนุสัญญาส่วนใหญ่ที่คุณต้องการ เพียงให้ทุกคนเห็นด้วยที่จะอ่านและปฏิบัติตามคำแนะนำ


3
นี่เป็น std ที่รู้จักกันดี แต่อย่ากลัวที่จะเบี่ยงเบนจากที่เห็นด้วยกับทีม ยกตัวอย่างเช่นการจำกัดความกว้างของตัวอักษรไว้ที่ 80 ตัวอาจทำให้เกิดความเจ็บปวดได้
Martijn Verburg

1
@MartijnVerburg ขีด จำกัด สามารถแจ้งให้ทำการเปลี่ยนเป็นวิธีการและคลาสเพื่อหลีกเลี่ยงการเยื้องลึก

นี่คือการประชุมและอาจเป็นทางเลือกที่สมเหตุสมผลถ้าคุณไม่สามารถหาข้อตกลงของตัวเอง แต่ในฐานะที่เป็นชื่อรัฐมันไม่ได้กำหนด - มันเป็นแบบแผน
ผู้ใช้ที่ไม่รู้จัก

@userunknown คุณพูดถูก ฉันไม่เห็นด้วยกับอนุสัญญาทั้งหมด แต่มันเป็นการประนีประนอมที่ดีในกรอบเวลาของ OP
Andres F.

8

ฉันติดแท็กคำตอบของ Andresจริงๆและมุ่งเน้นที่การจัดรูปแบบโค้ดจาวาอย่างสม่ำเสมอ

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

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

ฉันจะถือว่า Java IDE หลักอื่น ๆ (IntelliJ และ Netbeans) มีคุณสมบัติคล้ายกันสำหรับการส่งออกการตั้งค่ารูปแบบ


2
+1 คำตอบที่ดีเช่นกัน! นอกจากนี้คุณยังสามารถติดตั้งปลั๊กอินเช่นCheckstyleและแจ้งเตือนเมื่อคุณหยุดการประชุม
Andres F.

เราทำสิ่งนี้เช่นกัน การตั้งค่า -> Java -> ตัวแก้ไข -> บันทึกตัวเลือกและเปิดใช้งานรูปแบบที่บันทึก เหตุผลหลักคือเพื่อให้แน่ใจว่าบรรทัดซอร์สที่ได้รับผลกระทบจากรูปแบบจะเกิดขึ้นโดยเร็วที่สุดเพื่อให้ได้รับประวัติการควบคุมเวอร์ชันที่สะอาดที่สุดเท่าที่จะเป็นไปได้ (ต่างกันอีกครั้ง)

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

6

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

แท้จริง มันไม่สำคัญ

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

หลังจากอ่านสไตล์มากมายฉันได้เรียนรู้สิ่งนี้

สไตล์ไม่สำคัญ

โปรดเน้นการเขียนโค้ดที่ใช้งานได้ตลอดเวลาและการเขียนการทดสอบหน่วยที่พิสูจน์ได้ว่าทำงานได้ตลอดเวลา

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


อาจจะไม่สำคัญ แต่ก็ดีมากที่จะมีและทำง่ายมาก
Kevin

1
สไตล์ไม่สำคัญ แต่มีความสำคัญ รูปแบบที่ไม่สอดคล้องทำให้การบำรุงรักษาซอฟต์แวร์ยากขึ้นมาก
Jesper

5
@Jesper: "สไตล์ที่ไม่สอดคล้องทำให้การบำรุงรักษาซอฟต์แวร์เป็น" บิตเล็ก "ยากขึ้น" มันไม่ได้ยากอะไรมากมายนัก โค้ดที่ทึบไม่ดีและเป็นบั๊กนั้นยากต่อการบำรุงรักษามาก รูปแบบที่ไม่สอดคล้องกันในรหัสการทำงานเป็นรูปแบบที่ไม่สอดคล้องกัน บางคนมีสำเนียงและคุณต้องฟังอย่างระมัดระวังมากขึ้น สไตล์ที่ไม่สอดคล้องกันนั้นแตกต่างจากสำเนียงภูมิภาค (หรือระดับชาติ) เล็กน้อย
S.Lott

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

1
"โค้ดของคุณจะอยู่ที่" ดีที่สุด "ดีกว่าเล็กน้อย" และใช่มันเกือบจะเป็นศูนย์ค่าใช้จ่ายและแน่นอนความเสี่ยงเป็นศูนย์ แต่. การทดสอบครอบคลุม 100% นั้นมีคุณค่ามาก
S.Lott

2

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

ความสอดคล้องช่วยปรับปรุงการทำงานร่วมกันการทำงานร่วมกันช่วยปรับปรุงรหัส

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


0

Sun Java CC ที่กล่าวถึงข้างต้นไม่เพียง แต่มีอายุ 13 ปีและกฎบางอย่างของมันล้าสมัย (เช่น 80 ตัวอักษรต่อบรรทัด) แต่ยังไม่ได้กำหนดการประชุมแบบตั้งชื่อยกเว้นตัวทั่วไปมากที่สุด (ตัวอูฐสำหรับชั้นเรียน สำหรับตัวแปรสุดท้ายคงที่และไม่ชอบ)

คุณต้องกำหนดมาตรฐานของคุณเองสำหรับคลาสประเภทต่างๆเช่น DAOs, EJBs, เอนทิตีหรืออะไรก็ตามที่คุณใช้ Sun Java CC เป็นเหมือนคลาสพื้นฐานที่เป็นนามธรรมสำหรับการขยาย :)


ฉันยอมรับ Java CC ของ Sun นั้นค่อนข้างเก่า แต่ก็เป็นจุดเริ่มต้น ฉันคิดว่า OP ไม่มีเวลามากที่จะเสียการกำหนด CC ของตัวเองหรือเขาจะพูดอย่างนั้น! (BTW ซึ่งตอนนี้ฉันทำงานอยู่พวกเขาใช้ปลั๊กอินSonar ที่กำหนดค่าให้บังคับใช้ขีด จำกัด 80 อักขระ - ดังนั้นกฎนี้จึงยังมีชีวิตอยู่และเตะในร้านค้าบางแห่ง)
Andres F.

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

หากคุณประสบปัญหากับ 80 ตัวอักษรต่อบรรทัดคุณอาจมีตัวระบุยาวอย่างน่าประหลาดใจหรือคุณกำลังวางตัวบนบรรทัดเดียวมากจนอ่านไม่ได้ อดีตเป็นคนโง่ (คุณไม่สามารถกลั่นส่วนสำคัญลงไปต่ำกว่านั้นได้หรือไม่) และสิ่งหลังคือสิ่งบ่งชี้ถึงความจำเป็นเร่งด่วนในการปรับโครงสร้างใหม่ การจัดรูปแบบอัตโนมัติในการบันทึกดีมากตั้งแต่นั้นมาคุณไม่ต้องกังวลกับการจัดรูปแบบเลย ซอฟต์แวร์จัดการให้คุณ
Donal Fellows

@ DonalFellows ใช่ในวันนี้และอายุการ จำกัด 80 ตัวอักษรอยู่ที่นั่นเพื่อเตือนให้คุณ refactor ไม่ใช่เพราะหน้าจอเทอร์มินัลขนาดเล็ก
Andres F.

0

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

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

ดังนั้นจึงเป็นสิ่งสำคัญที่จะต้องพิจารณาสถานการณ์ของคุณเช่นกัน


ประเทศนี้คืออะไร ฟังดูเหมือนเป็นเรื่องทางวัฒนธรรม

@ ThorbjørnRavnAndersenเขาหมายถึงว่าคนสามารถทนต่อการเปลี่ยนแปลงเมื่อ "สิ่งที่พวกเขาได้ทำงานมานานแล้ว" การเมืองในแง่นี้เป็นเพียง "การเมืองในสำนักงาน"
Robotnik

0

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


0

สิ่งที่สำคัญในรหัสคือความซับซ้อนของวัฏจักรต่ำขอบเขตขนาดเล็กการทำงานร่วมกันสูงและตัวเลือกของตัวบ่งชี้ที่แสดงออก เมื่อพิจารณาแล้วรหัสจะง่ายต่อการเข้าใจและรหัสดังกล่าวดี

ผมขอแนะนำให้คุณมองเข้าไปในโปรแกรมสปาร์ตัน

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

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