强类型 弱类型 显式类型 隐式类型

所谓的显式类型和隐式类型,区别在于对于变量,是否需要显式说明它的类型。对于显式类型语言来说,一个变量的类型,是在变量声明之初就决定了的,声明之后不能更改。

//C++
int x;  //这里x被声明为一个整型。
x = 10; //OK,类型匹配。
x = "abc"; //Error! 类型不匹配
x = 10.24; //虽然在语法上OK,但是这种写法会引发隐式类型转换,
//x中实际存储的值是10,而不是10.24。

当然,即使在显式类型的语言中,也有所谓的“隐式类型转换”机制让用户在书写语法上自由一些。比如上面的例子中,将浮点数10.24赋值给一个整型 量并不会导致语法错误,而是会引发隐式类型转换。但即使是隐式类型转换,也是将“不符合类型的值”向变量所具有的类型靠拢,而不会改变变量的类型。

而隐式类型语言就不同了。隐式类型语言对变量没有显式的声明。一个变量没有固定的类型,它的类型是随着当前存储的内容而变化的。

#Python
x = 10   #这时x是一个int类型
x = "This is a string"  #x同样可以接受一个字符串,
#这时,x的类型由int转变为了string
x = 10.24 #x又由string变成了float类型,
#注意这里并没有什么隐式类型转换,
#x里的值就是确切的float类型数值10.24,
#改变的是x的类型,而不是存储其中的数值。

但是我们要意识到一件事:我在上面举的例子,显式类型也好,隐式类型也好,它们都是有类型这个概念的!

C++自不必说了,对变量声明时指定的类型就说明了它是有类型区分的。那么像Python这样的隐式类型语言,我们看不到变量的类型,如何证明它是有类型的呢?首先,python有type函数,可以看到变量当前的类型。

>>> x=10
>>> type(x)

>>> x="This is a string"

>>> type(x)

>>> x=10.24
>>> type(x)

这里我们可以清楚的看到当赋予x不同值的时候,x的类型是会变化的。

另外,在Python中,不同类型的对象不能相互替代和操作。

>>> 10 + '20'
Traceback (most recent call last):
  File "", line 1, in
TypeError: unsupported operand type(s) for +: 'int' and 'str'

这一切都充分的证明,在Python里,是有明确的类型的概念。

而某一些语言,它们是没有很明确的“类型”的概念的,这些语言就被成为弱类型语言。强类型和弱类型的主要区别是,在语言中是否存在明确的类型概念

Perl和PHP就是很著名的弱类型语言。

#Perl
$x = 10+'20';    #这里的10是整型而'20'是字符串?
#不,Perl不关心这个。
#只要它们“看起来像”数字,就可以放到一起运算,不是么?
print $x;           #输出了30

在弱类型的世界中,所有的东西都是一样的,你不用区分它们到底是什么类型。事实上,也许在内部实现中,所有的东西最终都被存储为同一种类型。

显式类型一定是强类型的,而弱类型一定是隐式类型的。但隐式类型也有可能是强类型的,比如Python。

怎样区分强类型还是弱类型?很简单,让它们做一做 10 + ‘20’ 吧 🙂

强类型和弱类型的主要区别在于:在语言中是否存在明确的类型概念
Python、C++是强类型的语言。
Perl、PHP是很著名的弱类型语言。

文章作者令狐虫

2009年的总结

一晃已经实习了一个多月了,2009年在平安中过去了,今年也按照计划慢慢实行了,但是效果确实不怎么样好。因为做的事没一个顺心的:

9月份开学来的时候准备了很多三级网络技术的复习,准备了很久,但是由于自己的粗心,笔试时通过了,机试是KO了。错误时由于一个很小的,左移右移的问题也就是>>,<<.现在只能重考了,还好我同学帮我报名了,呵呵!

软件设计师,这个是重点,但是还是没能通过,上午的还好及格,但是下午的就。。。感觉还是实践的东西太少,作为一个计算机专业的学生,没怎么实践,不怎么会编码,是一件狠让人费解的事。我觉得大部分原因还是出在自己的身上。

再说说实习吧,实习一个月了,感慨良多。从一个学生的角色直接转变成上班族,这是一个必然要经历的阶段。每天早晨的早起是必修课,每天去赶那满 满得 不能再满的公交,已经是家常便饭了,顺便BS下,交通真是稀烂啊。每天上班的8个小时,每天在公交上的两个小时,是的,很辛苦,但是很值得,真的。我想我 找到我所love的东西了。那就是DotNetNuke。我们公司的全部业务就是DotNetNuke的相关,在这之前我还不知道DotNetNuke为何物,所以只有努力的去学习。在经过一段时间的额努力后,终于搞清楚了DotNetNuke的基本操作。但是相关的开发还是了解很少。博客园里高手还是不少的,有m2land二十四画生等等,还有DNN团队博客 ,很多都是从2005年开始研究DotNetNuke了,所以基本我的资料都在这里找的,嘿嘿!慢慢的自己也做了一个小的模块,完全是按照dnn的模块来开发,当然,里面肯定还有很多,不是很明白的地方,我是一个IT菜鸟,要进行深入的开发,必须还得更努力才行。

现在的情况是对.net下的开发还是很肤浅,C#是一门博大精深的语言,想要精通还是花费时间学习的。DotNetNuke运用很多新的技术, 新的 思想,包括经典的设计模式以及微软的很多技术,像三层结构,成员资格API,安全模型等等。嗯, 我现在找到了,我所喜欢的东西了,那么开始朝着自己所希望的方向努力吧。新年大致的规划了下,先从DotNetNuke的基本开发开始了解,慢慢的熟悉 DotNetNuke的框架,然后深入进行相关的开发。这个只能通过看DotNetNuke相关的书了,这里有一本蛮好,DotNetNuke 4高级编程。貌似DotNetNuke 5也已经出了一本新书professional dotnetnuke 5: open source web application framework

要学习的东西很多,web下的开发像web services、 ajax、三层结构的设计、MVC以及相关的设计模式学习。 另外对android的开发非常感兴趣,但是现在能力有限,所以必须好好努力学习java先。要学的东西很多,所以,我只希望自己能好好的坚持下去,我最 欣赏的是苹果的Steve Jobs曾经在Stanford的演讲视频的话,当时看到视频时,是灰常的激动的,所以经常以此来鼓励自己!

Your time is limited, so don’t waste it living someone else’s life. Don’t be trapped by dogma — which is living with the results of other people’s thinking. Don’t let the noise of others’ opinions drown out your own inner voice. And most important, have the courage to follow your heart and intuition. They somehow already know what you truly want to become. Everything else is secondary.

“你的时间有限,所以不要为别人而活。不要被教条所限,不要活在别人的观念里。不要让别人的意见左右自己内心的声音。最重要的是,勇敢的去追随自己的心灵和直觉,只有自己的心灵和直觉才知道你自己的真实想法,其他一切都是次要。” ——史蒂夫·乔布斯

Follow Your Heart,愿和每一个有着梦想的同学,实现心中梦想!