不止一种方法去做一件事

不止一种方法去做一件事（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”）。

例如，以下3种：

if (not flaky_operation){
    die;
}

和

flaky_operation or die;

和

die unless flaky_operation;

比较这3种方式，哪一种更好。从阅读方面说，die unless flaky_operation似乎表明了这个操作很难成功，if块又需要输太多代码，而flaky_operation or die似乎说明要么全有，要么全没有。

事实上，更好的方式是一个错误时抛出异常而不是返回假的flaky_operation。但大部分Perl函数都不是这样的。另一种做法是：
flaky_operation or die "$!"; #这样die，能给出更多信息。

 和Python哲学的比较 
Python哲学有一个和TMTOWTDI相反的俗语： “应当只用一种——而且是最好的一种——明确的方式去做一件事。”（“There should be one – and preferably only one – obvious way to do it.”）。这鼓励用最好的方法做事，但在需要的情况下也有次要的替代方法。它的目的是让这个语言易学，尤其是易读，因为当做一件事有很多不同方法时，如果要理解现有的代码，就需要知道所有方法。

 参考文献 

 外部链接 
 Perl，第一个超现代的计算机语言 ，由拉里·沃尔
 WikiWikiWeb上的There Is More Than One Way To Do It

Category:软件开发哲学
Category:Perl