- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我是 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/
我目前正在尝试编写一个函数,它将一个新元素添加到列表顶部,并将列表的其余部分推回...任何人都可以帮助我吗?当我尝试编译和运行我的程序时,它不起作用。它无限循环。有什么帮助吗? #include #
我有时在程序中使用表情符号来突出显示代码的某些部分(在开源库中)。每个脚本我很少使用超过 5-6 个,而且我发现它们在文本编辑器中的颜色确实很突出。 通常,它们是 transient 标记,并且会在与
假设我有一个像这样的(有点人为的组件) const ExampleComponent = (props) => { const renderList = () => {
谁能告诉我在 WPF 中使用命令与事件的优点是什么?命令或事件是否会遇到内存泄漏?什么是最快的方法。它们的缺点是什么? 最佳答案 与事件处理程序相比,命令具有两个主要优点: 命令未链接到调用者,所以相
我应该使用什么?或者是否有特殊场合我应该使用其中一种而不是另一种? 最佳答案 对于更高维度,K 图不一定失败。问题在于,对五个以上的变量进行可视化非常困难。 4 变量 K 图是二维的并且易于可视化。第
在使用kubernetes部署我的应用程序和数据库容器时,我试图了解以下体系结构的优缺点。 背景知识:该应用程序位于Nginx代理后面。所有请求都从代理流向Web服务器。 Web服务器是唯一有权访问(
有多种脚本环境可用于 .NET 应用程序(例如 this post)。 我的问题是,使用它们各自的优缺点是什么? 示例包括(但不限于) PowerShell IronPython 路亚 JavaScr
以下是我在访问资源文件时看到的 3 个选项。由于可能存在异常(exception)情况,选项 1 可能是最不推荐的,因此问题实际上与选项 2 或选项 3 相关,即哪个是首选或推荐的实现。 选项 1 -
Effective Java - Item-2 states, a JavaBean may be in an inconsistent state partway through its const
我不希望每次旋转设备时都重新创建我的 Activity,所以我将 android:configChanges="keyboardHidden|orientation"标签放在我的 list 文件中。
关闭。这个问题是opinion-based 。目前不接受答案。 想要改进这个问题吗?更新问题,以便 editing this post 可以用事实和引文来回答它。 . 已关闭 8 年前。 Improv
我有一个工作分配方案,其中每个单元都进行一些簿记和管理,并将任务传递给订单链中的下一个单元,例如;假设有 3 个类:老板、经理、 worker class Boss { void do_asy
创建一个包含字段 A、B、C 的唯一键然后创建另一个包含字段 C、B、A 的唯一键是否有缺点,因此 MySQL 将在仅使用 A 和仅使用 A 进行搜索的情况下利用索引C? 最佳答案 您不想创建额外的复
我对 JavaScript 中的原型(prototype)设计和构造函数很陌生。我看到有人这样声明构造函数: var Person = (function(){ function Person
假设我有一个 json 数据对象,我想将其解析为我自己的对象。我遇到过两种方法。第一种是像这样使用初始化程序: class DataModelOne { let firstProperty: S
在c++中我们可以调用一个类的方法而不用实例化它。比如; MyClass mc; mc.method(); 在不实例化类的情况下使用类方法的优点和缺点是什么?我们什么时候应该使用这种类型? 最佳答案
我需要更好地了解 web 开发,尤其是 CSS 的工作原理。我从事 Web 开发已有大约 2 年了,我认为现在是时候了解如何优化我网站的性能了。我想问的事情不多。 首先: 每当我的页面上有标签内容时,
代码如下: .thumbnail { float:left; width:110px; height:90px; margin:5px; }
上下文:数据库规范化,我正在创建一个表:UserInvolvement。User 可以通过多种方式(基于角色和其他方式)参与另一个实体:Foo。在当前情况下,每种类型的参与都作为单独的列添加到 Foo
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我是一名优秀的程序员,十分优秀!