แท็บกับช่องว่าง - ลักษณะการย่อหน้าที่เหมาะสมสำหรับทุกสิ่งในทุกสถานการณ์เป็นเท่าไหร่? [ปิด]


84

มาตรฐานการเข้ารหัสสำหรับรหัสที่โฮสต์ใน drupal.org แนะนำให้ใช้ช่องว่างสองช่องเพื่อเยื้องรหัส ไซต์อื่น ๆ แนะนำให้ใช้แท็บเพื่อเยื้องรหัส

อักขระการเยื้องที่เหมาะสมสำหรับทุกสิ่งคืออะไรและในทุกสถานการณ์? โปรดอธิบายคำตอบที่คุณให้



13
IDE FTW เริ่มต้น - เพียงกดปุ่มแท็บแล้วดูว่าเกิดอะไรขึ้น
281377

ไม่ว่าคุณจะเลือกแบบใดมันจะต้องถูกใช้โดยทั้งทีม แต่ไม่ใช่เมื่อใช้แท็บเว้นวรรคอื่น
ศิษย์

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

4
ฉันไม่คิดว่าควรจะมีคำตอบ "ยอมรับ" ที่นี่ ข้อเท็จจริงที่ว่าคำตอบที่มีการลงมติน้อยลงนั้นจริง ๆ แล้วข้อแรกคือข้อพิสูจน์ที่ว่า: ทำไมผู้ถามจึงควรได้รับพลังพิเศษ
Dean Harding

คำตอบ:


129

ช่องว่าง

แท็บอาจมีจำนวนคอลัมน์แตกต่างกันขึ้นอยู่กับสภาพแวดล้อมของคุณ แต่ช่องว่างจะมีหนึ่งคอลัมน์เสมอ

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


42
ย่อหน้าที่สองของคุณผิด คำตอบคือ 4!
Daenyth

5
@Denenyth - หากคุณใช้ภาษาที่มีความโค้งงอ Pascal / Delphi ส่วนใหญ่ใช้ 2
Gerry

72
เหตุใดฉันจึงควรได้รับคำสั่งจากการเว้นวรรค 2 หรือ 4 ของคุณเมื่อแท็บสามารถตั้งค่าแบบไดนามิกและระบุการเยื้องระดับเดียวได้
Jé Queue

3
@MGOwen อาร์กิวเมนต์เวลาในการดาวน์โหลดสำหรับการเข้ารหัสเว็บไซต์สามารถแก้ไขได้อย่างง่ายดายในทุกวันนี้โดยใช้การลดขนาดแหล่งที่มาบน css / javascript และการลบช่องว่างบน HTML ดู mod_pagespeed เพื่อดูว่าฉันหมายถึงอะไร
Evan Plaice

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

249

แท็บ

แน่นอนว่าความมั่นคงมีความสำคัญมากกว่าหนึ่งและ IDE ที่ดีจะทำให้ความแตกต่างเล็กน้อย ที่กล่าวว่าจุดของหัวข้อนี้จะเป็นสงครามศักดิ์สิทธิ์ดังนั้น:

ฉันชอบแท็บ:

  • พวกเขาเป็นตัวละครที่มีความหมายโดยเฉพาะสำหรับการเยื้อง
  • พวกเขาอนุญาตให้นักพัฒนาซอฟต์แวร์ที่มีขนาดต่างกันในการเยื้องขนาดเพื่อเปลี่ยนลักษณะของโค้ดโดยไม่ต้องเปลี่ยนรหัส (การแยกข้อมูลและการนำเสนอสำหรับการชนะที่เป็นสุภาษิต!)
  • เป็นไปไม่ได้ที่จะเยื้องสิ่งบางอย่างด้วยแท็บ ดังนั้นเมื่อคุณคัดลอกรหัสจากเว็บไซต์บางแห่งที่ใช้ช่องว่าง 3 ช่องลงในไฟล์ที่มีการเว้นวรรคแบบ 4 ช่องคุณไม่ต้องจัดการกับแนวที่ไม่ตรง

