php - 弱类型语言的优点(和缺点)是什么?

标签 php python c types

我是 PHP 的忠实粉丝,它显然是一种非常弱类型的语言。我意识到一些好处包括动态更改变量类型的一般独立性等。

我想知道的是缺点。你能从像 C 这样的强类型语言中得到什么,而你不能从像 PHP 这样的弱类型语言中得到什么?此外,对于类型设置(如 double($variable)),有人可能会争辩说,即使是弱类型语言也可以像强类型语言一样工作。

所以。弱型。我没有包括哪些好处?更重要的是,缺点是什么?

最佳答案

引用的静态 类型的优点是在编译时捕获了整类错误,这些错误无法到达运行时。例如,如果您有一个静态类型的类或接口(interface)作为函数参数,那么您就不会意外地传入错误类型的对象(也就是说,没有显式和不正确的转换)。

当然,这并不能阻止您传递正确类型的错误对象,或者您为它提供了正确功能但它们做了错误事情的接口(interface)实现。此外,如果你有 100% 的代码覆盖率,比如 PHP/Python/etc 的人,谁会关心你是在编译时还是在运行时捕获错误?

就个人而言,我在有静态类型的语言中度过了愉快的时光,在没有静态类型的语言中也有过愉快的时光。这很少是决定性的问题,因为我从来不需要在两种语言之间做出选择,除了它们的打字类型之外,它们是相同的,而且通常有更重要的事情需要担心。我确实发现,当我使用静态类型语言时,我故意“依赖编译器”,试图以这样一种方式编写代码,如果它有错,它就不会编译。例如,您可以通过在一个地方进行更改来执行某些重构,然后修复所有导致的编译错误,重复直到干净编译。通过多次运行完整的测试套件来做同样的事情可能不太实际。但 IDE 以其他语言自动执行相同的重构,或快速完成测试,这并非闻所未闻,因此问题是什么方便,而不是什么可能。

除了便利性和编码风格偏好之外,还有合理担忧的人是那些致力于代码正确性的正式证明的人。我无知的印象是,静态类型推导可以完成显式静态类型所做的大部分(但不是全部)工作,并且可以大大减少键盘的磨损。因此,如果静态类型迫使人们以更容易证明的方式编写代码,那么从该 POV 中很可能会有所作为。我说“如果”:我不知道,而且似乎大多数人无论如何都不会证明他们的静态类型代码。

即时更改变量类型等

我认为这是可疑的值(value)。做类似 (Python/Django) 的事情总是很诱人:

user = request.GET['username']
# do something with the string variable, "user"
user = get_object_or_404(User,user)
# do something with the User object variable, "user"

但真的,同一个名字应该用于一个函数中的不同事物吗?也许。可能不是。例如,“重用”静态类型语言中的其他事物的整数变量也没有得到大力鼓励。不必考虑简洁、描述性变量名称的愿望,可能 95% 的时间不应该压倒对明确代码的愿望...

顺便说一句,通常类型意味着会发生隐式类型转换,而类型意味着它们不会发生。根据这个定义,就算术类型而言,C 是弱类型的,所以我认为这不是你的意思。我认为人们普遍认为完整的强类型与其说是帮助,不如说是麻烦,而“完整的弱类型”(任何东西都可以转换成其他任何东西)在大多数语言中都是荒谬的。因此,问题是在您的代码变得难以理解之前,可以容忍多少隐式转换和哪些隐式转换。另请参阅,在 C++ 中,在决定是否实现转换运算符和非显式单参数构造函数方面持续存在的困难。

关于php - 弱类型语言的优点(和缺点)是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3376252/

相关文章:

c - 原因 main-C 不是 const

php - 为什么我的电子邮件没有从使用 PHP 的订单成功页面发送

php - PHP文件上传 : Validating that a file is gpx

php - Phinx 迁移 sqlite 内存 phpunit

python - 当worker抛出异常时pool.map和pool.imap_unordered之间的区别

python - 从基于 Python 包 __init__ 的导入中获取文档字符串

python - Alexa 技能 : Get user location

c - 在新窗口中从 GTKEntry 获取整数

c - 在C中初始化库外.lib的函数指针

php - mysql 结果首先显示一些产品,然后显示其余的