Scala运行于JVM上,也就是Scala的源代码要经过编译器编译,编译器好像也是Martin Odersky 这货写的,也就是说Scala代码要编译成.class 文件,然后运行在JVM上,再解释成相应的机器码进行执行。Scala可以任意调用Java的代码。2001年这种语言被发明出来了,但是一直都不怎么火,直到出现Apache Spark和Apache Kafka这样的框架,Scala才进入大数据从业者的视线。这也是作为一个大数据从业者,我为什么来敲这段文字的原因。我一直在想怎么能够有一种通用的思维去学习编程语言,希望能抽象出更好的方法,更快的掌握多种语言编程的这种技能。现在发现,scala好难学。。。
从scala官网上下载安装Scala,在Windows命令行内就可以进行scala编程,也可以通过eclipse进行编程。有一个scala.bat 文件,这个是scala的解释器,输入的内容很快就会编程.class 文件,然后交给Java虚拟机执行。Scala解释器也被叫做REPL,Read->Evaluation->Print->Loop。
声明变量:
变量在程序设计里很常见,经常有值需要改变,这里用var来声明,同样,变量里一个特例就是常量,常量用val来表示,并且scala建议使用val,因为spark大型复杂系统中,需要大量的网络传输数据。使用常量比较安全不容易被错误的更改。
数据类型:0-9这10个+洋字母26个+天朝几千个
想一想平时日常生活中,人类发明了文字,用来交流,发明了数字用来计数,又发明了计算机用来算算术。计算机只是0和1 的电信号。计算机通过符号表的方式来指定人类社会里面定义的各种各样的奇奇怪怪的计算机不认识的符号。人类主要发明的文字和数字。基本上可以显示为数字,英文字母,汉字,还有其他国家的各种文字。但是终究起始是英文更为简单一点,只有26个字母通过不同的组合形成单词,然后再不同组合变成语句,所以基本上活字印刷的时候只需要用26个章就行了,汉字中文是更为复杂的文字系统,需要几千个常用章。那么用来表示数字的数字系统占了计算机常用类型里的很大一部分,比如说,Byte,Short, Int, Long, Float, Double,表示各种不同长度需求的数字。表示文字字符的就char,还有一个表示对错的Boolean。在Scala中,这些常用的类型都是类的一种。不像Java里面区分基本数据类型和引用类型。Scala还提供了RichInt 、RichDouble、RichChar等功能强大升级版的常用类型。
操作符:32个奇奇怪怪
这个也是人类发明出来的数学系统中的一种,比如+,表示一个东西和另一个东西的总和。 相应的 + 、-、*、/、%,以及&、|、^、《、》等等。基本上都表示他们在做一件事情。重新看一下键盘,发现全世界人们一起规定的字符也不是特别多,总的算来也就32个,每个符号赋予了他们各种意义,他们被人们指派为做各种事情。在scala中++,--这种定义被Martin Odersky 这货给废弃了。
控制结构是什么鬼
不知道被哪儿个数学家证实的,一共就这三种控制结构,顺序,条件判断,循环。所有的事情都可以用这三种方式搞定。所以程序都是这三种的组合。顺序基本上不用说,按照顺序写下去的就是顺序了。就像现在写文档一样,也是从第一行开始写,程序读文档也是从第一行开始读的。条件判断常见的定义就是if 、elseif、else还有就是MD,条件太多了,总是写if、if 的好恶心,所以又有了那种swich的结构。scala嫌弃swich这种头脑简单的条件判断。于是自己整出了这种模式匹配的match结构。超难学,有一堆可以匹配的情况。记忆量好大。。。宝宝残破的记忆力。而且if这个表达式直接就是一个带返回值的表达式,可见Martin 是写Java写烦了,连赋值语句都懒得写,直接得结果多爽。更爽的是不用写;号作为结束,默认每一行作为一个语句,看scala代码就觉得特别爽,适合懒人,哈哈哈。对于循环来说,while 和do while是一样的,for的改动很大,没有了那种三段的结构,好像这样的设计更利于进行循环遍历,就是类似于增强型for循环的 功能,至于循环变量的增加直接用0 until 10 进行实现,循环退出条件也是遍历完之前的值。这样的设计会有跟增强型for循环一样的缺点,所以scala里面又增加了一个if 进行判断,表示在循环的时候同样可以进行判断。还可以在循环中使用变量增加了程序员在用for循环的时候的灵活性。感觉Martin设计了一堆脑洞极高的设计。
数组:大家都有的
Array和ArrayBuffer 和 String和StringBuffer 是不是很像。new Array[String](10) 或者直接Array(“Hello”,“World”)在表达方式上不一样而已。Java里面数组的识别是靠[ ]这个符号 String [] 和 int [] 这样声明才感觉是数组,Scala里面更为直观Array[String] 表达的是String数组,让数组更直观的说我是数组。 当然了,一说到数组,就是有很多很多算法了,毕竟前人造了很多轮子,用好轮子才是好程序猿!
映射和元组
多了两种
下回再分解吧=_=回家了