动态语言中隐式转换的优缺点?

时间:2011-06-22 02:52:48

标签: scripting dynamic implicit-conversion

我并不真正使用动态/脚本语言。所以我不知道缺点,好的部分等。在与某人交谈时,他提到python可以隐含地将对象转换为你想要的但是甚至不尝试。

人们似乎喜欢python。那么动态语言中的隐式转换是不是很糟糕?这不好吗? (他想要)动态语言中隐式转换的优点和缺点是什么?

2 个答案:

答案 0 :(得分:2)

优点:

  • “在大多数情况下,你的意思是什么。”
  • 它可让您半自由地将字符串视为数字,反之亦然。我在Perl中使用了一些来对数字进行字符串操作,否则会涉及一堆非显而易见的数学。

缺点:

  • 当它失败时,它往往以神秘的方式失败。例如,前导零可能会导致知道八进制数的语言出现奇怪的问题。 “00”到“07”将正常工作,但“08”和“09”将会休息。
  • 有时候,你真的想知道这种类型。示例:PHP及其在出现故障时返回false的习惯。如果strpos($a, $b)返回0,则在$ a的开头找到$ b; false表示根本找不到它。但隐式转换使0和false比较相等。 (幸运的是,PHP有===运算符来缓解这种情况。)
  • 转换需要CPU周期。它并不多,但如果你不想要隐式转换魔法,为什么要付钱?

答案 1 :(得分:0)

我喜欢在用例方面看到这一点;所以我的答案是,它真的取决于你想做什么 如果你正在编写一个Web应用程序,那么这将帮助你编写更干净的代码(代码没有很多函数和方法调用只转换类型),向下是它可能会产生一些神秘的错误,并在这种情况下(Web应用程序)写更清晰,更易理解的代码有助于降低开发和更改的成本,因此可以忽略修复这些潜在错误的成本。
但是,例如,如果您正在为安全关键硬件(例如航天飞机)编写固件,任何潜在的错误都可能耗费数百万美元以及数年和数年的时间和精力,因此在这种情况下,忍受痛苦是适当的。编写一些转换函数和方法来保护项目的整个目的。