2012-11-21 23 views
14

Tôi thực sự thích các tiêu chuẩn phong cách sau, như được chỉ định trong PEP 8. Tôi có một linter tự động kiểm tra, và chắc chắn mã của tôi tốt hơn nhiều vì điều đó.Căn chỉnh của bài tập (kiểu)

Chỉ có một điểm trong PEP 8, E251 & E221 không cảm thấy rất tốt. Đến từ nền JavaScript, tôi đã sử dụng để căn chỉnh các bài tập biến như sau:

var var1  = 1234; 
    var2  = 54; 
    longer_name = 'hi'; 

var lol = { 
    'that'  : 65, 
    'those'  : 87, 
    'other_thing' : true 
}; 

Và theo ý kiến ​​khiêm tốn của tôi, điều này cải thiện khả năng đọc đáng kể. Vấn đề là, đây là dis-khuyến cáo của PEP 8. Với bộ từ điển, mà không phải là xấu vì không gian được phép sau dấu hai chấm:

dictionary = { 
    'something':  98, 
    'some_other_thing': False 
} 

tôi có thể "sống" với các bài tập biến mà không cần sự liên kết, nhưng những gì tôi don' t như ở tất cả không phải là để có thể vượt qua đối số tên trong một cuộc gọi chức năng, như thế này:

some_func(length=  40, 
      weight=  900, 
      lol=   'troll', 
      useless_var= True, 
      intelligence=None) 

vì vậy, những gì tôi sẽ chỉ làm được bằng cách sử dụng từ điển, như sau:

specs = { 
    'length':  40, 
    'weight':  900, 
    'lol':   'troll', 
    'useless_var': True, 
    'intelligence': None 
} 

some_func(**specs) 

hoặc chỉ si mply

some_func(**{'length':  40, 
      'weight':  900, 
      'lol':   'troll', 
      'useless_var': True, 
      'intelligence': None}) 

Nhưng tôi cảm thấy công việc này chỉ tồi tệ hơn là bỏ qua PEP 8 E251/E221.

Phương pháp hay nhất là gì?

EDIT nhiều năm sau

Đừng sắp xếp. Sớm hay muộn một biến mới dài hơn sẽ đến và bạn sẽ phải nhấn phím dài ở đây và ở đó một lúc cho đến khi mọi thứ trở lại tốt đẹp. Không đáng.

+11

Cách tốt nhất là tuân theo PEP 8. Được sử dụng để không căn chỉnh toán tử gán và giá trị từ điển. Ý kiến ​​khiêm tốn của bạn có thể dễ dàng thay đổi nếu phải làm việc với nó mỗi ngày. – delnan

+0

Bạn thậm chí có thể chuyển đối số theo tên trong Javascript không? Vậy tại sao bạn lại làm điều kinh khủng này? – jadkik94

+0

Trong JS là một thực hành tốt để vượt qua một đối tượng thông số kỹ thuật thay vì 15 đối số đã ra lệnh. Douglas Crockford dixit, và tôi hoàn toàn đồng ý. – bgusach

Trả lời

13

Thực tiễn tốt nhất là chủ quan, nhưng thực tiễn phổ biến nhất là gắn với PEP8.

Tôi chắc chắn không khuyên bạn nên tạo từ điển mỗi lần bạn muốn gọi hàm có đối số được đặt tên. Đó là khá lãng phí. Tôi không thấy lý do tại sao cuộc gọi some_func gốc của bạn sẽ không hoạt động. Tôi chắc chắn phá vỡ các lời gọi hàm của tôi thành các dòng nếu chúng quá dài và khó sử dụng. Nhưng tôi không sắp xếp chúng. Tôi tưởng tượng rằng lý do cho đề xuất là bởi vì nó có thể là một nỗi đau lớn để duy trì tất cả các khoảng cách một cách chính xác theo thời gian, và sự đồng thuận là khả năng duy trì sự tăng lên trong sự đẹp đẽ.

Nếu bạn đang làm việc trên mã của riêng mình, hãy căn chỉnh, ai quan tâm? PEP8 là một hướng dẫn, không phải là luật.

+1

