不止一種方法去做一件事
不止一種方法去做一件事(There's more than one way to do it,TMTOWTDI或TIMTOWTDI,發音為「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 either,TIMTOWTDIBSCINABTE,發音「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,能给出更多信息。
和Python哲學的比較
Python哲學有一個和TMTOWTDI相反的俗語: 「應當只用一種——而且是最好的一種——明確的方式去做一件事。」(「There should be one – and preferably only one – obvious way to do it.」)[3]。這鼓勵用最好的方法做事,但在需要的情況下也有次要的替代方法。它的目的是讓這個語言易學,尤其是易讀,因為當做一件事有很多不同方法時,如果要理解現有的代碼,就需要知道所有方法。
參考文獻
- ^ Can EPO (or TPF) tame TIMTOWTDI?. dev411.com. 2009-01-24.[永久失效連結]
- ^ 2.0 2.1 There Is More Than One Way To Do It. [2012-08-17]. (原始內容存檔於2006-08-28).
- ^ PEP 20 - The Zen of Python. Python.org. 2004-08-23 [2012-08-17]. (原始內容存檔於2022-02-27).