美文网首页
编程语言圣经

编程语言圣经

作者: 灬丿醉卧听风雨丨 | 来源:发表于2020-05-13 20:00 被阅读0次

(原创)单薄找土豆2020-04-22

0x00

上古时期,人类主要使用二进制编程,人类需要记住数据在内存的地址,然后才能进行读写操作。

比如取出地址为0x3A6F27处的值, 以及地址为0x3A6F39处的值,然后把两个值相加起来。

1

冗长的、难以记忆的地址让人类痛苦不堪。

仁慈的上帝要解救人类于苦难之中,他说:要有变量 !用变量表示内存中的值。

2

人类不解:“那地址呢?”

上帝送给人类一个叫编译器的宝贝:“不用担心,编译器把背后的脏活累活都干了,这样代码写起来就简单多了!”

x + y

人类非常高兴。

0x01

内存中有一段数据,它的值是0110 0111 0110 1100 0110 1111 0110 0010

部落B的人也把它读了出来,说这是浮点数数1.116533*10^24

部落C的人说部落A和部落B都不对,这是一条机器指令

三个部落争论不休。

上帝安慰人类说:你们说得都对!信息=位+上下文。这一串二进制到底表达什么信息,得有上下文才能理解。所以,要有数据类型!

int x ; //表示x指向的是整数

float y; //表示y指向的是浮点数

人类非常高兴, 为了方便自己的使用,他们又创造了byte ,boolean , short, char,long 等各种数据类型。

有一小撮人非常怀念以前可以直接操作内存的日子,那才是自由自在的生活!

仁慈的上帝决定满足他们:要有指针!

int *x; // x 是整形指针,可以当地址操作了。

x++; //操作的是地址,而不是值

x--;

这帮人胡作非为,经常把内存搞得一团糟,于是上帝严格限制指针的使用,只让C, C++等少数语言可以用指针操作内存,其他语言不能使用!

0x02

人类很快发现,这些基本的数据类型在编程中远远不够, 比如想表达一本书的信息, 需要有名称,作者,书号,价格,出版日期等一堆数据,需要好几个数据类型组合起来才行。

上帝告诉人类说:要有自定义数据类型, 把基本的数据类型组合起来!

typeDate{

intyear;

intmonth;

intday;

}

type Book{

Stringname;

Stringauthor;

float price;

Datepublish_date

}

人类非常高兴,为了方便自己使用,他们写出了各种各样的数据类型如Student, Company, Department , Employee, Manager等等。

0x03

不满足的人类发现,程序中经常需要对这些自定义类型做操作,这些操作被称为函数。

函数和类型是分开的,很不方便。

上帝说:要有抽象数据类型,把类型和函数放到一起

type Stack{

// 数据

intsize;

int[] values;

......

// 操作

voidpush(intvalue);

intpop();

intsize();

}

人类说:“亲爱的上帝, 这是抽象数据类型,只有接口,没有具体实现啊。”

上帝说:“唉,懒惰的人类,不思考的人类啊,我再送你们一个东西:类(class), 你们在class中写代码实现吧。”

人类非常高兴,把数据和函数放到了一起,实现了很多“类”,List, Stack, Queue, Tree......

0x04

人类发现一个class定义好了以后,开始使用的时候就不好改变了, 比如:

classStack{

intsize;

int[] values;

voidpush(intvalue){

......

}

intpop(){

....

}

}

这个栈只支持push和pop整数,人类想用float型,string型,甚至Student类型,Company类型的栈,还得重新再写一套代码,这实在是太烦人了!

人类说:仁慈的上帝,我们能不能对一个现成的类改变一点点?

上帝说:当然, 要有生成类的类,也就是模板。

classStack{

intsize;

T [] values;

voidpush(T value){

......

}

Tpop(){

....

}

}

T 可以是int , String ,Student..... 是一个可以改变的东西。

于是,人类可以这么使用类了 Stack s, Stack , Stack ......

