静态语言的特点
语言不是我爹,也不是我妈,更不是我女朋友,我对语言和很多人不同,我不觉得语言有多神圣,一个谋生的工具而已。生活有那么多有趣儿的事儿,干啥要执着于语言,这就像很多年前我不能理解为什么用Android手机的大多都特别喜欢跑个分,比比谁的手机性能更好。
但后来想想,可能玩手机的是把折腾手机当兴趣,就像我玩游戏一样,可以理解。
表面上,质疑的是Java、C#这类语言语法笨重,规则繁多,代码和变量名冗长,但实质上我觉得是在质疑自己的选择,害怕现在选择的Python、JS会“过时”,会被淘汰。
我只是个讲师,我只做课程,我并不站队。我做什么课和趋势、前景都没关系,我除了明确不喜欢JavaScript,其他语言我都觉得挺好的。但即使是JavaScript我也成天写,因为没有选择呀。
再说,Java本身就是我的主语言,十五年前我就写下了第一行Java代码,只不过动态语言开发效率高,这些年偷懒没怎么折腾Java了。
事实上有Java基础学习其他语言真的和玩似的,这样是为什么我在2年前写第一篇手记的时候就明确写到,如果没有特别的语言喜好,优先选择Java,这不只是一个饭碗的问题,更是因为Java/C#这类语言本身就是集编程思想的大成者。
说说Java/C#这类静态语言和动态的Python、JS、PHP。首先这里有几个概念就是静态类型、动态类型、强类型和弱类型。
这些概念在网上每个人都有不同的说法,比如有人说Python是强类型有人说是弱类型。为啥对于一个定义会有这么强烈的争议呢?因为概念本身就是模糊的,并没有权威来给出定义。所谓定义其实有时候很有意思,有权威的人站出来说一句话,可能就是定义,但你站出来说一句话,可能就是狗屁。
我要表达的是,这些概念本身是人为造出来的,早期的语言开发者再开发语言的时候是不会对语言做强弱动静之分的,这不同于基础数学、物理学等本质规律。拿Python来说,它确实不需要定义,甚至是不需要声明,不需要定义就是弱类型吗?但Python确实存在着显示的类型转换,在做字符串+数字的时候,如果你不手动转型,他是会报错的。再比如,我认为Java是编译型语言,但很多人不赞同。有人说C和C++才是编译型语言,Java不是编译型语言,因为C和C++是编译到机器码,而Java会有一个编译成字节码的过程。只有编译成和机器无关的中间码,才能做到跨平台。C#同Java类似,它也是编译成IL中间代码。然而这就能说明Java就不是编译型语言了吗?