零零碎碎学了一段时间的语言,一直想对比总结记忆一下。
我接触这几门语言的先后顺序,Python2.7 > Node > Golang> Python3.6 > Java.如果不特意说明的话,我所指的Python都是version 3.6.
变量声明及赋值
Java | Node | Go | Python |
---|---|---|---|
int a=1; |
let a=1 |
a int = 1 |
a=1 |
- Java和Go类型声明的位置不同
- let是es6的关键字,表示声明一个变量
- Node和Go声明一个常量都用关键词const,Java用final
- Python最牛,根本不用声明变量。
那么问题来了,Python为什么不用声明变量?
因为声明变量的本质是在内存堆里开辟一块内存空间,并且在栈中的变量指向这个内存空间。
而python,首先会创建一块连续的内存来保存1,然后把变量名a贴在上面,这个变量名没有保存关于1的任何类型信息。
另外举个例子,比如:b = a
对于b=a
,Java和Go都会在内存中开辟一块新的空间,进行了值拷贝。而python只是把变量b贴上1上面,而不会开辟新的内存空间。Node的话,我不了解。
hello world
Python
第一种:
print("hello world")
第二种:
if __name__ == "__main__":
print("hello world")
我的启蒙语言就是Python,所以我很长时间都不理解if __name__ == "__main__"
到底是啥意思,后来接触了Go、C、Java之后,我理解了,这句话就是程序的入口,具体而言,就是当py文件自身被调用时,py文件的名字(___name____)是"___main____"。
Java
public class HelloWorld{
public static void main(String[] args){
System.out.println("hello world");
}
}
本来我是想先学Java的,可是看到Java显示个“hello world”都这么麻烦,我骂了一声“死变态”便转身投入了Python的怀抱。可是当我经历了上述的学习顺序后,我逐渐觉得Java写这么冗长,不是没道理的:
- 被public修饰的类需要独享一个文件,文件名需和类名相同。
- static表明,main是类的方法,python中要用
@staticmethod
来表示类方法 - void表示该方法没有返回值
- 在Java中函数不是一等公民,必须写类。所以有人评价,Java是最彻底的面向对象的语言。
Node
console.log("hello world")
打开浏览器打开“开发者工具”,即可输入该句。
Go
import "fmt"
func main(){
fmt.Println("hello world")
}
- Go的“fmt”包不是内建的,需要先引入。
- 函数在Go中是一等公民,并且都没有,并且这点和C语言很像。