不止一種方法去做一件事

不止一種方法去做一件事There's more than one way to do itTMTOWTDITIMTOWTDI,發音為「Tim Toady」)是一條Perl俗語。這個語言本身就是用這個「不要教程式設計師如何編程」的主意設計的。這使得很容易可以寫出極度雜亂的程序,但是,根據支持者對這個俗語的理解,這也可以很容易地寫出簡潔的語句。

例子

以下3種等價。

print if 1..3 or /match/

或者更傳統的:

if(1..3 || /match/) {print}

或者甚至更詳細:

use English;
if( $INPUT_LINE_NUMBER >= 1 and $INPUT_LINE_NUMBER <= 3 or $ARG =~ m/match/ )
{ print $ARG; }

發展

這條俗語在Perl社區里被討論了很多,而且擴充成了「不止用一種方法去做一件事,但有時統一也不錯」(There's more than one way to do it, but sometimes consistency is not a bad thing eitherTIMTOWTDIBSCINABTE,發音「Tim Toady Bicarbonate」[1]

例如,以下3種:

if (not flaky_operation){
    die;
}

flaky_operation or die;

die unless flaky_operation;

比較這3種方式,哪一種更好。從閱讀方面說,die unless flaky_operation似乎表明了這個操作很難成功,if塊又需要輸太多代碼,而flaky_operation or die似乎說明要麼全有,要麼全沒有[2]

事實上,更好的方式是一個錯誤時拋出異常而不是返回假的flaky_operation。但大部分Perl函數都不是這樣的。另一種做法是:

flaky_operation or die "$!"; #这样die,能给出更多信息。

[2]

和Python哲學的比較

Python哲學有一個和TMTOWTDI相反的俗語: 「應當只用一種——而且是最好的一種——明確的方式去做一件事。」(「There should be one – and preferably only one – obvious way to do it.」)[3]。這鼓勵用最好的方法做事,但在需要的情況下也有次要的替代方法。它的目的是讓這個語言易學,尤其是易讀,因為當做一件事有很多不同方法時,如果要理解現有的代碼,就需要知道所有方法。

參考文獻

  1. ^ Can EPO (or TPF) tame TIMTOWTDI?. dev411.com. 2009-01-24. [永久失效連結]
  2. ^ 2.0 2.1 There Is More Than One Way To Do It. [2012-08-17]. (原始內容存檔於2006-08-28). 
  3. ^ PEP 20 - The Zen of Python. Python.org. 2004-08-23 [2012-08-17]. (原始內容存檔於2022-02-27). 

外部連結