ข้อดีและข้อเสียของการจัดรูปแบบรหัสแบบบังคับ


19

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


จัดรูปแบบอัตโนมัติ JSP หรือไม่ ซึ่งรวมถึงโค้ด HTML / XML และการจัดรูปแบบใหม่ซึ่งสามารถทำลาย / เปลี่ยนแปลงผลลัพธ์ที่ได้อย่างง่ายดาย
edA-qa mort-ora-y

คำตอบ:


23

ฉันคิดว่ามันสำคัญมากที่จะทำสิ่งนี้ นี่คือเหตุผล:

  • มันทำให้ diffs ควบคุมแหล่งที่มาของคุณจะแสดงเพียงแค่การเปลี่ยนแปลงรหัสจริงและทั้งหมด แต่กำจัด "เสียง diff" เนื่องจากช่องว่างและตัวเลือกการจัดรูปแบบอื่น ๆ ที่ไม่มีนัยสำคัญ
  • มันทำให้รหัสทั้งหมดคล้ายกันมากขึ้นเพื่อให้ devs จับคู่และแบ่งปันรหัสฐานได้สะดวกยิ่งขึ้น

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

หากคุณทำทีละนิดคุณจะผสมการเปลี่ยนแปลงรหัสจริงกับการจัดรูปแบบการเปลี่ยนแปลงและสิ่งต่าง ๆ จะยุ่งเหยิงโดยไม่จำเป็นในการเปลี่ยนที่ดิน


1
ฉันยอมรับว่าการใช้สัญลักษณ์แสดงหัวข้อย่อยเกี่ยวกับการเปลี่ยนแปลงระดับโลกเป็นวิธีที่ดีที่สุด ทำให้เสร็จและไม่มีใครต้องกังวลกับมันอีกเลย
Patrick Hughes

... จนกว่าคุณจะเปลี่ยนแบบแผนของคุณ
Nerdfest

1
@Nerdfest จากนั้นคุณใช้การประชุมใหม่ของคุณในทุกโครงการของคุณในการกระทำเดียว นั่นไม่ใช่เรื่องใหญ่
gizmo

2
ชนิดเครื่องมือ "diff" ของคุณเป็น sucks ถ้าไม่สามารถจัดการกับช่องว่างการเปลี่ยนแปลงอย่างถูกต้อง
edA-qa mort-ora-y

2
จะมีข้อยกเว้นเสมอซึ่งรูปแบบที่แตกต่างกันเล็กน้อยน่าจะสะอาดกว่าสไตล์ที่กำหนดไว้ การแปลงอัตโนมัติมักจะซ่อนเจตนาของบล็อคโค้ดบางอย่างซึ่งมีผลดีพอ ๆ กับการเพิ่มข้อบกพร่องให้กับโค้ด
edA-qa mort-ora-y

10

ฉันจะโยนคำตอบของตัวเองที่นี่เพราะผู้คนดูเหมือนจะเพิ่มความได้เปรียบ สิ่งที่ฉันเห็นเป็นข้อเสียคือ:

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

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

ฉันจำได้ว่าดูที่ VB (เวอร์ชัน 5 อาจจะ) และค้นหาสิ่งที่น่ารำคาญที่สุดอย่างหนึ่งเกี่ยวกับเรื่องนี้ก็คือการบังคับฟอร์แมตโค้ดของฉันใหม่


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

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

1
มันจะดีกว่าที่จะมีรูปแบบที่สอดคล้องกัน 99.9% ของเวลาและวางกับบิตแปลก ๆ ที่คุณไม่ชอบเป็นการส่วนตัว ฉันอาจขึ้นอยู่กับว่าทีมมีระเบียบวินัยอยู่ที่ใด หากคุณยึดตามบรรทัดฐานที่กำหนดไว้สำหรับภาษาบรรณาธิการ / ไอดีที่มีชื่อเสียงทุกคนจะสามารถกำหนดรูปแบบดังกล่าวได้ หากคุณยืนยันที่จะย้ายจากบรรทัดฐานคุณจะมีปัญหา
mattnz

3

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


3

ข้อเสียเปรียบหลักคือการสูญเสียการจัดรูปแบบที่กำหนดเองซึ่งสำคัญมาก

ลองนึกภาพการตรวจสุขภาพจิตโดยทั่วไปหาก () ที่จะล้มเหลวหากมีเงื่อนไขใด ๆ เกิดขึ้น แต่ไม่สำเร็จ ...

  if(
      (user.id == TEST_ID)
    ||(
         (user.id == UserID)
       &&( 
             ( user.type == HUMAN_USER && user.name.size() >= MIN_NAME )
           ||( user.type == EMULATION && input.source != SOURCE_INTERNAL ))
       && ( user.email == NULL || emailValidator.isValid(user.email))
       && ( (user.phone == NULL) == (user.type == EMULATION) )

       // several more lines like this.)
    ){ /* handle results */ }

สิ่งนี้สามารถอ่านได้ด้วยการเยื้องที่สมเหตุสมผลตามโครงสร้างตรรกะของเงื่อนไข

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


นี่เป็นเรื่องยุ่งสมองโพซิตรอนของฉันเพิ่งละลาย ความไม่สอดคล้องกันมากกับช่องว่างรอบ ๆ (และ) นั่นเป็นสาเหตุที่เราต้องการเครื่องจักรเพื่อจัดรูปแบบรหัส และคุณสามารถใส่ความคิดเห็นบรรทัดเดียวก่อน / หลัง (ขึ้นอยู่กับการประชุมของคุณ) เพื่อบังคับให้มีการจัดกลุ่มเงื่อนไข นอกจากนี้ยังจะเป็นประโยชน์ในการอธิบายผู้อ่านกฎทางธุรกิจที่อยู่เบื้องหลังเงื่อนไขนี้ - ในความคิดเห็นบรรทัดเดียวนี้
ftefan Oravec

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

2

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

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

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


0

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

พิจารณากรณีนั้น:

if( x == 0 ) 
   return foo;
//do something else
return bar;

หากคุณต้องการเพิ่มการบันทึกบางส่วนในกรณี if คุณอาจเขียนโดยไม่ได้ตั้งใจ:

if( x == 0 ) 
  log.info("x was 0");
  return foo;
//do something else
return bar;

และ suddently fooวิธีการของคุณเสมอกลับ

แก้ไข: นั่นไม่ใช่การจัดรูปแบบอัตโนมัติ แต่เป็นการตรวจสอบสไตล์ ขออภัยถ้าคำตอบนั้นเป็นหัวข้อนอกเช่นกัน :)


นั่นเป็นลักษณะของโค้ดมากกว่าสิ่งที่จัดรูปแบบ มีเครื่องมือสร้างสำหรับสิ่งนั้น

@ โบฮีเมียนคุณพูดถูกฉันผิดคำถาม เครื่องมือสร้างทางเลือกของเราคือ btw checkstyle :)
โทมัส

0

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


0

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


0

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

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