12
สิ่งที่เกี่ยวกับการคัดลอกรหัสเยื้อง 3 ช่องว่างลงในไฟล์ที่เยื้องแท็บของคุณซึ่งคุณได้ตั้งแท็บเป็น 3 ช่องว่าง? เมื่อคุณส่งรหัสไปยังเพื่อนร่วมชาติของคุณพวกเขาสงสัยว่าทำไมฟังก์ชั่นดังกล่าวถึงมีการเยื้องที่ไม่ดีเช่นนี้!
Wayne Werner

27
แท็บจะไม่ได้หมายเดิมสำหรับการเยื้องพวกเขามีความหมายสำหรับการจัดระเบียบและทำผลงานที่น่ากลัวที่มัน ...
Timwi

14
@Timwi: Wikipediaดูเหมือนว่าจะมีความหมายสำหรับการย้ายเคอร์เซอร์ไปยังคอลัมน์คงที่ชุดถัดไป ฟังก์ชั่นหลักไม่ได้ฟังดูไม่เหมือนการจัดระเบียบ นอกจากนี้ฉันหมายถึงยุคหลังเครื่องพิมพ์ดีด
Fishtoaster

40
นอกจากนี้โปรแกรมเมอร์จำนวนมากใช้เวลาในการเขียน html, css และอื่น ๆ เป็นจำนวนมากซึ่งความจริงที่ว่าไฟล์ที่มี 4 ช่องว่างแทนที่จะเป็นแท็บนั้นมีขนาดใหญ่กว่า 5-15% นั้นสำคัญมาก ตัวอย่าง: หน้านี้คุณอยู่ในขณะนี้เต็มไปอย่างน้อย 10% ช้ากว่าที่ควรจะมีเพราะทีม SE ใช้ช่องว่าง ตรวจสอบด้วยตัวคุณเอง
MGOwen

23
ข้อดีอีกประการของวิธีนี้คือการกดปุ่มน้อยลงเมื่อใช้ปุ่มลูกศรสำหรับการนำทางซ้าย - ขวา
Nicole

117

ใช้แท็บเพื่อเยื้องจุดเริ่มต้นของบรรทัดหนึ่งแท็บต่อระดับการเยื้องและให้ทุกคนเลือกความกว้างที่พวกเขาต้องการ

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

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


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

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

3
นี่เป็นคำตอบเดียวที่ถูกต้องที่นี่
J.Ashworth

76

แท็บ

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

ควรใช้ช่องว่างที่แท็บไร้ประโยชน์อย่างสมบูรณ์

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


24
wrt "มีประสิทธิภาพมากขึ้น" โดยส่วนตัวฉันกด TAB และให้ IDE ทำการแปลงสำหรับจำนวนอักขระช่องว่างที่เหมาะสมที่จะแนะนำ บางทีคุณต้องอัพเกรด: p?
Matthieu M.

3
-1: ข้อผิดพลาดที่เห็นได้ชัดเจนเพิ่มเติม: ไม่เป็นความจริง; สม่ำเสมอ: แทบจะไม่ได้เพราะปรับแต่งได้: ใช่ แต่ก็เป็นข้อเสียในเวลาเดียวกัน; มีประสิทธิผลมากขึ้น: ไม่เป็นความจริงแทบทุกด้านสามารถแปลงแท็บเป็นช่องว่างได้ ขนาดน้อยลง: ใช่ แต่ใช้งานได้จริง? ไม่มี; เวลาน้อยลง: ไม่มี IDE ที่เหมาะสม; มีแนวโน้มที่จะทำงานได้ดีขึ้น: ไม่เลยถ้าคุณใช้สภาพแวดล้อมและเครื่องมือที่หลากหลาย
MaR

@MaR: ความผิดพลาดที่สังเกตได้นั้นเป็นความจริงความกว้างของแท็บนั้นใหญ่กว่า นอกจากนี้ ... Python! แท็บมีความสอดคล้องกันเนื่องจากแท็บเดียวเป็นการเยื้องในขณะที่คุณต้องกำหนดว่าจะใช้ช่องว่างกี่ช่องสำหรับการเยื้อง การปรับแต่งเป็นข้อได้เปรียบ คุณกำลังใช้แท็บตั้งแต่แรกดังนั้นจึงมีประสิทธิภาพมากกว่า ดูเหมือนว่าคุณจะไม่สามารถให้เหตุผลที่ดีได้ว่าทำไมมันจึงเป็นไปไม่ได้เกลียดชังจะเกลียด ... ;)
Tamara Wijsman

