擅长:python、mysql、java
<p>我同时使用强类型(如Java)和弱类型(如JavaScript)语言已经有一段时间了。我发现,弱类型语言的便利性对于小型应用程序非常好。不幸的是,随着应用程序规模的增长,管理变得不可能。在你的头脑中有太多的东西需要跟踪,你必须开始越来越多地依赖你的IDE和编译器,否则你的编码就会停下来。这是强类型语言开始变得更有用的时候——随着应用程序变得非常大。</p>
<p>在弱类型JavaScript中有两个经常让我抓狂的例子,它们使用的外部库没有完全文档化和重构。</p>
<p>外部库:在处理强类型语言时,库本身的代码提供自文档。当我创建一个Person类型的变量时,IDE可以检查代码并告诉它有一个getFirstName()、getLastName()和getFullName()。在弱类型语言中,情况并非如此,因为变量可以是任何东西,具有任何类型的变量或函数,并且具有也可以是任何东西的函数参数(它们没有显式定义)。因此,开发人员必须大量依赖于文档、web搜索、讨论论坛以及它们对过去用法的记忆。我发现在JavaScript中查找外部库可能需要几个小时,而在Java中,我只需按“.”键,它就会弹出我所有的选项并附带文档。当您遇到没有100%完全文档化的库时,对于弱类型语言来说可能会非常令人沮丧。我最近发现自己在问“函数‘draw’中的参数‘plot’是什么?”当使用jqplot时,它是一个相当好但没有完全文档化的JavaScript库。我不得不花一两个小时研究源代码,然后最终放弃并找到另一种解决方案。</p>
<p>重构:使用强类型语言,我发现只要更改需要更改的文件,然后修复编译器错误,就可以快速重构。有些工具甚至可以通过简单的点击按钮来重构。对于弱类型语言,您必须进行搜索,然后小心地替换,然后测试、测试、测试,然后再测试一些其他语言。你很少能完全确定你已经找到并修复了所有损坏的东西,特别是在大型应用程序中。</p>
<p>对于简单的需求和小型的应用程序,这两个关注点是最小到不存在的。但是,如果您使用的应用程序有100万千行或数百万行代码,弱类型语言会让您抓狂。</p>
<p>我认为许多开发人员对此感到不安,并把它变成一个情绪化的讨论,是因为我们有时会在头脑中明白,有一个对一个错的方法。但每一种方法都有其优点——各有利弊。一旦你意识到你把情感放在一边,为你现在所需要的选择最适合你的。</p>