มาตรฐานการเข้ารหัสสำหรับรหัสที่โฮสต์ใน drupal.org แนะนำให้ใช้ช่องว่างสองช่องเพื่อเยื้องรหัส ไซต์อื่น ๆ แนะนำให้ใช้แท็บเพื่อเยื้องรหัส
อักขระการเยื้องที่เหมาะสมสำหรับทุกสิ่งคืออะไรและในทุกสถานการณ์? โปรดอธิบายคำตอบที่คุณให้
มาตรฐานการเข้ารหัสสำหรับรหัสที่โฮสต์ใน drupal.org แนะนำให้ใช้ช่องว่างสองช่องเพื่อเยื้องรหัส ไซต์อื่น ๆ แนะนำให้ใช้แท็บเพื่อเยื้องรหัส
อักขระการเยื้องที่เหมาะสมสำหรับทุกสิ่งคืออะไรและในทุกสถานการณ์? โปรดอธิบายคำตอบที่คุณให้
คำตอบ:
ช่องว่าง
แท็บอาจมีจำนวนคอลัมน์แตกต่างกันขึ้นอยู่กับสภาพแวดล้อมของคุณ แต่ช่องว่างจะมีหนึ่งคอลัมน์เสมอ
ในแง่ของจำนวนช่องว่าง (หรือแท็บ) ที่มีการเยื้องมันเป็นสิ่งสำคัญที่จะสอดคล้องกันตลอดทั้งรหัสของคุณมากกว่าที่จะใช้ค่าหยุดแท็บใด ๆ ที่เฉพาะเจาะจง
แท็บ
แน่นอนว่าความมั่นคงมีความสำคัญมากกว่าหนึ่งและ IDE ที่ดีจะทำให้ความแตกต่างเล็กน้อย ที่กล่าวว่าจุดของหัวข้อนี้จะเป็นสงครามศักดิ์สิทธิ์ดังนั้น:
ฉันชอบแท็บ:
ใช้แท็บเพื่อเยื้องจุดเริ่มต้นของบรรทัดหนึ่งแท็บต่อระดับการเยื้องและให้ทุกคนเลือกความกว้างที่พวกเขาต้องการ
ใช้ช่องว่างหากคุณจัดเรียงอักขระภายในบรรทัดหนึ่งบรรทัดเพื่อให้แถวอยู่เสมอโดยไม่คำนึงถึงขนาดของแท็บ
และค้นหาและต่อยนักเขียนซอฟต์แวร์ยุคแรกทั้งหมดที่ปล่อยให้สิ่งที่โง่นี้กลายเป็นปัญหาตั้งแต่แรก
(อย่างจริงจังทำไมถึงเป็นสิ่งที่กล่าวถึงต่อไปคุณจะบอกฉันว่าคุณต้องการใช้อักขระหลายตัวเพื่อแบ่งบรรทัด!)
แท็บ
ควรใช้ช่องว่างที่แท็บไร้ประโยชน์อย่างสมบูรณ์
แม้สำหรับพารามิเตอร์การจัดตำแหน่งและแสดงความคิดเห็น, แท็บยังคงทำงานได้ดีขึ้น
ข้อโต้แย้งทั้งหมดสำหรับแท็บนั้นดีเยี่ยมในทางทฤษฎี แต่...
ในทางทฤษฎีการปฏิบัติและทฤษฎีเหมือนกัน ในทางปฏิบัติพวกเขาไม่ได้
ใช่ด้วยแท็บคุณสามารถตัดสินใจระดับการเยื้องของคุณ และใช่คุณสามารถใช้การผสมผสานของแท็บและช่องว่างเพื่อจัดเรียงสิ่งต่าง ๆ และในโลกอุดมคติ
ในความเป็นจริงคุณไม่สามารถเห็นความแตกต่างระหว่างช่องว่างและแท็บพวกเขามักจะสับสนเมื่อมีการย้ายโค้ดไปรอบ ๆ และการดูโค้ดในโปรแกรมอื่นที่มีแท็บตั้งค่าเป็น 8 คอลัมน์เป็นสิ่งที่สร้างความรำคาญ
ฉันเคยใช้แท็บ จากนั้นฉันก็เริ่มทำงานเป็นส่วนหนึ่งของทีมและแบ่งปันรหัส ฉันกลายเป็นผู้สนับสนุนพื้นที่อย่างรวดเร็ว ดังนั้นในขณะที่ฉันสามารถเห็นอกเห็นใจกับยูโทเปียของแท็บฉันไม่สามารถจินตนาการได้ว่าไม่ใช้ช่องว่าง
public:
ในการประกาศคลาส C ++ ดังนั้นพวกเขาจึงดูดีขึ้น (โดยเฉพาะอย่างยิ่งกับคลาสที่ซ้อนกัน)
ความคิดเห็นที่เกี่ยวข้องที่อาจเป็นที่สนใจ:
แท็บสำหรับการชนะ
I. อย่างแน่นอน เกลียด. 4. ช่องว่าง
ทำไม? ส่วนใหญ่เป็นเพราะฉันเบื่อการนำรหัสของฉันด้วยแป้นพิมพ์และต้องกดอย่างต่อเนื่องleft
left
left
left
เพื่อไปเยื้องหนึ่ง สิ่งนี้เกิดจาก Notepad ++ รุ่นแรกและแม้กระทั่ง notepad ของ Windows ธรรมดาซึ่งไม่มีสิ่งใดเป็นปุ่มฟอร์แมต ฉันมีปัญหามากมายเมื่อมีคนใช้ 3 เมื่อฉันใช้ 4 ทุกที่อื่นสิ่งอื่น ๆ
เหตุผลอื่นคืออักขระแท็บมีอยู่โดยเฉพาะสำหรับการเยื้องและถูกนำมาใช้เฉพาะในภายหลังสำหรับการนำทาง ทำไมเราถึงทำspace
space
space
space
เมื่อคนธรรมดาtab
จะทำงาน? เหตุใด IDE จึงต้องจัดการกับโค้ดที่เว้นระยะและรูปแบบ 2-5 อย่างถูกต้องเมื่อแท็บง่าย ๆ และตัวเลือกการตั้งค่าจะทำงานอย่างไร
น่าเสียดายที่ฉันเป็นชนกลุ่มน้อย
w
และb
(หรือe
และge
) เพื่อข้ามช่องว่างและโทเค็น: P
ฉันชอบที่จะใช้แท็บในทุกสิ่งเนื่องจากผู้พัฒนาแต่ละคนสามารถควบคุมจำนวนการเยื้องต่อแท็บได้ ด้วยวิธีนี้คุณจะได้รับความยืดหยุ่นในการแสดงผล
ที่ถูกกล่าวว่าฉันมักจะเลียนแบบสไตล์การเข้ารหัสใด ๆ ที่อยู่ในไฟล์ที่จะเริ่มต้นด้วย (ตั้งแต่ฉันใช้เวลามากในการบำรุงรักษางาน)
ฉันไม่คิดว่ามีสิ่งต่าง ๆ เช่นการเยื้องที่เหมาะสม (อย่างน้อยก็ไม่ต้องไม่มีสงครามรองลงมา)
ส่วนตัวฉันชอบช่องว่างสี่ พวกเขาทำให้ฉันสามารถอ่านรหัสได้เร็วขึ้นมากและพวกเขาก็ดูเหมือนกันในทุก ๆ เอดิเตอร์ - แม้แต่ Vi
softtabstop
ตัวเลือกretab
และretab!
คำสั่งและ
ช่องว่างเพราะเมื่อคุณจัดความคิดเห็นไปทางขวาของรหัสหรือรายการพารามิเตอร์ของฟังก์ชันหรือการแสดงออกหลายซับซ้อนหรือสิ่งที่มีลักษณะที่คุณต้องการงานที่สวยงามของคุณจะปรากฏที่เหมาะสมสำหรับทุกคน หากคุณใช้แท็บและอนุญาตให้ผู้ใช้ตั้งค่าแท็บของพวกเขาแตกต่างกันพวกเขาจะหยุดการจัดตำแหน่งสำหรับทุกคนยกเว้นกรณีที่ง่ายที่สุดของการเยื้องโค้ด
นอกจากนี้เป็นที่ชัดเจนว่าทุกคนในโลกควรใช้เสียงเรียกเข้าซึ่งทำให้ไม่สำคัญในการเยื้องเยื้องและเข้าหา "แท็บหยุด" แม้ในไฟล์ที่เว้นวรรค
แท็บเป็นตัวเลือกที่เป็นธรรมชาติและออร์โธด็อกซ์เนื่องจากเป็นคำจำกัดความที่ใช้สำหรับการเยื้อง
น่าเสียดายที่มีการใช้งานแท็บอย่างไม่สม่ำเสมอดังนั้นทางออกเดียวในโลกแห่งความจริงก็คือช่องว่าง 4 ช่อง
เห็นได้ชัดว่าคุณต้องการวิธีการรวมกัน
หากคุณกำลังแชร์รหัสกับนักพัฒนาคนอื่นคุณต้องสร้างมาตรฐานและเนื่องจากเป็นไปไม่ได้ (koff koff) คุณต้องทำให้ทุกคนมีช่องว่างสี่ช่อง
จากนั้นคุณต้องมีเครื่องมือแก้ไขที่ฉลาดพอที่จะไม่โง่เกี่ยวกับเรื่องนั้นเพื่อที่จะได้รู้ว่ามันควรปฏิบัติกับบรรทัดที่มีช่องว่างสี่ช่องที่ด้านหน้าของหน้าเหมือนที่มีการเยื้อง ตัวแก้ไข IDE หรือโปรแกรมเมอร์สมัยใหม่ทุกรุ่นสามารถโค้ดการไหลอัตโนมัติพร้อมช่องว่างแทนแท็บ
ทำไมบางคนไม่สามารถใช้สิ่งนี้:
ทุกคนมีความสุขเมื่อเห็นรูปแบบของตนเอง
นั่นเป็นเรื่องยากไหม
indent
โปรแกรมได้แล้ว
ช่องว่างหรือแท็บ - สิ่งที่ Atwood พูดจริง ๆ คือเลือกสิ่งหนึ่งและสอดคล้องในโครงการของคุณ จอกศักดิ์สิทธิ์เพียงรูปแบบของรหัสคือทำให้แน่ใจว่ามันสอดคล้องกันเพื่อให้นักจิตวิทยาที่รักษารหัสของคุณหลังจากที่คุณไม่รู้สึกว่าถูกบังคับให้แก้ไขสถานการณ์อย่างถาวร
ที่กล่าวว่าหากคุณทำงานใน Python หรือภาษาอื่น ๆ ที่ช่องว่างเป็นโครงสร้างการเขียนโปรแกรมจริงฉันไม่สามารถจินตนาการได้โดยใช้แท็บ
ฉันเป็นคนประเภทอวกาศ 4 คนแท็บก็ไม่สอดคล้องกัน
เห็นได้ชัดว่าแท็บสับสนใน Delphi ดังนั้นฉันจึงไม่ใช้แท็บใน Delphi
อย่างไรก็ตามฉันทำทุกอย่างอื่นโดยใช้ Emacs และใช้แท็บเสมอเพราะแท็บของฉันไปในที่ที่ฉันต้องการ
คำตอบคือไม่มีอักขระการเยื้องที่เหมาะสมสำหรับทุกสถานการณ์ การจัดรูปแบบโดยใช้ตัวละครนั้นไม่ยืดหยุ่นและอาจทำให้เกิดความขัดแย้งเมื่อใช้สไตล์ที่แตกต่างกันภายในทีม
วิธีเดียวที่จะจัดรูปแบบโค้ดได้อย่างไม่มีที่ติและมีความยืดหยุ่นพร้อมกับรูปแบบการจัดรูปแบบที่แตกต่างกันคือการทำตามความเป็นจริงนั่นคือไม่มีอักขระการเยื้อง เครื่องมือแก้ไขรหัสเดียวที่ฉันรู้ว่ารองรับสิ่งนี้แม้ว่าจะเป็นเครื่องมือที่ใช้ในตัวอย่างด้านล่าง:
เพื่อสาธิตการจัดรูปแบบเสมือนภาพหน้าจอด้านล่างมาจากเครื่องมือแก้ไข XSLT * ที่ใช้วิธีการเยื้องนี้ (นอกจากนี้ยังมีวิดีโอสั้น ๆที่นี่ด้วย ) อักขระทุกตัวใน XSLT ได้รับการเน้นด้วยสีเหลืองเพื่อจุดประสงค์ในการอธิบายเพื่อให้สามารถมองเห็นแท็บหรืออักขระเว้นวรรคในเนื้อหาเท่านั้น การเยื้องรหัสจะถูกจัดการโดยระบบการแสดงผลของตัวแก้ไขปรับระยะขอบซ้าย (ซึ่งมีพื้นหลังสีขาว)
อักขระช่องว่างนำหน้าเท่านั้นบรรทัดนำหน้าหนังสือเนื่องจากนี่เป็นเนื้อหาข้อความที่แท้จริงไม่ใช่รหัสอักขระเว้นวรรคเหล่านี้ต้องถูกเก็บรักษาไว้
ด้วยการจัดรูปแบบเสมือนคุณเลือกความกว้างของการเยื้องเพื่อให้เหมาะกับสภาพแวดล้อมและรูปแบบการเยื้องโดยไม่ส่งผลกระทบต่ออักขระใด ๆ ในไฟล์ต้นฉบับ คุณสามารถตั้งค่าความกว้างของการเยื้องเป็น 0 ได้หากคุณต้องการดูรหัสแบบแบนดังที่แสดงด้านล่าง:
หากต้องการเปรียบเทียบสิ่งนี้กับการจัดรูปแบบอักขระเว้นวรรค XSLT เดียวกันที่เปิดในตัวแก้ไขโดยไม่มีการจัดรูปแบบเสมือนจะถูกแปลงโดยตัวจัดรูปแบบอัตโนมัติของตัวแก้ไขดังกล่าว:
บล็อกสีเหลืองว่างเปล่าที่มีขนาดใหญ่กว่าในภาพหน้าจอด้านบนแสดงตัวอักษรเว้นวรรคที่เพิ่มโดยตัวจัดรูปแบบของเครื่องมือแก้ไขแบบธรรมดา น่าเสียดายที่ตอนนี้ไม่สามารถแยกความแตกต่างจากเนื้อหาจริงดังนั้น XSLT จะต้องได้รับการแก้ไขเพื่อแก้ไขปัญหานี้
สรุป
XSLT อาจเป็นกรณีที่รุนแรง แต่หลักการนี้ยังคงเป็นจริงสำหรับภาษาการเขียนโปรแกรมจำนวนมาก: ควรใช้อักขระสำหรับเนื้อหาและวิธีการอื่น ๆ ที่ต้องการเมื่อทำการฟอร์แมต
การเปิดเผยข้อมูล **: XSLT Editor พร้อมการจัดรูปแบบเสมือนได้รับการพัฒนาโดย บริษัท ของฉัน *
ยังไม่ได้กล่าวถึงจนถึงขณะนี้: มีหลายภาษา (Python, Haskell) ที่มีการเยื้อง แต่อักขระ 1 ตัวจะนับเป็น 1 ตัวอักษรไม่ว่าจะเป็นช่องว่างหรือแท็บดังนั้นการเยื้องที่เห็นโดยคอมไพเลอร์อาจไม่เหมือนกับที่คุณเห็นบนหน้าจอหากคุณใช้แท็บ
ดังนั้นในภาษาเช่น Haskell ต้องเว้นวรรค ใน Makefiles ต้องมี TABS ในคนอื่น ๆ ทุกคนมันเป็นเรื่องของรสนิยมส่วนตัวและทุกวันนี้ไม่ใช่เรื่องใหญ่อะไรนักแก้ไขที่ดีทุกคนมีคำสั่ง "แท็บ (นำหน้า) ไปยังช่องว่าง" และ "(นำหน้า) ช่องว่างไปยังแท็บ"
ฉันเคยใช้ช่องว่าง แต่ฉันใช้แท็บเมื่อเร็ว ๆ นี้เพราะนั่นคือสิ่งที่ Eclipse ถูกตั้งค่าเป็นเมื่อฉันสังเกตเห็นในที่สุด นักพัฒนาอื่น ๆ ทั้งหมดในทีมของฉันใช้ Eclipse ดังนั้นจึงเป็นเรื่องเหมาะสมที่จะสร้างมาตรฐานให้กับแท็บเมื่อเรารู้ว่าเราได้ใช้พวกมันมานานแล้วและไม่มีเหตุผลที่จะต้องเปลี่ยนช่องว่าง ฉันรู้สึกประหลาดใจกับจำนวนที่ไม่มีปัญหา
การตั้งค่าขนาดแท็บที่แสดงเป็น 3 หรือ 5 ตัวอักษรใน IDE ของคุณช่วยให้แยกแยะความแตกต่างระหว่างส่วนของรหัสที่เยื้องลงในช่องว่างได้ง่าย (เกือบตลอด 4 วันเหล่านี้) และส่วนที่เยื้องโดยแท็บ
มีการถกเถียงกันมากมายแล้ว แต่ก็ไม่มีใครพูดถึงว่าเราจะไปอยู่ตรงไหนในอนาคต
แท็บหรือช่องว่าง!
รหัสที่ดีควรได้รับการพิจารณาข้อมูลและไม่ถูกจัดเก็บในการจัดรูปแบบข้อความเฉพาะใด ๆ นักพัฒนาสามารถใช้มุมมองที่ต้องการได้ นอกจากนี้มุมมองนี้ไม่ควร จำกัด เฉพาะข้อความแต่สามารถรวมตารางตัวเลือกสีและสูตรทางคณิตศาสตร์
ความคิดนี้ไม่ได้ลึกซึ้งเกินไป มันเป็นตัวแก้ไขการเขียนโปรแกรมเชิงภาษาของ JetBrain Meta Programming System (MPS)ซึ่งทำให้ฉันรู้ว่าสิ่งนี้ช่วยแก้ไขการสนทนาทั้งหมดพร้อม ๆ กันเพิ่มความเป็นไปได้พิเศษมากมาย (ใช่สิ่งนี้เป็นไปได้ด้วยปลั๊กอินตัวแก้ไข แต่การทำงานกับข้อความจะเพิ่มความซับซ้อนที่ไม่จำเป็นจำนวนมากโดยตรงเมื่อเทียบกับวิธีที่ MPS ใช้)
เมื่อเทียบกับแท็บและช่องว่างที่มีข้อเสียเล็ก ๆ น้อย ๆ ที่สามารถนำมากล่าวถึงในการทำงานโดยตรงบนต้นไม้ไวยากรณ์นามธรรม สิ่งที่จำเป็นสำหรับเทคโนโลยีในการพัฒนาผลิตภัณฑ์ที่วางขายในเชิงพาณิชย์ สัญญาณแรกของสิ่งนี้กำลังปรากฏขึ้น สร้างขึ้นโดยส่วนใหญ่บน MPS ตัวแก้ไขแอ็คชั่นเชิงพาณิชย์Realaxyถูกสร้างขึ้น
ฉันชอบที่จะเห็นหนึ่งในผู้เล่นที่ยิ่งใหญ่กระโดดแนวคิดของเทคโนโลยีนี้และดูว่าเกิดอะไรขึ้น!
ไม่ดีกว่าหรือแย่กว่า สิ่งสำคัญเพียงอย่างเดียวคือต้องสอดคล้องกัน
หากคุณเป็นทีมหนึ่งให้เลือกสิ่งที่คุณชอบเป็นการส่วนตัว พิจารณาสิ่งที่พฤติกรรมเริ่มต้นของการแก้ไขที่คุณชื่นชอบ แต่เลือกสิ่งที่คุณต้องการ
ถ้าคุณอยู่ในทีมทำในสิ่งที่ทีมทำ ระยะเวลา
ในงานต่าง ๆ ของฉันฉันได้ใช้ช่องว่างสองช่องสี่ช่องแปดช่องแท็บช่องว่างและแท็บฉันคิดว่าฉันอาจใช้ช่องว่างเดียว ฉันบอกบรรณาธิการว่าต้องทำอะไรแล้วฉันจะไม่คิดถึงมันอีกเลย
สิ่งเดียวที่จะทำให้แน่ใจว่าคุณเลือกโปรแกรมแก้ไขอัจฉริยะ Emacs หรือ vi? ตอนนี้ที่สงครามศักดิ์สิทธิ์ฉันยินดีที่จะต่อสู้ :-)