@TomWij: แท็บใหญ่กว่าจำนวนช่องว่างที่เท่ากันได้อย่างไร Python เป็นภาษาเดียวที่ได้รับสิทธิ์ในการใช้แท็บอย่างปลอดภัย (แต่ยัง - มันมีข้อได้เปรียบเพียงเล็กน้อยเมื่อเทียบกับ "แทรกช่องว่าง") ลองใช้ภาษาอื่น ๆ สภาพแวดล้อมดั้งเดิมส่วนต่าง / การรวมอาคารเทอร์มินัล sccs เพื่อดูว่าทำไมแท็บต่างๆจึงยังคงเป็น "อุดมคติ"
MaR

@MaR: ฉันจะระบุ 'จำนวนช่องว่างที่เท่ากัน' ที่ไหน? ฉันได้ลองทั้งหมดแล้วแท็บทำงานได้อย่างสมบูรณ์ในพวกเขา!
Tamara Wijsman

41

ข้อโต้แย้งทั้งหมดสำหรับแท็บนั้นดีเยี่ยมในทางทฤษฎี แต่...

ในทางทฤษฎีการปฏิบัติและทฤษฎีเหมือนกัน ในทางปฏิบัติพวกเขาไม่ได้

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

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

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


6
คุณสามารถรับโปรแกรมแก้ไขอย่าง Kate ซึ่งนำเสนอแท็บด้วยอักขระ 'ผี' - ฉันสามารถดูแท็บเทียบกับช่องว่างเมื่อมีการเข้ารหัส
HorusKol

8
ผู้แก้ไขทุกคนมีตัวเลือก "แสดงพื้นที่ว่าง" ในขณะนี้และ Visual Studio มีตัวเลือก 'tabify'
Chris S

2
อาร์กิวเมนต์ที่ดี นั่นเป็นเหตุผลที่ฉันยอมแพ้ในการพยายามโน้มน้าวผู้คนว่าแท็บนั้นมีเหตุผลมากกว่า แม้แต่โปรแกรมเมอร์ที่ควรใช้ความคิดที่เป็นนามธรรมดูเหมือนจะสร้างความสับสนให้กับแท็บและช่องว่าง ("ถ้ามันดูเหมือนสี่ช่องว่างก็ต้องเป็นสี่ช่องว่าง!") เล็บในโลงศพสำหรับฉันดูเหมือนว่าเป็นไปไม่ได้ที่จะกำหนดค่า Emacs ให้เยื้องกับแท็บเท่านั้น
Martin Vilcans

3
+1 ยูโทเปียแท็บนั้นยอดเยี่ยม แต่ทุกครั้งที่ฉันย้ายโค้ดระหว่างผู้แก้ไขที่มีความกว้างแท็บต่างกันรหัสจะถูกทำให้ยุ่งเหยิงและไม่ตรงแนว มันง่ายเกินไปที่จะทำสิ่งผิดปกติด้วยแท็บอย่างเงียบ ๆ
Mankarse

ฉันเคยใช้แท็บด้วยเช่นกัน แต่ฉันพบปัญหากับ IDE บางตัวที่ไม่สามารถแทรกช่องว่างสำหรับบรรทัดต่อเนื่องและฉันเกลียดที่จะแทนที่แท็บที่แทรกโดยอัตโนมัติทั้งหมดด้วยช่องว่าง (Visual Studio เป็นหนึ่งในนั้น) ดังนั้นฉันจึงติดกับช่องว่าง บวกช่องว่างช่วยให้คุณใช้การเยื้องขนาดครึ่งสำหรับสิ่งต่าง ๆ เช่นpublic:ในการประกาศคลาส C ++ ดังนั้นพวกเขาจึงดูดีขึ้น (โดยเฉพาะอย่างยิ่งกับคลาสที่ซ้อนกัน)
szx

31

105
เพียงเพราะคุณมีชื่อเสียงไม่ได้ทำให้คุณถูกต้อง
Jé Queue

@Xepoch: คุณอ่านเหตุผลของพวกเขา :)
Matthieu M.