Bạn đang ở một số điểm, nhưng ... may mắn thay IDE của tôi tự động căn chỉnh dựa trên một ký tự đặc biệt ":", "=" vv. Không mất chút thời gian nào để giữ nó "đẹp". Đối với tôi bảo trì cũng là về đọc nhanh và thoải mái. – bgusach

+0

Vì vậy, sau đó thay đổi cài đặt IDE của bạn, hoặc tiếp tục căn chỉnh. Có vẻ như một chiến thắng-thắng với tôi :) – acjay

+0

Câu trả lời hay nhất. Miễn là tôi mã một mình, tôi sẽ hơi thay đổi các tiêu chuẩn để (chủ quan) tăng cường khả năng đọc :) – bgusach

2

Vì vậy, những gì tôi sẽ chỉ làm được bằng cách sử dụng từ điển, như sau:

specs = { 
    length:  40, 
    weight:  900, 
    lol:   'troll', 
    useless_var: True, 
    intelligence:None 
} 

IMHO - đây là ít có thể đọc được (là nó cú pháp hợp lệ mà không trích dẫn các phím), và nếu tôi xảy ra để muốn thêm some_longer_named_varible, tôi thực sự không chắc chắn nếu tôi muốn muck về tái khoảng cách tất cả mọi thứ khác.

Tôi nghĩ bạn nên cắn đạn mà tôi sợ.

+0

Tôi vừa sửa lỗi đánh máy của các giá trị khóa. Đó là sự thật rằng nếu một số tên var là rất dài, liên kết có thể làm cho nó loại khó hiểu. Trong những trường hợp hiếm hoi đó, tôi chỉ tuyên bố tên dài đó ở vị trí cuối cùng và không có sự liên kết. Nhưng đối với tôi, khả năng đọc được tăng cường trong hầu hết các trường hợp, mắt biết nơi để xem xét. – bgusach

+0

Tôi thích xếp các bài tập có độ dài hợp lý, nhưng tôi sẽ không bận tâm với những khoảng không gian xấu xí lớn để chứa một người dài. Chủ yếu xếp hàng là tốt hơn so với một mớ hỗn độn lộn xộn. Và nếu một vài giây thêm ở đây và ở đó trong những giờ là giá của sự hài lòng và mã đẹp, đó là một mức giá tôi sẵn sàng trả hơn. –

1

Tôi khuyên bạn nên gắn bó với PEP8.Điều gì sẽ xảy ra nếu bạn cần thay đổi tên của một trong các biến của bạn? Một công cụ refactoring tự động sẽ thay đổi điều này:

var1  = 1234 
var2  = 54 
longer_name = 'hi' 

này:

var1  = 1234 
var2  = 54 
even_longer_name = 'hi' # not aligned any more! 

Bạn sẽ kết thúc làm nhiều việc cho chính mình để giữ cho mọi thứ thẳng hàng.

+1

Trình soạn thảo tôi sử dụng để viết mã căn chỉnh tự động mã với một phím tắt đơn giản. Vì vậy, nó không phải là vấn đề lớn. Vấn đề duy nhất đi kèm với các biến quá dài, nhưng trong những trường hợp đó, tôi chỉ không căn chỉnh nhiệm vụ đó và nếu có thể, hãy đặt nó ở vị trí cuối cùng. – bgusach

+0

@ ikaros45: điểm mấu chốt là nó là lựa chọn cá nhân. Nếu bạn là người duy nhất đọc mã của bạn, hãy làm bất cứ điều gì bạn thích nhất và không cảm thấy bị ràng buộc bởi các hướng dẫn phong cách như PEP8. Ngược lại, nếu bạn đang viết mã như là một phần của một đội, điều quan trọng là phải gắn bó với bất kỳ hướng dẫn phong cách nào mà nhóm đã đồng ý, vì vậy bạn không phải bực mình với những ai phải đọc mã của bạn. –

+0

Nếu bạn muốn ý kiến ​​của tôi, tôi thích phong cách không liên kết, như PEP8 đề xuất. Tôi thấy con mắt có xu hướng bị mất đi từ một phía của khoảng trống đó đến khoảng trắng. Giống như khi bạn đọc trang nội dung của một cuốn sách có tiêu đề chương được tách biệt với số trang. –

Các vấn đề liên quan