时慧 2009年08月11日 星期二 22:45 | 1948次浏览 | 28条评论
昨天有人回
昨天写了一篇自己对于
Python
和
Java
,
C++
的感想,木有想到,第一个回复的,竟然说没有感觉到三者有什么区别,我的神啊——据说修禅者,有三个境界,第一个境界,看山是山,看水是水;第二个境界是看山不是山,看水不是水;最高境界呢,又回到了看山还是山,看水还是水了。不知道这位兄台是不是看任何程序,都是一串
0101
在眼前闪过呢?
其实,如果说
Java
和
C++
相似,我还觉得的确如此,基本相似的语法,都是
OOP
,的确是很像。当然形似神不似罢了,细细品味
Java
后,就会发现太多不同了——方法默认虚函数,对象传递默认是引用方式,不用
delete
也不能
delete
,有反射,有完整的基本功能支持,甚至连后来从
C++
里学的模板,都是和
C++
不一样的,当时一个
Map<?>
就把我看晕了。还有什么匿名类啊,原生对设计模式的支持啊,就不说了。
但是说
Python
和这二者相似,我就觉得讶异了。
首先来说说语言的分类法吧。
第一是语法。虽说无非循环,判断等几个方式,但是语法的差异,可以让人一目了然。比如
Pascal
的
begin
,
end
,
C
语言的大括号方式,都是很明显的。
Python
的语法,和
Java
区别甚大,比如判断
block
,一个是靠缩进,一个则是靠花括号。
Python
定义方法,用
def
开始,且最后要加上:,而
Java
则是
C++
风格的。
第二是语言对类型的判断。这里有显式类型和隐式类型之分。
Java
和
C++
都是属于显式类型的,任何变量的声明,都需要标明它的类型,并且一旦声明了,就不能换。而
Python
则是隐式类型的,变量声明不需要特别声明它的类型是什么,刚才还是
i=0
,过会儿就可以
i='a'
的进行赋值了。类型的划分,还有强弱之分,具体可以看这篇令狐的博文,
http://ch-linghu.3322.org/blog/entry/180
第三是对象模型,由于
Python
是脚本语言,所以基本上是动态的,我印象里好像脚本语言大多是动态的,当然不能划等号啦!作为
C++
和
Java
,他们只能化为静态语言了。有了动态语言,就可以省去很多继承的麻烦了,某个对象要临时加个方法,直接加就
OK
了,这个
C++
和
Java
就傻了。
第四是
duck typing
。我感觉用了
duck typing
后,可以少写很多继承和接口,更加符合人类思考的方式,所谓管它黑猫白猫,能抓住老
师
鼠的就是好猫。关于
duck typing
可以自行
wiki
一下。
第五是他的执行方式。
Python
作为脚本语言,是解释执行的,而
C++
则是编译执行的,
Java
么,确实有些瓜三了,据说是两者都支持,但是基本用解释执行的,解释吧,也不是解释
Java
代码的,是解释
Java
代码编译出来的中间码
Bytecode
,真是太
BT
了。您说,这三个语言能说是相同的吗?当然,本人的意见是
——
神一样的代码,不需要编译!!!
第六是执行环境,
C++
是直接在操作系统里跑的,
Java
是在
JVM
这个虚拟机里跑的,
Python
是在解释器里跑的,运行环境都完全不一样啊。
你看看,
Python
和其他两个,从头到尾,就没有一样过,这,这,这也能算是没什么两样吗?我通常对学习
C
的同事说,你要学学
C++
或者
Java
或者
C#
,总之你要学一门面向对象的语言,这样可以开拓你的思路。等到他们学会了,我又会说,你还要学习
JavaScript
或者
Python
或者
Ruby
,总之你总要学一门动态语言,这样还是可以开拓你的思路。当然,我也有追求的,我想学学
lisp
,据说这个语言也很怪异,咔咔,可能学好之后,对于
Python
里那些函数式编程特性,更能理解深刻一些吧。
Zeuux © 2024
京ICP备05028076号
回复 陳木生 2009年08月15日 星期六 20:59
程序员又
人生
回复 时慧 2009年08月15日 星期六 21:01
回复 陳木生 2009年08月15日 星期六 21:05
因为这样
回复 时慧 2009年08月15日 星期六 21:07