Đối với lập trình Python và là Pythonic, tại sao không bao giờ thường tốt hơn * ngay * ngay bây giờ? [đóng cửa]


8

Trong Zen of Python, tôi có thể hiểu hầu hết các phần của nó, ngoại trừ:

Now is better than never.  
Although never is often better than *right* now

Vì vậy, tôi nghĩ rằng làm nó bây giờ hoặc nhận được kết quả bây giờ tốt hơn là không bao giờ. Nhưng tại sao "không bao giờ thường tốt hơn * ngay * bây giờ"? Hay nó có nghĩa là gì?

Để xem 2 dòng trên trong ngữ cảnh, đây là toàn bộ Zen của Python:

The Zen of Python, by Tim Peters

Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren't special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one-- and preferably only one --obvious way to do it.
Although that way may not be obvious at first unless you're Dutch.
Now is better than never.
Although never is often better than *right* now.
If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea -- let's do more of those!

Câu trả lời:


12

Phần đầu tiên, "bây giờ tốt hơn bao giờ hết", là một câu thần chú chống lại sự trì hoãn. Nó thể hiện ý tưởng rằng, nếu bạn không tiếp tục với nó, bạn sẽ không bao giờ có được nó.

Phần thứ hai, "không bao giờ thường tốt hơn bây giờ , là một biểu hiện của nguyên tắc YAGNI . Ý tưởng là bạn nên" Luôn thực hiện mọi thứ khi bạn thực sự cần chúng, không bao giờ khi bạn thấy trước rằng bạn cần chúng ", bởi vì bạn thường thấy rằng bạn không cần chúng sau tất cả, và sau đó khám phá ra rằng bạn vừa lãng phí công sức.

... Tốt, đó là sự hiểu biết của tôi. Nhưng bạn phải yêu cầu tác giả chắc chắn.


2
Có một câu trích dẫn từ Chuck Moore mà tôi cảm thấy thể hiện tình cảm này một cách độc đáo: Không được đặt mã trong chương trình của bạn có thể được sử dụng. Đừng để móc trên đó bạn có thể treo tiện ích mở rộng. Những điều bạn có thể muốn làm là vô hạn; điều đó có nghĩa là mỗi cái có 0 xác suất nhận ra. Nếu bạn cần một tiện ích mở rộng sau này, bạn có thể mã hóa nó sau này và có thể thực hiện công việc tốt hơn so với việc bạn làm ngay bây giờ. Và nếu người khác thêm tiện ích mở rộng, anh ta có để ý những cái móc bạn để lại không? Bạn sẽ ghi lại khía cạnh này của chương trình của bạn chứ?
Jon Purdy

2

Nó có thể là về đánh giá lười biếng.

Ví dụ:

xrange(1000000)

đấu với

range(1000000) 

Trường hợp đầu tiên không làm được gì nhiều cho đến khi các giá trị là cần thiết nhưng sau đó phân bổ một mảng lớn.

Hoặc đăng nhập

log("Stuff happened for %s ",  something)

đấu với

log("Stuff happened for %s " % something)

Trường hợp đầu tiên không tạo chuỗi trừ khi đăng nhập thực sự được kích hoạt.


1

Tôi nghĩ, những điều này áp dụng cho chính quá trình thiết kế ngôn ngữ, không chỉ các ứng dụng. "Bây giờ tốt hơn bao giờ hết." và "Mặc dù không bao giờ thường tốt hơn là ngay bây giờ." là về việc tìm kiếm sự cân bằng phù hợp với thời gian và chất lượng thực hiện. Điều đó cũng tương tự với phần còn lại của Zen. Và, tất nhiên, Zen không có một ý nghĩa duy nhất, theo thiết kế.


1
vâng, tôi đã nhìn thấy nó và thấy rằng nó giống như một Âm và Dương: Âm tốt hơn Dương và Dương tốt hơn Âm? Nó có thể chỉ là sự cân bằng đúng.
cực tính

1

Bây giờ tốt hơn bao giờ hết.
Mặc dù không bao giờ thường tốt hơn là ngay tại

Tôi nghĩ rằng dòng đầu tiên đề cập đến một sự pha trộn của chủ nghĩa hoàn hảo và sự trì hoãn. Bây giờ tốt hơn là cung cấp một cái gì đó hoạt động, ngay cả khi chức năng là cơ bản hoặc mã "chưa hoàn hảo", hơn là làm việc với nó mãi mãi cho đến khi bạn hết hơi và mã cuối cùng đã chết.

Đối với dòng thứ hai, tôi nghĩ rằng nó nhắm mục tiêu thực hiện vội vàng. Thông thường, những thứ bạn viết mã có tác động rất lâu dài một khi được phát hành. Đôi khi, người ta có thể bị cám dỗ để nhanh chóng đưa ra một cái gì đó, đặc biệt là do áp lực, sẽ biến thành gánh nặng cho những năm sau đó. Nó được gọi là "nợ kỹ thuật": các quyết định thiết kế kém, giao diện xấu hoặc chỉ là các công trình kém dẫn đến nhiều rắc rối. Mã hiếm khi một mình, rất nhiều mã khác nhanh chóng được xây dựng dựa trên nó và nếu bạn đưa ra một quyết định tồi tệ, bạn sẽ bị mắc kẹt với nó. Do đó, đừng vội phát hành, hãy đảm bảo đó là thứ tốt.

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.