- 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/
下面我有一段代码可以在我的大多数简单程序中运行.. . 我想知道它是好是坏……以及利弊。 . win32头文件:win32.h // example of a not realated code to
了解到我们可以使用双括号初始化在 java 中初始化集合。并对其进行了一些搜索,发现由于其性能问题,不建议使用它。 private static final Set VALID_CODES = new
在 Java 中使枚举类似于类,而不是像 C/C++ 中的常量集合,有哪些优点? 最佳答案 您可以免费在编译时检查有效值。使用 public static int OPTION_ONE = 0; pu
我目前正在研究ruleML,我想知道是否有人可以给我列出一些优缺点? 谢谢 最佳答案 RuleML是语义网现有本体语言和查询系统的概括,例如OWL-DL,围绕RDF的工具集以及基于一阶逻辑的类似于Pr
每次我写某种形式的东西 let scorePopulation f population = Array.map (fun i -> f i) population 我最后问自己,我是否会写得更好
我总是从SQL专家那里听到,在SELECT语句中使用'*'符号效率不高,最好列出所有字段名称。 但是,对于将新字段添加到表然后相应地更新所有存储过程的情况下,我个人觉得效率不高。 那么使用'*'的优缺
我想知道通过将业务逻辑和数据与 Web 表单分离来分层 Web 应用程序的长期优势(如果有)。 (即表单、业务逻辑、数据不在同一个文件中,但每个都在另一个文件夹中的自己的类中,或者与其他类似的类组合)
我目前正在从事一个项目,其中分支和合并从一开始就运行得不太好。为了改变这一点,我们一直在讨论多种不同的方法。我想每个人对于如何做这类事情都有自己的哲学,所以它似乎也在这里。 我们一直在讨论的一件事是按
是 StyleCop好用,有什么优缺点? 我还下载了 StyleCop,Resharper StyleCop。 我正在使用 resharper,它有自己的编码标准,而 StyleCop 也有自己的,我
我刚刚开始学习C#,并使用Tutorials Point来完成此操作。在数组部分,我一直看到声明为 string[] sarray = { "Hello", "From", "Tutorials",
使 Java 中的枚举类似于类,而不是像 C/C++ 中那样只是常量的集合有哪些优势? 最佳答案 您可以获得有效值的免费编译时检查。使用 public static int OPTION_ONE =
您会在什么情况下使用 volatile 关键字?更重要的是:该计划如何从中受益? 根据我已经阅读和了解的内容:volatile 应该用于被不同线程访问的变量,因为它们比非 volatile 变量读取起
至少有三种众所周知的创建并发应用程序的方法: 通过锁定(.NET、Java)实现多线程和内存同步。软件事务内存 (link text) 是另一种同步方法。 异步消息传递(Erlang)。 我想了解是否
在对JCR or RDBMS进行了一些研究并阅读了其他posts之后,我仍然不确定是否将JCR over JPA用于文档管理系统,该系统必须处理不同的文档类型,非常大的文件和并发访问很多来自许多用户。
X 来自 http://drupal.org/node/953016 的帖子 Drupal 7 AJAX 系统很棒,它对表单甚至链接都非常流畅。 我无法以理智的方式解决方法是从 javascript
我的 .htaccess 中有一堆规则(子域、文件夹、用户特定的文件夹等...) 我现在正在使用这个正则表达式: ([a-z0-9A-Z]) 我正在寻找一个特定的规则,我找到了多种构建它的方法,我想知
好吧,我想这很清楚我试图对此进行推理的方向。 这些天有很多关于不变性(constness)的优点的讨论。 Java 中的并发编程一书也对此进行了很多讨论。 然而,这一切只是我所读到的。我个人没有用函数
我正在开发一个 Android 应用程序,但我遇到了一个无法以某种方式做出决定的决定。我希望有人能够阐明常见的做法以及支持它们的任何理论。 问题是这样的: 我想要一个包含图像和文本(例如表格)的项目列
是否可以使用 ≠ 而不是 !=。我知道这是一个额外的 alt 代码,我从未在项目中使用过它,但我已经对其进行了测试并且可以正常工作。除了必须 Alt +8800 之外还有什么优点/缺点吗? 编辑:我不
Visual Studio (sqlmetal) 生成的 dbml 文件带有映射到数据库表的实体。在您看来,这些类适合用作领域模型类吗?还是应该避免它们,只将它们隔离到数据访问层? 谢谢 最佳答案 在
我是一名优秀的程序员,十分优秀!