上帝告诉人类两种实现模板的方法,一种是擦除法:

不管你是Stack,还是Stack,编译后统统变成了 Stack,类型T变成了Object。

classStack{

intsize ;

Object[] values;

......

}

另外一种是膨胀法,每个类型自动生成一个新的类Stack_int, Stack_String, Stack_Student......

有个叫Java的部落使用擦除法,有个叫C++的部落使用了膨胀法,这些部落每天争论不休, 让上帝头疼不已。

0x05

人类出现了特殊的一群人,他们很讨厌在代码中写类型。

他们说:一个变量,在运行时指向什么类型,它就是什么类型,为什么要在代码中写出来呢?多麻烦啊,能不能这样:

// 现在x是整数类型

x = 5;

// x的类型变了,现在是字符串类型

x ="hello world"

上帝决定把他们解救出来:要有动态类型,你可以不声明变量的类型了,变量的类型在运行时来确定。

那些支持类型声明的人很生气,他们自称为静态类型,并且对动态类型展开了强大的攻势:编译器查不到错误,IDE中代码提示弱,代码不好阅读,动态一时爽,重构火葬场......

动态类型的人则攻击静态类型繁琐,代码行数多,开发慢,还得用模板这么无用的东西。

于是静态类型的人开始使用类型推导,原来的代码是这么写的:

InternationalCustomerOrderProcessor> orderProcessor = createInternationalOrderProcessor(customer, order);

又臭又长, 有了类型推导,现在可以这么写,一下子方便了很多:

var orderProcessor = createInternationalOrderProcessor(customer, order);

支持动态类型的人也不甘示弱,开始在代码中使用类型标注:

defgreeting(name: str)-> str:

return'Hello '+ name

这个函数的输入参数被标注为是字符串(str),返回值也被标注为字符串。

静态类型的人嘲笑类型标注只在IDE等开发工具中使用,运行时就没有了。

0x06

人类的争斗越来越激烈,上帝无法阻止,非常头疼,他决定休息一天。

这就是星期天的来历。

相关文章

  • 编程语言圣经

    (原创)单薄找土豆2020-04-22 第0x00天 上古时期,人类主要使用二进制编程,人类需要记住数据在内存的地...

  • 48.Go语言书籍

    Go语言圣经(中文版) Go语言高级编程(Advanced Go Programming https://godo...

  • Golang聚合

    教程 Go Web 编程Go语言圣经(中文版) Tips Golang 学习笔记——交叉编译 & 部署Golang...

  • Go语言学习资料汇总

    From - 自由编程 入门 首先介绍一本Go语言经典入门书籍Go语言圣经对于入门学习,首先推荐以读书为主,可以辅...

  • 承认吧!其实你不懂怎么学习编程

    版权声明:本文转载于公众号TeachPlus 你合上一本书,可能是《x语言开发圣经》,也可能是《x语言编程从入门到...

  • 豆瓣9.5分,它是Scala领域当之无愧的王者之作!

    今天博文菌要给大家带来一部蜚声世界的Scala编程圣经,它就是由Scala 语言缔造者Martin Odersky...

  • 动态编程语言和静态编程语言

    动态编程语言:python等 静态编程语言:java等 动态编程语言和静态编程语言区别: 动态编程语言的变量并不是...

  • Swift编程语言 FAQ

    Swift编程语言 FAQ Swift编程语言 FAQ

  • python零基础8分钟基础入门

    一.编程语言介绍与分类 1.什么是编程语言 编程语言本质就是人类的语言,主要用于沟通交流。我们通过编程语言与计算机...

  • 程序员的读书历程

    :x语言入门 —> x语言应用实践 —> x语言高阶编程 —> x语言的科学与艺术 —> 编程之美 —> 编程之道...

网友评论

      本文标题:编程语言圣经

      本文链接:https://www.haomeiwen.com/subject/hmvonhtx.html