不止一种方法去做一件事
不止一种方法去做一件事(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]。这鼓励用最好的方法做事,但在需要的情况下也有次要的替代方法。它的目的是让这个语言易学,尤其是易读,因为当做一件事有很多不同方法时,如果要理解现有的代码,就需要知道所有方法。