5
@ Matthieu M. ใช่ฉันได้อ่านแต่ละฉบับแล้วแต่ก็ยังไม่เห็นด้วย ฉันไม่ชอบมะกอก แต่ก็ไม่ทำให้ฉันผิดเพราะคนอื่นทำ ฉันคิดว่ามันน่าหัวเราะที่ผู้คนจะไม่ใช้แท็บเพื่อเยื้อง แต่นี่คือเหตุผลที่พวกเขาเรียกพวกเขาว่า CS Holy Wars ...
Jé Queue

2
@Xepoch: ใช่ฉันคิดว่าทุกคนมีสิทธิ์ที่จะคิด :) ฉันคิดว่า Guido ได้ชี้ประเด็นหลัก: การผสมแท็บและช่องว่างเป็นสิ่งที่ชั่วร้ายเพราะทั้งสองปรากฏเป็น "ช่องว่าง" ให้กับผู้ใช้
Matthieu M.

3
@ Fishtoaster: เมื่อคุณบอกว่า Joel พูดว่าช่องว่างลิงค์นั้นควรจะเป็นของ Joel จริงๆหรือเปล่า? ลิงก์ไปที่ฟอรัม JoelOnSoftware ซึ่งมี ppl (ส่วนใหญ่ไม่พูดกับ Joel) หารือเกี่ยวกับแท็บเทียบกับช่องว่าง
Andreas Magnusson


20

I. อย่างแน่นอน เกลียด. 4. ช่องว่าง

ทำไม? ส่วนใหญ่เป็นเพราะฉันเบื่อการนำรหัสของฉันด้วยแป้นพิมพ์และต้องกดอย่างต่อเนื่องleft left left leftเพื่อไปเยื้องหนึ่ง สิ่งนี้เกิดจาก Notepad ++ รุ่นแรกและแม้กระทั่ง notepad ของ Windows ธรรมดาซึ่งไม่มีสิ่งใดเป็นปุ่มฟอร์แมต ฉันมีปัญหามากมายเมื่อมีคนใช้ 3 เมื่อฉันใช้ 4 ทุกที่อื่นสิ่งอื่น ๆ

เหตุผลอื่นคืออักขระแท็บมีอยู่โดยเฉพาะสำหรับการเยื้องและถูกนำมาใช้เฉพาะในภายหลังสำหรับการนำทาง ทำไมเราถึงทำspace space space spaceเมื่อคนธรรมดาtabจะทำงาน? เหตุใด IDE จึงต้องจัดการกับโค้ดที่เว้นระยะและรูปแบบ 2-5 อย่างถูกต้องเมื่อแท็บง่าย ๆ และตัวเลือกการตั้งค่าจะทำงานอย่างไร

น่าเสียดายที่ฉันเป็นชนกลุ่มน้อย


31
คุณไม่มีประสิทธิภาพในการเรียกดูรหัสแป้นพิมพ์ คุณควรใช้ CTRL + LEFT และ CTRL + RIGHT เพื่อข้ามผ่านช่องว่างและโทเค็น ดังนั้นการเยื้องจึงไม่สำคัญ
Wizard79

7
ความเข้าใจผิดนี้มาจากที่ใด“ แท็บมีอยู่โดยเฉพาะสำหรับการเยื้อง”? แท็บถูกเรียกว่า tabs (tabulators) เพราะมันถูกประดิษฐ์ขึ้นมาเพื่อสร้าง tabulation ไม่ใช่การเยื้องและพวกมันก็ทำหน้าที่ได้อย่างน่ากลัว
Timwi

7
@ Lorenzo: คุณไม่มีประสิทธิภาพในการเรียกดูรหัสแป้นพิมพ์ คุณควรใช้wและb(หรือeและge) เพื่อข้ามช่องว่างและโทเค็น: P
R. Martinho Fernandes

6
เพื่อการสนับสนุนที่โหดร้าย: อย่าทำโค้ดที่จัดรูปแบบไม่ดีในบรรณาธิการที่คุณพิจารณาว่าด้อยกว่า ใช้แท็บ
Jon Purdy

