有人能告诉我什么强打字和弱打字意味着哪一个更好?

有人能告诉我什么强打字和弱打字意味着哪一个更好?

这将是理论上的答案照顾,但实践方面似乎已被忽视…

强types意味着你不能使用另一种types的variables(或者有这样的限制)。 弱键意味着你可以混合不同的types。 例如在PHP中,你可以混合使用数字和string,PHP不会抱怨,因为它是一种弱types的语言。

$message = "You are visitor number ".$count; 

如果是强types的,则必须将$ count从一个整数转换为一个string,通常使用转换:

 $message = "you are visitor number ".(string)$count; 

…或者一个function:

 $message = "you are visitor number ".strval($count); 

至于哪个更好,那是主观的。 强大的提倡者会告诉你,这将帮助你避免一些错误和/或错误,并帮助传达variables的目的等等。他们还会告诉你,弱打字的提倡者称为强types“ 不必要语言上的绒毛被常识所赋予的意义 “,或类似的东西。 作为打字弱小组的一员,我不得不说他们已经得到了我的号码,但是我也有他们的号码, 可以把它放在一个string:)

“强打字”及其相反的“弱打字”在意义上相当薄弱,部分是因为被认为是“强”的概念可以根据你的要求而变化。 例如,C被不同的作者称为“强types”和“弱types”,这实际上取决于你比较的东西。

一般来说,如果一个types系统能够expression与另外一个相同的约束,那么它应该被认为是更强的。 然而,通常两种types的系统并不具有可比性,一种可能具有另一种types的function,反之亦然。 任何关于相对优势的讨论都可以归结为个人的品味。

拥有更强大的types系统意味着编译器或运行时会报告更多的错误,这通常是一件好事,尽pipe它可能是以手动提供更多types信息为代价的,这可能被认为是不值得的。 我会声称“强打字”通常是更好的,但你必须看看成本。

认识到“强types”经常被错误地使用,而不是“静态types”甚至“显式types”也是很重要的。 “静态types”表示在编译时有types检查,“清单types”表示types是明确声明的。 清单types可能是使types系统更加强大的最着名的方法(思考Java),但是您可以通过types推断等其他方式来增加强度。

我想重申,弱打字不同于dynamic打字。

这是一篇相当出色的文章,如果你不确定强,弱,静态和dynamictypes系统之间的差异,我肯定会build议给它一个阅读。 它详细说明了这些差异比简单回答所预期的要好得多,并且有一些非常有启发性的例子。

http://en.wikipedia.org/wiki/Type_system

强types是现代编程语言中最常见的types模型。 这些语言有一个简单的function – 了解运行时的types值。 我们可以说强types语言阻止了两种或更多不同types的混合操作。 这里是Java中的一个例子:

 String foo = "Hello, world!"; Object obj = foo; String bar = (String) obj; Date baz = (Date) obj; // This line will throw an error 

前面的例子会很好地工作,直到程序碰到抛出ClassCastException的最后一行代码,因为Java是强types编程语言。

当我们谈论弱types语言时,Perl就是其中之一。 以下示例显示了Perl如何在混合两种不同types时没有任何问题。

 $a = 10; $b = "a"; $c = $a . $b; print $c; # returns 10a 

希望这个对你有帮助,

谢谢。

这篇文章是一个伟大的阅读: http : //blogs.perl.org/users/ovid/2010/08/what-to-know-before-debating-type-systems.html研究时清理了很多东西给我试图回答类似的问题,希望别人也能发现它有用。

强和弱键入:

最常见的方式types系统可能被分类为“强”或“弱”。 这是不幸的,因为这些话几乎没有意义。 在一定程度上,可以比较两种语言types非常相似的types,并指定一个具有更强的两个系统。 除此之外,这些话毫无意义。

静态和dynamictypes

这几乎是唯一具有真正意义的types系统的通用分类。 事实上,它的意义往往是低估[…]dynamic和静态types系统是两个完全不同的东西,其目标发生部分重叠。

静态types系统是编译器检查源代码并将标签(称为“types”)分配给语法片段,然后使用它们来推断关于程序行为的一些机制的机制。 dynamictypes系统是编译器生成代码以跟踪程序使用的数据types(巧合地,也称为“types”)的机制。 在这两个系统的每一个中使用“types”这个词,当然并不是真的完全是巧合; 但最好理解为具有一种弱的历史意义。 试图find一个世界观,其中“types”在两个系统中都是相同的东西,这会造成很大的混淆。 它不。

显式/隐式types:

当使用这些术语时,它们是指编译器对程序的静态types部分进行推理的程度。 所有的编程语言都有一些关于types的推理。 有些人比别人多。 ML和Haskell具有隐式types,因此不需要(或者很less,取决于使用的语言和扩展)types声明。 Java和Ada有非常明确的types,一个是不断地声明事物的types。 以上都有(比较相对于C和C ++)强静态types系统。

语言中的强/弱types与您可以轻松进行types转换有关:

例如在Python中:

 str = 5 + 'a' # would throw an error since it does not want to cast one type to the other implicitly. 

在C语言中:

 int a = 5; a = 5 + 'c'; /* is fine, because C treats 'c' as an integer in this case */ 

因此Python比C更强types(从这个angular度来看)。

可能是这可以帮助你了解强和弱打字…….

强types:通常在编译时检查variables的types。 它可以防止不匹配types之间的混合操作。

一个强types的编程语言是其中的一个:

  • 所有variables(或数据types)在编译时已知
  • 严格执行打字规则(一个string不能用于需要整数的地方)
  • 所有打字规则的例外都会导致编译时错误

弱打字:弱打字是为了尽可能延迟检查系统的types,通常是延时运行。 在这里你可以混合types而不需要显式的转换。

一种“弱types”的编程语言就是一种不强types的编程语言。

这是首选取决于你想要什么。 对于脚本和好的东西,你通常会需要弱打字,因为你想写尽可能less的代码。 在大型程序中,强大的打字可以减less编译时的错误。

弱types意味着你不指定一个variables是什么types,强types意味着你给每个variables一个严格的types。

每个人都有自己的优势,打字很弱(或经常被称为dynamic打字),更加灵活,而且程序员所需的代码更less。 另一方面,强大的打字需要开发人员做更多的工作,但是作为回报,在编译代码时会提醒你很多错误,然后再运行。 dynamictypes可能会延迟发现这些简单的问题,直到代码执行。

根据目前的任务,弱打字可能比强打字更好,反之亦然,但主要是味道。 脚本语言通常使用弱types,而大多数编译语言使用强types。

Interesting Posts