Các lập trình viên Python có thấy vấn đề khoảng trắng bất tiện không? [đóng cửa]


11

Nhiều lập trình viên, khi lần đầu tiên bắt gặp Python, ngay lập tức bị bỏ qua bởi tầm quan trọng của khoảng trắng. Tôi đã nghe nhiều lý do rằng điều này là bất tiện, nhưng tôi chưa bao giờ nghe một lời phàn nàn từ một lập trình viên Python.

Tất nhiên, tôi chưa gặp nhiều lập trình viên Python, vì tôi đã dành sự nghiệp của mình trong thế giới Java.

Vì vậy, câu hỏi của tôi dành cho những bạn đã tham gia vào một dự án Python lớn (hơn 3 tháng, với Python là ngôn ngữ chính được sử dụng): Bạn có thấy vấn đề về khoảng trắng là bất tiện và liên tục gây phiền nhiễu không? Hay đó không phải là vấn đề một khi bạn đã vào dòng chảy?

Tôi không đặt câu hỏi vì tôi ủng hộ hoặc chống lại Python, hoặc cho hoặc chống lại việc sử dụng khoảng trắng của nó. Tôi tình cờ thích Python, nhưng tôi chưa bao giờ sử dụng nó cho bất cứ điều gì lớn.

Vui lòng không cung cấp suy đoán nếu bạn không có kinh nghiệm về Python.


2
Họ sẽ sử dụng ngôn ngữ nếu họ đã làm? Tôi sẽ không. Yêu cầu cú pháp gây phiền nhiễu / mất tập trung là một trong những điều có thể khiến tôi chọn một ngôn ngữ khác cho một dự án (tất nhiên, giả sử rằng tôi có thể chọn).

từ khi nào khoảng trắng là một vấn đề? :-)
Kugel

22
Chúng tôi thấy bất tiện khi mọi người khác tiếp tục đưa nó lên. Chúng tôi không bao giờ nghĩ về nó.
Winston Ewert

Vấn đề về khoảng trắng không khác gì nhiều năm trước - OCCAM2 có khoảng trắng đáng kể. Đó không phải là vấn đề lớn.
quick_now

4
Lần duy nhất tôi thấy khó chịu là khi sao chép mã từ trực tuyến được viết bằng dấu cách thay vì tab (hoặc ngược lại), gây ra lỗi cú pháp vô hình theo nghĩa đen
Cameron

Câu trả lời:


14

Chỉ có một trường hợp mà tôi thấy khoảng trắng là khó chịu, và đó là khi sửa đổi mã hiện có để một khối mã phải được thụt lề nhiều hơn hoặc ít hơn trước (ví dụ: thêm hoặc xóa if:mã trước mã). Khi viết bằng ngôn ngữ như C, bạn chỉ cần thêm ifvà một cặp dấu ngoặc nhọn và (trong Emacs hoặc tôi tưởng tượng bất kỳ trình soạn thảo tốt nào) nhấn Tab để cho phép trình soạn thảo tự động sửa lỗi thụt lề. Trong Python, bạn phải tự làm điều đó. Tất nhiên, có các phím tắt trình soạn thảo để tự làm điều đó, vì vậy nó không quá tệ, nhưng việc mất đi sự dư thừa sẽ gây thêm gánh nặng cho lập trình viên.

Nhìn chung, đó là một chiến thắng, tuy nhiên, nếu chỉ để ngăn một nửa màn hình của tôi bị lấp đầy bởi các dòng như sau:

         }
      }
   }
}

1
Trong bất kỳ trình soạn thảo hợp lý nào nói được Python, có một cách rất dễ dàng để giới thiệu lại khối mã. Trong Wing IDE, tôi chỉ cần chọn khối và nhấn Tab (hoặc Shift-Tab để giảm mức thụt lề).
Adam Crossland

1
Có, trong Emacs tôi chọn khối và nhấn C-c >hoặc C-c <. Bạn vẫn phải tự làm điều đó. Nói cách khác, vì khoảng trắng và logic mã không dư thừa, bạn không thể chọn một khối khổng lồ và gọi M-x indent-region(hoặc bất cứ phiên bản nào của trình soạn thảo của bạn) để thụt lề "chính xác".
dfan

