โปรแกรมเมอร์ Python พบปัญหาช่องว่างไม่สะดวกหรือไม่? [ปิด]


11

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

แน่นอนว่าฉันไม่ได้พบโปรแกรมเมอร์ Python มากมายเพราะฉันได้ใช้เวลาทำงานในโลก Java

ดังนั้นคำถามของฉันสำหรับพวกคุณที่เข้าร่วมในโครงการ Python ขนาดใหญ่ (มากกว่า 3 เดือนโดยที่ Python เป็นภาษาหลักที่ใช้): คุณพบปัญหาช่องว่างที่ไม่สะดวกและน่ารำคาญอย่างต่อเนื่องหรือไม่ หรือมันไม่ใช่ปัญหาเมื่อคุณได้รับกระแส?

ฉันไม่ได้ถามคำถามเพราะฉันเพื่อหรือต่อต้านหลามหรือเพื่อหรือต่อต้านการใช้ช่องว่าง ฉันชอบ Python แต่ฉันไม่เคยใช้มันเพื่ออะไรที่ยิ่งใหญ่

โปรดอย่าให้การคาดเดาหากคุณไม่ได้ใช้ Python


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

ตั้งแต่เมื่อช่องว่างเป็นปัญหา? :-)
Kugel

22
เราพบว่าไม่สะดวกที่คนอื่นจะนำมาต่อ เราไม่เคยคิดถึงมัน
Winston Ewert

ปัญหาของช่องว่างไม่ต่างจากปีที่ผ่านมา - OCCAM2 มีพื้นที่สีขาวอย่างมีนัยสำคัญ มันไม่ใช่เรื่องใหญ่
quick_now

4
ครั้งเดียวที่ฉันเคยพบว่ามันน่ารำคาญคือเมื่อโค้ดการคัดลอกวางจากออนไลน์ซึ่งเขียนโดยใช้ช่องว่างแทนแท็บ (หรือกลับกัน) ทำให้เกิดข้อผิดพลาดทางไวยากรณ์ที่มองไม่เห็นอย่างแท้จริง
Cameron

คำตอบ:


14

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

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

         }
      }
   }
}

1
ในเครื่องมือแก้ไขที่สมเหตุสมผลที่พูดถึง Python มีวิธีง่าย ๆ ในการใส่รหัสบล็อกอีกครั้ง ใน Wing IDE ฉันเพียงเลือกบล็อกแล้วกด Tab (หรือ Shift-Tab เพื่อลดระดับการเยื้อง)
Adam Crossland

1
ใช่ใน Emacs ฉันเลือกบล็อกและตีหรือC-c > C-c <คุณยังต้องทำด้วยตัวเอง หากต้องการกล่าวอีกวิธีหนึ่งเนื่องจากช่องว่างและโค้ดลอจิกไม่ได้ซ้ำซ้อนคุณไม่สามารถเลือกบล็อกขนาดใหญ่และการโทรM-x indent-region(หรือเวอร์ชันของเครื่องมือแก้ไข) เพื่อเยื้องมันทั้งหมด "ถูกต้อง"
dfan

6
@ อดัมโปรแกรมแก้ไขที่ดีทำให้การเปลี่ยนระดับการเยื้องของคุณง่ายขึ้น แต่ในภาษาที่ใช้วงเล็บปีกกาคุณสามารถวางรหัสใหม่ในและกดแป้นการกดแป้นที่คุณชื่นชอบเพื่อรวมไฟล์อีกครั้ง Tada! การเยื้องนั้นถูกต้อง ในไพ ธ อนคุณต้องวางเลือกเยื้อง / อุทิศ มันไม่มาก แต่มีชัยชนะเล็กน้อยที่นี่สำหรับการจัดฟัน
Winston Ewert

@ Winston - ต้องเป็นบรรณาธิการของคุณ หากรหัสที่คุณวางอยู่ในตัวเองถูกเยื้องอย่างถูกต้องแล้วถ้ามันออกมาไม่กี่ระดับไปทางขวา / ซ้ายมากเกินไปมันเป็นเพียงเรื่องของการพิมพ์แท็บ (SHIFT +) เพื่อจัดเรียงตามลำดับ - ไม่ใช่ความแตกต่างจริง ๆ ใส่ไฟล์อีกครั้ง นอกจากนี้ - เจ้าจะไม่คัดลอก / วางรหัส :)
Ingo

