Scala核心编程_第01章_Scala概述

--我是在2018年第一次接触scala,之后再数仓过程中经常做Hbase与spark的etl。之后换了工作后有半年多没有再写过scala【现在基本都是写python】,重新拾起scala!!

  我会在上课笔记为主,同时会借鉴scala犀牛书和scala机器学习等,加入一些自己的思考。感谢尚硅谷韩老师。

为什么学习scala

  1. Spark—新一代内存级大数据计算框架,是大数据的重要内容。
  2. Spark就是使用Scala编写的。因此为了更好的学习Spark, 需要掌握Scala这门语言。
  3. Scala 是 Scalable Language 的简写,是一门多范式(范式/编程方式[面向对象/函数式编程])的编程语言
  4. 联邦理工学院洛桑(EPFL)的Martin Odersky于2001年开始设计Scala
  5. Spark,kafka等计算框架成为大数据主流框架,带动Scala语言的发展!

scala语言的特点

Scala是一门以java虚拟机(JVM)为运行环境并将面向对象函数式编程的最佳特性结合在一起的静态类型编程语言。

  1. Scala 是一门多范式 (multi-paradigm) 的编程语言,Scala支持面向对象和函数式编程
  2. Scala源代码(.scala)会被编译成Java字节码(.class),然后运行于JVM之上,并可以调用现有的Java类库,实现两种语言的无缝对接。
  3. scala 是一门简洁高效的语言,lambda表达式。函数式编程。马丁·奥德斯基 是参考了Java的设计思想,可以说Scala是源于java

  那什么是函数式编程:

函数式编程是种编程方式,它将电脑运算视为函数的计算。函数编程语言最重要的基础是λ演算(lambda calculus),而且λ演算的函数可以接受函数当作输入(参数)和输出(返回值)。

我们的编程是以函数作为单元来处理各个业务逻辑,函数既可以当做参数传来传去,也可以作为返回值,就是把函数式上升为类一样的一等公民。

  • 柯里化
  • 闭包
  • 变量不可变
  • lambda演算
  • 高阶函数
  • 匿名函数

scala,java和 jvm的关系图

Scala开发环境搭建

  1. Scala需要Java运行时库,安装Scala需要首先安装JVM虚拟机并配置好,推荐安装JDK1.8
  2. 在http://www.scala-lang.org/ 下载Scala2.11.8程序安装包
  3. 配置Jdk的环境变量
  4. 配置SCALA_HOME SCALA_HOME= D:\program\scala-2.11.8
  5. 将Scala安装目录下的bin目录加入到PATH环境变量 在PATH变量中添加:%SCALA_HOME%\bin
  6. 在终端中输入“scala”命令打开scala解释器

 

scala的构成: 

Scala的REPL:

介绍 上面打开的scala命令行窗口,我们称之为REPL,是指:Read->Evaluation->Print->Loop,也称之为交互式解释器。

说明:在命令行窗口中输入scala指令代码时,解释器会读取指令代码(R)并计算对应的值(E),然后将结果打印出来(P),接着循环等待用户输入指令(L)。

        从技术上讲,这里其实并不是一个解释器,而是指令代码被快速的编译成Java字节码并被JVM加载执行。最终将执行结果输出到命令行中。

安装idea的scala插件:

 

 

 

使用jd工具对scala.class文件进行反编译:

 

 note:

1.obiect表示一个伴生对象底层会生成两个.class文件,分别是HelloScala和HelloScala$
2.HelloScala 就是对象名字,它底层真正对应的类名是HelloScala$,对象是HelloScala$类型的一个静态对象MODULE$
3.scala在运行时,运行顺序如上图所示

通过 scala 命令可以直接运行 .scala 程序 ,而且可以直接运行.java程序

 

 

这个问题以后回答

简单格式规范:

  1. Scala程序的执行入口是main()函数。
  2. Scala语言严格区分大小写。
  3. Scala方法由一条条语句构成,每个语句后不需要分号(Scala语言会在每行后自动加分号),这也体现出Scala的简洁性。如果在同一行有多条语句,除了最后一条语句不需要分号,其它语句需要分号
    • \t:一个制表位,实现对齐的功能
    • \n:换行符
    • \\:一个\
    • \":一个"
    • \r:一个回车 println("hello\rk");

    4.注释(comment)

单行注释:
格式: //注释文字 快捷键 ctrl+/


多行注释:
格式: /* 注释文字 */  /*+回车

文档注释:
注释内容可以被工具 scaladoc 所解析,生成一套以网页文件形式体现的该程序的说明文档。//*+enter自动按方法参数生成
/**
* @deprecated xxx
* @example testing coding
* @param args
*/

scaladoc生成文档

 

 

字符串格式化

  1. 字符串通过+号连接(类似java)。
  2. printf用法 (类似C语言)字符串通过 % 传值。
  3. 字符串通过$引用(类似PHP),${+-*/%**} {}内能进行代码块的运算。
scala> val name = "wqbin"
name: String = wqbin

scala> val age  = 25
age: Int = 25

scala> val url  = "https://www.cnblogs.com/wqbin/"
url: String = https://www.cnblogs.com/wqbin/

scala> println("name=" + name + " age=" + age + " url=" + url)
name=wqbin age=25 url=https://www.cnblogs.com/wqbin/

scala> printf("name=%s, age=%d, url=%s \n", name, age, url)
name=wqbin, age=25, url=https://www.cnblogs.com/wqbin/

scala> println(s"name=$name, age=$age, url=$url")
name=wqbin, age=25, url=https://www.cnblogs.com/wqbin/

scala> println(s"name=${"nb_"+name}, age=${age+1}, url=$url")
name=nb_wqbin, age=26, url=https://www.cnblogs.com/wqbin/

  

 完结!!

posted @ 2020-05-13 00:30  wqbin  阅读(404)  评论(0编辑  收藏  举报