11
@Timwi: ขออภัยที่ necro แต่คีย์แท็บคอมพิวเตอร์ไม่ได้คิดค้นเพื่อการจัดระเบียบ รุ่นของ TYPEWRITER ของคีย์นั้นมี แต่เมื่อแป้นพิมพ์เวลาพัฒนาขึ้นเพื่อใช้กับคอมพิวเตอร์คีย์แท็บถูกใช้เพื่อเยื้องมากกว่าการจัดระเบียบและคำว่า "แท็บ" กลายเป็นคำที่มีความหมายเหมือนกับการเยื้อง แท็บสำหรับคอมพิวเตอร์จะเยื้องและเป็นเพียงการประชุมที่ชื่อของคีย์ตรงกับที่ของเครื่องพิมพ์ดีด ข้อโต้แย้งของคุณคล้ายกับการอ้างว่ารหัสส่งคืนคอมพิวเตอร์มีจุดประสงค์เพื่อเริ่มบรรทัดใหม่และเลื่อนเคอร์เซอร์ไปทางซ้ายสุดเพราะนั่นคือสิ่งที่ใช้ในเครื่องพิมพ์ดีด :)
Beofett

12

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

ที่ถูกกล่าวว่าฉันมักจะเลียนแบบสไตล์การเข้ารหัสใด ๆ ที่อยู่ในไฟล์ที่จะเริ่มต้นด้วย (ตั้งแต่ฉันใช้เวลามากในการบำรุงรักษางาน)


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

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

1
@finnw คุณคิดว่าทุกคนใช้แบบอักษร monospaced - ในปี 2012 จำนวน devs ที่สำคัญใช้สัดส่วน หากคุณมีตัวอักษรที่ไม่ใช่ช่องว่างทางด้านซ้ายของอาร์กิวเมนต์แรกของคุณไม่มีวิธีที่จะรับประกันข้อโต้แย้งในบรรทัดต่อมาจะจัดสำหรับทุกคน
paperjam

คุณไม่เคยลองเขียน HAML มีคุณ
alt

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

10

ฉันไม่คิดว่ามีสิ่งต่าง ๆ เช่นการเยื้องที่เหมาะสม (อย่างน้อยก็ไม่ต้องไม่มีสงครามรองลงมา)

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


9
vi (หรือค่อนข้างเป็นกลุ่ม) เป็นหนึ่งในบรรณาธิการที่ดีกว่าสำหรับการทำงานกับแท็บรวมถึงความสามารถในการตั้งค่าความกว้างแท็บและขยายเป็นช่องว่างโดยอัตโนมัติ (เช่นเดียวกับตัวแก้ไขส่วนใหญ่) คุณยังมีsofttabstopตัวเลือกretabและretab!คำสั่งและ
finnw

ทารกจะตายจริง ๆ หรือไม่ถ้าเราบอกว่ามีที่ว่าง 4 แห่งทุกที่ไม่มีทางเลือก - และย้ายไปอยู่ต่อ?
MGOwen

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

8

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

นอกจากนี้เป็นที่ชัดเจนว่าทุกคนในโลกควรใช้เสียงเรียกเข้าซึ่งทำให้ไม่สำคัญในการเยื้องเยื้องและเข้าหา "แท็บหยุด" แม้ในไฟล์ที่เว้นวรรค


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

18
ดูเหมือนว่าคุณกำลังวาดศิลปะ ASCII มากกว่าการเข้ารหัส
rmac

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

6

แท็บเป็นตัวเลือกที่เป็นธรรมชาติและออร์โธด็อกซ์เนื่องจากเป็นคำจำกัดความที่ใช้สำหรับการเยื้อง

น่าเสียดายที่มีการใช้งานแท็บอย่างไม่สม่ำเสมอดังนั้นทางออกเดียวในโลกแห่งความจริงก็คือช่องว่าง 4 ช่อง


8
ตั้งแต่เมื่อใดแท็บ (tabulators) ที่ใช้สำหรับการเยื้อง“ ตามคำนิยาม” โดยคำจำกัดความของพวกเขาพวกเขาถูกคิดค้นขึ้นเพื่อการจัดระเบียบ (แม้ว่าพวกเขาจะทำงานที่น่ากลัวเกินไป)
Timwi

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

@JordanReiter RE: "คุณไม่เห็นคนที่ถูกแขวนอยู่บนปุ่ม return / enter ทั้งหมด": คุณไม่เคยเจอ CR (หมายถึงการย้ายหัวพิมพ์ดีดไปที่ด้านหน้าของบรรทัด) / LF (หมายถึงการหมุนลูกกลิ้ง ไปยังบรรทัดถัดไป) เป็นปัญหา?
Max Nanasy

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

