Scripting 动态语言中隐式转换的利弊?

Scripting 动态语言中隐式转换的利弊?,scripting,dynamic,implicit-conversion,Scripting,Dynamic,Implicit Conversion,我并不真正使用动态/脚本语言。所以我不知道它的缺点、优点等等。在与某人交谈时,他提到python可以隐式地将一个对象转换为您想要的,但甚至不尝试 人们似乎喜欢python。那么,动态语言中的隐式转换是否糟糕呢?坏吗?(他想知道)在动态语言中,隐式转换的优点和缺点是什么?优点: 在大多数情况下,“你的意思是什么” 它允许您半自由地将字符串视为数字,反之亦然。我曾在Perl中使用过这一点来对数字进行字符串操作,否则将涉及一系列不明显的数学运算 缺点: 当它确实失败时,它常常以神秘的方式失败。例

我并不真正使用动态/脚本语言。所以我不知道它的缺点、优点等等。在与某人交谈时,他提到python可以隐式地将一个对象转换为您想要的,但甚至不尝试

人们似乎喜欢python。那么,动态语言中的隐式转换是否糟糕呢?坏吗?(他想知道)在动态语言中,隐式转换的优点和缺点是什么?

优点:

  • 在大多数情况下,“你的意思是什么”
  • 它允许您半自由地将字符串视为数字,反之亦然。我曾在Perl中使用过这一点来对数字进行字符串操作,否则将涉及一系列不明显的数学运算
缺点:

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

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