很多时候,会出现一些快速任务,但这些任务不属于您正在开发的主要软件的一部分。有时任务是一次性的,即将此文件与数据库进行比较并让我知道差异。在 Perl/Ruby/Python 中进行文本解析比在 Java 或 C# 中容易得多(部分原因是使用正则表达式要容易得多)。使用 Perl/Ruby/Python(甚至可能是 vbscript)解析文本文件可能会花费更少的时间cringe然后将其加载到数据库中,而不是创建 Java/C# 程序来执行此操作或手动执行此操作。
此外,由于大多数动态语言解析文本都很容易,因此它们非常适合代码生成。当然,您的最终项目必须使用 C#/Java/Transact SQL,但是使用代码生成器通常(但并非总是)更容易,而不是剪切和粘贴 100 次、查找错误、再剪切和粘贴 100 次。
最近工作中的一个例子是我们需要将数据从一个会计系统获取到我们的会计系统中。系统有导入格式,但旧系统有完全不同的格式(固定宽度,尽管有些东西必须匹配)。任务不是创建一个程序来一遍又一遍地迁移数据。它将数据推送到我们的系统中,然后在那里进行维护。因此,即使我们是一家 C# 和 SQL Server 商店,我还是使用 Python 将数据转换为我们的应用程序可以导入的格式。最终我使用python并不重要,重要的是数据在系统中。我的老板给我留下了深刻的印象。
我经常看到动态语言用于测试。创建一个 Python/Perl/Ruby 程序来链接到 Web 服务并向其抛出一些数据比创建等效的 Java 程序要容易得多。您还可以使用 python 来攻击命令行程序,生成大量垃圾(但仍然有效)的测试数据等......非常容易。
动态语言的另一件事是代码生成。创建 C#/C++/Java 代码。一些示例如下:
我经常看到的第一个代码生成任务是人们使用动态语言来维护系统中的常量。可以使用动态语言相当轻松地解析文本文件并使用枚举创建 Java/C# 代码,而不是手动编码一堆枚举。
SQL 是一个完全不同的球类游戏,但通常通过剪切和粘贴 100 次而不是尝试执行一个函数,您可以获得更好的性能(由于执行计划的缓存或将复杂的逻辑放入函数中,导致您逐行而不是逐行执行)一套)。事实上,使用表定义自动创建某些存储过程是非常有用的。
购买代码生成器总是更好的选择。但即使您不这样做,是花时间剪切/粘贴更有趣还是创建一次 Perl/Python/Ruby 脚本然后生成代码更有趣?如果您需要花费数小时来编写代码,但创建代码生成器的时间较少,那么即使您使用它一次也可以节省时间和金钱。如果您创建代码生成器所需的时间比手动编写一次代码所需的时间更长,但您知道必须多次更新代码,那么它可能仍然有意义。如果您需要 2 小时来编写代码,4 小时来编写生成器,但您知道您还需要另外编写 5 到 6 次等效工作的代码,这显然比创建生成器更好。
此外,有些事情使用动态语言比 Java/C#/C/C++ 更容易。特别是正则表达式浮现在脑海中。如果您开始在 Perl 中使用正则表达式并意识到它们的价值,那么您可能会突然开始使用 Java 正则表达式库(如果您以前没有这样做的话)。如果你有那么可能还有别的东西。
我将为您提供最后一个对于动态语言来说非常有用的任务示例。我的同事必须拿出一个装满文件的目录,并将它们刻录到不同的 CD 上供不同的客户使用。有几个客户,但有很多文件,你必须查看它们才能知道它们是什么。他手工完成了这项任务……Java/C# 程序本来可以节省时间,但对于一次来说,考虑到所有的开发开销,这是不值得的。然而,用 Perl/Python/Ruby 组合一些东西可能是值得的。他花了几个小时来做这件事。创建 Python 脚本来检查每个文件、匹配其发送给哪个客户,然后将文件移动到适当的位置将花费不到一个时间......同样,这不是标准工作的一部分。但这项任务是一次性的。是自己做更好,还是花更多的时间让 Java/C# 完成任务,或者花更少的时间在 Python/Perl/Ruby 中完成?如果您使用的是 C 或 C++,则由于 C 或 C++ 编程的额外问题(指针、无数组边界检查等),这一点甚至更加引人注目。