4

เห็นได้ชัดว่าคุณต้องการวิธีการรวมกัน

หากคุณกำลังแชร์รหัสกับนักพัฒนาคนอื่นคุณต้องสร้างมาตรฐานและเนื่องจากเป็นไปไม่ได้ (koff koff) คุณต้องทำให้ทุกคนมีช่องว่างสี่ช่อง

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


4

ทำไมบางคนไม่สามารถใช้สิ่งนี้:

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

ทุกคนมีความสุขเมื่อเห็นรูปแบบของตนเอง

นั่นเป็นเรื่องยากไหม


2
เนื่องจากฉันไม่มีเวลาเพียงพอที่จะแก้ไขบรรณาธิการและ IDE ที่มีอยู่ทั้งหมดที่ผู้คนใช้และแม้ว่าฉันจะเชื่อว่าทุกคนในการอัพเกรดจะยิ่งยากขึ้น
Peter Boughton

ฉันแน่ใจว่าพวกเขาสามารถสร้างมันใน SVN หรือหาวิธีอื่น ๆ ในการปล่อยเครื่องมือขั้นสุดท้ายออกมา
อดอล์ฟกระเทียม

13
ฟังดูคล้ายกับแท็บ ผู้พัฒนาแต่ละคนเปิดไฟล์และรับความกว้างของการเยื้องที่ต้องการ
rmac

1
คุณสามารถตั้งค่า RCS หรือ CVS ให้ใช้indentโปรแกรมได้แล้ว
Jé Queue

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

3

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

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


4
ฉันใช้แท็บ ฉันไม่รู้ว่าคุณได้เขียนโปรแกรม Python หรือไม่ แต่เป็นการเยื้องสัมพัทธ์ที่สำคัญ หากบรรทัดที่ 1 คือ x การเยื้องในและบรรทัดที่ 2 คือ x + 1 การเยื้องในก็ถือว่ามีการเยื้องมากขึ้น เยื้องอาจเป็นช่องว่างสองครั้งช่องว่าง 4 แท็บไม่สำคัญตราบใดที่คุณสอดคล้องกัน
Macha

@Macha - ขอบคุณสำหรับคำติชม ฉันไม่เคยทำงานพัฒนา Python มาก่อน แต่ใครที่เคยบอกฉันว่าพวกเขาใช้ช่องว่างดังนั้นมันจึงเป็นเรื่องที่น่าสนใจที่จะพบคนที่ใช้แท็บ
Noah Goodrich

3
ฉันใช้แท็บกับหลามที่ทำงาน มันน่ากลัว.
rhettg

3

ฉันเป็นคนประเภทอวกาศ 4 คนแท็บก็ไม่สอดคล้องกัน


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

3

เห็นได้ชัดว่าแท็บสับสนใน Delphi ดังนั้นฉันจึงไม่ใช้แท็บใน Delphi

อย่างไรก็ตามฉันทำทุกอย่างอื่นโดยใช้ Emacs และใช้แท็บเสมอเพราะแท็บของฉันไปในที่ที่ฉันต้องการ


คุณสามารถให้ตัวอย่างนี้ ฉันอยากรู้อยากเห็นอย่างจริงใจเพราะฉันใช้ Delphi เป็นเวลา 15 ปีและไม่เคยเห็นสิ่งนี้
GrandmasterB

1
edn.embarcadero.com/article/10280#4.3นั่นเป็นเพียงคู่มือสไตล์ แต่เรามีข้อผิดพลาดแปลก ๆ ที่ฉันไม่สามารถอธิบายได้เพราะแท็บ อาจเป็นเพราะ Visual Source Safe ฉันไม่สามารถอธิบายได้มันเป็นเพียงส่วนหนึ่งของตำนานของ บริษัท ของเรา
Peter Turner

1
ปัญหาคือว่าค่าเริ่มต้นการติดตั้งสำหรับ (อย่างน้อย) บางรุ่นของ Delphi ไม่ตรงกับสำนวน Delphi ปกติ ดังนั้นคุณจะจบลงด้วยรหัสที่มีทั้ง
เจอร์รี่

3

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

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

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

