动态类型静态类型的优缺点--《松本行弘的程序世界》

原创 2012年05月08日 18:51:54

偶然今天看到了《松本行弘的程序世界》一书,作者对静态类型和动态类型的优缺点做了详细的解释:

静态类型的优点:

        1, IDE聪明的提示,因为静态类型的语言的类型是确定的,所以编辑器可以知道当前的变量有哪些属性和方法。

        2, 编译的时候能够发现类型不匹配的错误,而动态语言至多只能发现语法错误。

        3, 我们在开发过程中明确了某些变量在程序中扮演了什么角色,这是开发可靠性高的程序所必须的。

静态类型的确定:

        1, 因为要定义数据类型,程序的规模也变得很大,编程应该考虑程序的本质,而不是把精力集中于一个个数据类型的定义。

        2,  缺乏灵活性,因为一个变量,只能赋值某种类型的对象。明显当程序需要扩展的时候,这会成为枷锁,当然可以通过继承和接口实现,这会陷入另一个深渊,你总会去纠结复杂的继承关系。

 

动态类型的优点:

        1, 相反于静态类型,编程完全集中于程序的设计的本质,代码的简洁度也会提高,开发效率可能会数倍的提高。

        2, 因为程序的规模降低, 程序的可理解性也会提高。(静态类型的拥护者可能会认为,少了类型信息,程序变的不可读了。我是觉得读程序应该集中在程序的本质上)

动态类型的缺点:

        1, 程序执行速度慢,因为动态类型的语言,类型检查是在运行期做的。(随着计算机性能的提高,执行速度不是什么严重的问题了,关键是生产力提高了)

        2, 不执行就检测不出错误。(这是我说的动态类型的安全问题)

 

这是松本大师对于类型的理解。

类型安全问题: 

public class Hello {  
   public static void main(String[] args) {  
     String a = "1";  
     test(1);  
   }  
   static int test(String s) {  
    return 1;  
   }  
}  

这段java代码在编译时肯定不能通过的。而在python中:

a = lambda x: x.startswith("abc")
a(1)

这段代码只有在运行时候才能报错。这应该就是类型安全问题吧!

作者基于动态类型的灵活性举了一种编程方式的示例:duck typing,就是说编程的时候,不要关心一个对象属于什么类型,而要关心这个对象有什么行为。

看一个示例:

#!/usr/bin/env ruby  
module Duck  
  def bark  
    puts "bark"  
  end  
  def run  
    puts "run"  
  end  
end  
class ADuck  
  include Duck #ruby的混入,可以用来实现多重继承,类似于java利用接口实现多重继承功能   
end  
class BDuck  
  include Duck  
end  
def duckrun(d)  
  d.run  
end  
a = ADuck.new  
b = BDuck.new  
duckrun(a)  
duckrun(b)  

这种编程方式是不是也可以称为面向接口编程,当然可以利用java的抽象类或者接口实现。

我们再看一个示例:

 

class ADuck  
  def run  
    puts "run a"  
  end  
end  
class BDuck  
  def run  
    puts "run b"  
  end  
end  
class CDuck  
end  
def duckrun(d)  
  if not d.respond_to?("run")  
    raise TypeError, "not a duck"  
  end  
  d.run  
end  
a = ADuck.new  
b = BDuck.new  
c = CDuck.new  
duckrun(a)  
duckrun(b)  
duckrun(c)  


这次没了module,没了继承,唯一要做的就是检查对象是否有该方法(还可已在运行时为对象增加行为),避免了令人费解的继承问题。程序也拥有了更好的扩展性。

动态链接库的优缺点

介绍:DLL(Dynamic Link Library)文件为动态链接库文件,又称“应用程序拓展”,是软件文件类型。在Windows中,许多应用程序并不是一个完整的可执行文件,它们被分割成一些相对独立...
  • u010321471
  • u010321471
  • 2016年07月25日 01:11
  • 1927

Linux中静、动态函数库的优缺点

在编写程序的时候,我们经常会使用到函数库。函数库即为一个事先已经写好的函数的集合,其性能都是比较优秀并得到公众认可的。而我们在需要实现一些功能的时候,如果函数库里已经有该功能的实现函数,则我们可以直接...
  • hulifangjiayou
  • hulifangjiayou
  • 2015年09月09日 11:00
  • 731

松本行弘为什么要开发Ruby

Ruby是起源于日本的编程语言。近年来,特别是因为在Web开发方面的效率很高,Ruby引起了全世界的关注,它的应用范围也扩展到了很多企业领域。   作为一门编程语言,Ruby正在被越来越多的人所了解...
  • turingbooks
  • turingbooks
  • 2011年05月24日 10:29
  • 7565

《松本行弘的程序世界》读书笔记

1、在较大的系统中,做好集成和接口是很重要的。集成有很多方式,包括用数据库来集成,用文件来集成,用WEB SERVICE来集成等等,都是可以的 接口包括子系统内部的接口,和子系统之间的接口。凡是涉及...
  • kyfxbl
  • kyfxbl
  • 2013年09月24日 10:59
  • 641

静态链接库与动态链接库的优缺点

1 静态链接库的优点   (1) 代码装载速度快,执行速度略比动态链接库快;   (2) 只需保证在开发者的计算机中有正确的.LIB文件,在以二进制形式发布程序时不需考虑在用户的计算机上.LIB文...
  • left_la
  • left_la
  • 2013年09月27日 16:10
  • 21077

动态库与静态库优缺点比较

动态库与静态库优缺点比较 (2012-10-18 15:31)      我们在编写一个C语言程序的时候,经常会遇到好多重复或常用的部分,如果每次都重新编写固然是可以的,不过那样会大大降低工作...
  • sunshinewave
  • sunshinewave
  • 2014年09月09日 14:26
  • 36765

松本行弘的程序世界(二)

编程和面向对象的关系 颠倒的构造 1.      有一个有趣的例子,叫做“阿尔法法则”。机器是人的奴隶,还是人沦为机器的奴隶。这个我有不同于作者的观点。人机是交互的,或者说是对等的。人和计算机打交...
  • viekie
  • viekie
  • 2012年04月18日 20:18
  • 685

读书笔记《松本行弘的程序世界》

松本行弘 是 Ruby语言的作者, 我没有学习Ruby语言, 只是特别崇拜他! 类是对象的模板,相当于对象的雏形。在具有类功能的面向对象编程语言5中,对象都是由作为雏形的类来生成的,对象的性质也是...
  • u010019717
  • u010019717
  • 2017年05月03日 22:43
  • 2510

动态类型静态类型的优缺点--《松本行弘的程序世界》

偶然今天看到了《松本行弘的程序世界》一书,作者对静态类型和动态类型的优缺点做了详细的解释: 静态类型的优点:         1, IDE聪明的提示,因为静态类型的语言的类型是确定的,所以...
  • KimboQi
  • KimboQi
  • 2012年05月08日 18:51
  • 929

静态库与动态库的区别与优缺点

静态链接文件     目前以lib后缀的库有两种,一种为静态链接库(Static Libary,以下简称“静态库”),另一种为动态连接库(DLL,以下简称“动态库”)的导入库(Import Li...
  • fhb1922702569
  • fhb1922702569
  • 2016年12月12日 17:15
  • 1317
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:动态类型静态类型的优缺点--《松本行弘的程序世界》
举报原因:
原因补充:

(最多只允许输入30个字)