1
@ Winston: แม้กระทั่งแผ่นจดบันทึก + + + เยื้องบล็อกเมื่อใช้ Tab และ Shift-Tab ฉันยังไม่ได้พบเสียงเรียกเข้าสั้น ๆ แต่ฉันใช้ไม่พอฉันเดาว่า: p
Matthieu M.

50

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


8
+1 สำหรับอย่าทำซ้ำตัวเอง แนวปฏิบัติที่ดีคือการเยื้องโค้ดเพื่อสะท้อนโครงสร้างบล็อกอยู่แล้วเหตุใดจึงมีเครื่องหมายเริ่มต้น / สิ้นสุดเช่นกัน
Steve314

12

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

(ฉันชอบช่องว่างที่สำคัญใน Haskell ด้วยเช่นกัน)


1
ฉันจะได้แบ่งปันประสบการณ์เชิงบวกของฉันกับ Haskell whitespace ด้วย แต่ FarmBoy ยืนยันว่าต้องมีประสบการณ์ 3 เดือนกับ Python สิ่งอื่นคือการเก็งกำไร :-)
Ingo

1
ประสบการณ์ของฉันกับ Python ตั้งแต่ปีพ. ศ. 2541 ดังนั้นคำตอบของฉันอาจมีคุณสมบัติ :) (น่าเสียดายที่ประสบการณ์ของฉันกับ Haskell สั้นกว่ามาก)
9000

@ 9000 แม้ว่า Haskell จะมาก่อน Python! : D
pradyunsg

8

เมื่อฉันใช้ python ครั้งแรกสิ่งที่เป็นช่องว่างใหม่และเป็นข้อ จำกัด ที่น่ารำคาญ

ตอนนี้ฉันไม่เห็นด้วยซ้ำ ฉันใช้ python มา 11 เดือนแล้ว


5

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

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


การบอกบรรณาธิการของคุณให้เน้นแถบไฮไลต์แท็บเป็นข้อผิดพลาดสามารถช่วยได้มาก - สำหรับเสียงเรียกเข้าที่ฉันใช้highlight link RedundantSpaces Error | au BufEnter,BufRead * match RedundantSpaces "\t" | au BufEnter,BufRead * match RedundantSpaces "[[:space:]]\+$"ใน vimrc ของฉัน
Daenyth

4

หากโปรแกรมเมอร์รู้สึกรำคาญกับความสำคัญของพื้นที่สีขาวเขาอาจจะไม่กลายเป็นโปรแกรมเมอร์ไพ ธ อน


1
ฉันได้ยินว่ามีคนไม่กี่คนที่สั่งสอนงูเหลือมที่บอกว่าพวกเขามีปัญหากับ The Whitespace Thing (tm) แต่กลับมาชอบมันอีกซักพัก จากการสังเกตของฉันดูเหมือนว่าเมื่อผู้คนจำนวนมากเข้าร่วมการสนทนาในหัวข้อนี้ความสามารถของพวกเขาคนหนึ่งที่เล่าเรื่องดังกล่าวเข้าใกล้ (แก้ไข: พิสูจน์โดยทันทีด้วยคำตอบที่สอง ... )

@delnan ฉันสามารถสมัครสมาชิกนี้
Ingo

3

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

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


3

สำหรับการเข้ารหัสที่เกิดขึ้นจริงมันไม่สะดวกเลย แต่เป็นประโยชน์จริง ๆ (ดูคำตอบของ dsimcha)

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


2

ฉันไม่พบช่องว่างที่น่ารำคาญ ฉันพบว่าไม่มีภาษาเยื้องหรือเยื้องที่น่ารำคาญในภาษาอื่น ฉันเข้าใจว่าปัญหานี้เป็นหนึ่งในปัญหาที่สไตล์มีไว้เพื่อแก้ไข

Python ไม่ใช่ภาษาหลักของฉัน

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


1
การผสมแท็บและช่องว่างในการเยื้องของไพ ธ อนเป็นเส้นทางที่สั้นที่สุดสู่นรก: p
Matthieu M.

@Mattieu: แน่นอนว่าเป็นเรื่องน่ารำคาญของฉัน
BillThor

1

ฉันมาจากพื้นหลัง C # / Javascript / XBase ตามลำดับโดยเฉพาะอย่างยิ่งและใน dabblings ของฉันกับ Python มันไม่ได้เป็นข้อพิจารณาสำหรับฉันเลย มันเหมือนกับเครื่องหมายปีกกาในภาษาอื่น ๆ - นั่นคือวิธีการทำงานใส่สิ่งต่าง ๆ ในแบบที่กฎพูดและดวงตาของคุณแห้งคือทัศนคติของฉัน

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