ป้อนคำอธิบายรูปภาพที่นี่

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

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

ป้อนคำอธิบายรูปภาพที่นี่

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

ป้อนคำอธิบายรูปภาพที่นี่

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

สรุป

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

การเปิดเผยข้อมูล **: XSLT Editor พร้อมการจัดรูปแบบเสมือนได้รับการพัฒนาโดย บริษัท ของฉัน *


1
น่าเศร้าที่คุณอาจจะประมาณ 50 ปีก่อนเวลา ความคิดที่ไร้สาระตรงไปตรงมาว่าโปรแกรมต่าง ๆ เป็นลำดับของตัวละครยังคงให้ความสนใจอย่างมากในจิตใจของโปรแกรมเมอร์ส่วนใหญ่
Tom Anderson

3

ยังไม่ได้กล่าวถึงจนถึงขณะนี้: มีหลายภาษา (Python, Haskell) ที่มีการเยื้อง แต่อักขระ 1 ตัวจะนับเป็น 1 ตัวอักษรไม่ว่าจะเป็นช่องว่างหรือแท็บดังนั้นการเยื้องที่เห็นโดยคอมไพเลอร์อาจไม่เหมือนกับที่คุณเห็นบนหน้าจอหากคุณใช้แท็บ

ดังนั้นในภาษาเช่น Haskell ต้องเว้นวรรค ใน Makefiles ต้องมี TABS ในคนอื่น ๆ ทุกคนมันเป็นเรื่องของรสนิยมส่วนตัวและทุกวันนี้ไม่ใช่เรื่องใหญ่อะไรนักแก้ไขที่ดีทุกคนมีคำสั่ง "แท็บ (นำหน้า) ไปยังช่องว่าง" และ "(นำหน้า) ช่องว่างไปยังแท็บ"


2

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

การตั้งค่าขนาดแท็บที่แสดงเป็น 3 หรือ 5 ตัวอักษรใน IDE ของคุณช่วยให้แยกแยะความแตกต่างระหว่างส่วนของรหัสที่เยื้องลงในช่องว่างได้ง่าย (เกือบตลอด 4 วันเหล่านี้) และส่วนที่เยื้องโดยแท็บ


1

มีการถกเถียงกันมากมายแล้ว แต่ก็ไม่มีใครพูดถึงว่าเราจะไปอยู่ตรงไหนในอนาคต

แท็บหรือช่องว่าง!

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

ความคิดนี้ไม่ได้ลึกซึ้งเกินไป มันเป็นตัวแก้ไขการเขียนโปรแกรมเชิงภาษาของ JetBrain Meta Programming System (MPS)ซึ่งทำให้ฉันรู้ว่าสิ่งนี้ช่วยแก้ไขการสนทนาทั้งหมดพร้อม ๆ กันเพิ่มความเป็นไปได้พิเศษมากมาย (ใช่สิ่งนี้เป็นไปได้ด้วยปลั๊กอินตัวแก้ไข แต่การทำงานกับข้อความจะเพิ่มความซับซ้อนที่ไม่จำเป็นจำนวนมากโดยตรงเมื่อเทียบกับวิธีที่ MPS ใช้)

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

ฉันชอบที่จะเห็นหนึ่งในผู้เล่นที่ยิ่งใหญ่กระโดดแนวคิดของเทคโนโลยีนี้และดูว่าเกิดอะไรขึ้น!


0

ไม่ดีกว่าหรือแย่กว่า สิ่งสำคัญเพียงอย่างเดียวคือต้องสอดคล้องกัน

หากคุณเป็นทีมหนึ่งให้เลือกสิ่งที่คุณชอบเป็นการส่วนตัว พิจารณาสิ่งที่พฤติกรรมเริ่มต้นของการแก้ไขที่คุณชื่นชอบ แต่เลือกสิ่งที่คุณต้องการ

ถ้าคุณอยู่ในทีมทำในสิ่งที่ทีมทำ ระยะเวลา

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

สิ่งเดียวที่จะทำให้แน่ใจว่าคุณเลือกโปรแกรมแก้ไขอัจฉริยะ Emacs หรือ vi? ตอนนี้ที่สงครามศักดิ์สิทธิ์ฉันยินดีที่จะต่อสู้ :-)

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