6
@Adam, một biên tập viên giỏi giúp dễ dàng thay đổi mức độ thụt lề của bạn. Nhưng trong ngôn ngữ niềng răng, bạn có thể dán mã mới vào và nhấn tổ hợp phím yêu thích của mình để giới thiệu lại tệp. Tada! Lõm là chính xác. Trong python, bạn phải dán, chọn, thụt / thụt. Nó không nhiều nhưng có một chiến thắng nhỏ ở đây cho niềng răng.
Winston Ewert

@Winston - phải là biên tập viên của bạn. Nếu mã bạn dán chính nó được thụt lề chính xác, thì nếu nó xuất hiện một vài cấp quá xa về bên phải / bên trái, thì đó chỉ là vấn đề gõ Tab (SHIFT +) để căn chỉnh cho phù hợp - không thực sự khác biệt so với việc nhấn phím để nhắc lại các tập tin. Bên cạnh đó - bạn sẽ không sao chép / dán mã :)
Ingo

1
@Winston: ngay cả các khối thụt lề Notepad ++ khi sử dụng Tab và Shift-Tab, tôi vẫn chưa tìm thấy vim rút gọn, nhưng tôi không sử dụng đủ, tôi đoán: p
Matthieu M.

50

Tôi yêu khoảng trắng đáng kể của Python. Đối với tôi đó là ví dụ hoàn hảo về DRY ở cấp độ cú pháp. Cách dễ đọc của con người để chỉ ra nơi một khối mã bắt đầu và kết thúc bằng cách thụt lề. Nếu bạn muốn mã của mình có thể đọc được, bạn phải thụt mã bất kể ngôn ngữ. Thật ngớ ngẩn khi làm cho lập trình viên chỉ định thông tin này hai lần, một lần cho trình biên dịch / trình thông dịch và một lần cho con người. Hơn nữa, việc thụt lề trong các ngôn ngữ giống như C tương tự như một nhận xét: Nó nhằm cải thiện sự dễ hiểu nhưng ý nghĩa của nó không được thực thi bởi trình biên dịch / trình thông dịch và nó có thể không đồng bộ với ý nghĩa thực sự (nơi niềng răng) rất dễ dàng, che giấu hơn là làm rõ.


8
+1 cho Đừng lặp lại chính mình. Thực hành tốt là để thụt mã để phản ánh cấu trúc khối dù sao, vậy tại sao cũng có dấu bắt đầu / kết thúc?
Steve314

12

Khoảng trắng đáng kể thực sự thuận tiện cho tôi. Nó làm cho tôi gõ ít hơn. Nó định dạng mã gọn gàng và khá rõ ràng. Do đó, nó làm cho mã dễ đọc hơn.

(Tôi cũng thích khoảng trắng đáng kể trong Haskell, vì những lý do tương tự.)


1
Tôi cũng đã chia sẻ trải nghiệm tích cực của mình với khoảng trắng Haskell, nhưng FarmBoy khẳng định rằng một người phải có 3 tháng kinh nghiệm với Python, bất cứ điều gì khác là suy đoán. :-)
Ingo

1
Trải nghiệm của tôi với Python chúng tôi từ năm 1998, vì vậy câu trả lời của tôi có thể đủ điều kiện :) (Thật tệ là trải nghiệm của tôi với Haskell ngắn hơn rất nhiều.)
9000

@ 9000 Mặc dù Haskell đã đến trước Python! : D
pradyunsg

8

Khi tôi lần đầu tiên sử dụng python, điều khoảng trắng là mới và do đó hạn chế gây phiền nhiễu.

Bây giờ tôi thậm chí không nhận thấy nó. Tôi đã sử dụng python được 11 tháng.


5

Trước hết - ngôn ngữ bánh mì và bơ của tôi là Python, SQL và Java. Tôi yêu khoảng trắng của Python - nó ít cú pháp và gõ hơn và nó buộc mọi người phải viết mã dễ đọc, được định dạng gọn gàng. OTOH, tôi ghét tính dài dòng của Java - đến mức tôi thực sự sử dụng Python để tạo ra tất cả các bản tóm tắt mà tôi phải viết bằng Java, điều này gây ấn tượng với tất cả các đồng nghiệp Java của tôi, những người ngạc nhiên về năng suất của tôi.

Mặc dù vậy, một cảnh báo lớn là khi sao chép / dán mã từ web - nó thường gây ra các không gian và tab hỗn hợp cần thêm một bước để dọn dẹp và tôi thường chỉ bắt được sau một ngoại lệ thời gian chạy.


Nói cho biên tập viên của bạn biết cú pháp làm nổi bật các tab vì lỗi có thể giúp ích rất nhiều - đối với vim tôi sử dụng highlight link RedundantSpaces Error | au BufEnter,BufRead * match RedundantSpaces "\t" | au BufEnter,BufRead * match RedundantSpaces "[[:space:]]\+$"trong vimrc của mình
Daenyth

4

Nếu một lập trình viên cảm thấy khó chịu vì tầm quan trọng của khoảng trắng thì có lẽ anh ta sẽ không trở thành lập trình viên trăn.


1
Tôi đã nghe khá nhiều người thuyết giảng Python nói rằng họ có vấn đề với The Whitespace Thing (tm) nhưng sau đó đã thích nó. Từ quan sát của tôi, dường như khi nhiều người tham gia thảo luận về chủ đề này, khả năng của một trong số họ kể một câu chuyện như vậy tiếp cận một. (Chỉnh sửa: Được chứng minh ngay lập tức bằng câu trả lời thứ hai ...)

@delnan, tôi có thể đăng ký này.
Ingo

3

Tôi cá là bạn sẽ tìm thấy sự chồng chéo đáng kể giữa những người gặp vấn đề với khoảng trắng đáng kể và những người không có kinh nghiệm với trình soạn thảo văn bản của một lập trình viên giỏi, như Emacs, xử lý hầu hết sự thụt lề mà không có sự tham gia của họ.

Trong mọi trường hợp, một khi bạn đã nội hóa Python, nó không còn là vấn đề nữa; trên thực tế, tính đồng nhất của nó và không gian nhỏ trên màn hình trở thành một lợi thế lớn cho khả năng đọc. Vì tôi đã sử dụng chủ yếu Python, tôi thấy các ngôn ngữ có nhiều dư thừa (ví dụ Java và C #) khó có thể tự kỷ luật để viết. Đặt niềng răng xung quanh mã mà thụt đầu dòng đã làm cho cấu trúc của nó rõ ràng làm đau dây thần kinh của tôi.


3

Đối với mã hóa thực tế, nó hoàn toàn không bất tiện, nhưng thực sự có lợi (xem câu trả lời của dsimcha).

Thật khó chịu khi làm việc với các công nghệ truyền thông không tôn trọng khoảng trắng hàng đầu (chẳng hạn như nhiều diễn đàn web không định hướng lập trình và cả khi nhúng mã Python vào một ngôn ngữ khác, chẳng hạn như ngôn ngữ tạo khuôn mẫu HTML), mặc dù tôi thấy điều đó như nhiều khiếm khuyết trong các công cụ loại bỏ khoảng trắng hàng đầu hơn là khiếm khuyết trong Python, đúng là các ngôn ngữ dư thừa thể hiện cấu trúc mã hai lần được trang bị tốt hơn để xử lý các môi trường phá hoại như vậy (vì bạn có thể dán mã vào trình soạn thảo và tự động reindent dựa trên các dấu cấu trúc rõ ràng, hoặc đơn giản là không quan tâm nếu mã chỉ được thực thi chứ không phải do con người đọc).


2

Tôi không tìm thấy khoảng trắng gây phiền nhiễu. Tôi thấy thiếu hoặc không nhất quán thụt vào rất khó chịu trong các ngôn ngữ khác. Tôi hiểu vấn đề này là một trong những vấn đề mà phong cách dự định giải quyết.

Python không phải là một trong những ngôn ngữ chính của tôi.

Tôi tìm thấy việc xử lý các tab và không gian thụt vào gây khó chịu đôi khi. Điều này có thể gây ra vấn đề khi chuyển đổi các biên tập viên từ chỉnh sửa này sang chỉnh sửa khác hoặc khi chỉnh sửa mã do người khác viết. Nó thường là tầm thường để giải quyết.


1
trộn các tab và không gian trong vết lõm của con trăn là con đường ngắn nhất đến địa ngục: p
Matthieu M.

@Mattieu: Chắc chắn, đó là phiền toái của tôi.
BillThor

1

Tôi đến từ nền tảng C # / Javascript / XBase không theo thứ tự cụ thể nào và trong bản tóm tắt của tôi với Python, nó hoàn toàn không phải là một sự cân nhắc đối với tôi. Nó giống như niềng răng trong các ngôn ngữ khác - đó là cách nó hoạt động, đặt những thứ như quy tắc nói, và làm khô mắt là thái độ của tôi.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.