Scala语言
引言:其实代码没有你想象那么难,但是如果你想不到哪里去,就会很难.
学习一个技术或知识点的流程:
大数据技术生态体系
学习Scala的原因:
1)Spara新一代内存级大数据框架,是大数据的重要内容。
2)Spark就是使用Scala编写的,因此为了更好的学习Spark,需要掌握Scala这门语言。
3)Scala是Scalable Language的简写,是一门多范式的编程语言。
4)Spark的兴起,带动了Scala语言的发展。
官网:Scala-lang.org
Scala和Java以及jvm的关系分析图
Scala语言的特点:
Scala是一门以Java虚拟机(JVM)为运行环境并将面向对象和函数式编程的最佳特性结合在一起的静态类型编程语言。
1)Scala是一门多范式(multi-paradigm)的语言,Scala支持**面向对象和函数式编程(是一个值) ** 表达能力强,代码精简 最优雅
2)Scala源代码(Scala)会被编译成Java字节码(.class),然后运行于JVM之上,并可以调用现有的Java类库,实现两种语言的无缝对接
3)Scala但作为一门语言来说,非常的简洁高效(三元运算符,++,–)
快速有效的掌握Scala的建议:
1】学习Scala语法特有的特性
2】搞清楚Scala和Java的区别
3】如何让规范使用Scala
写第一个Scala语言
//说明
//1.object表示以一个伴生对象,这里我们可以简单的理解就是一个对象
//2.Hello Scala就是对象的名字,他的底层真正对应的类名是Hello Scala$,
// 对象是Hello Scala$ 类型的一个静态对象MODULE$
//3.
object HelloScala{//名字
//前:形参名字 后:形参类型 泛型表示:[String] Unit:相当于Java的void
def main(args:Array[String]):Unit={//主方法
println("hello,scala!~~") //输出:println()
}
}
在IDEA上面开发
第一步创建一个Maven工程等等
在IDEA上创建基于maven工程的Scala项目(创建项目的方式有很多,自己要掌握几套熟练的)
在maven工程里面下载mysql的依赖包jar
//注意版本要配套
//去官网查找maven里的mysql依赖包版本。
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.45</version>
</dependency>
纵览项目结构
查看项目的默认路径
高阶函数要熟练掌握
scala> def xxx(x:Array[String])={
| val fids = x(1).split(" ")
| val odn = x(2).split(" ")
| for(j <- 0 until fids.length){
|
scala> xx.
!= compareTo genericBuilder matches runWith toBuffer
## compareToIgnoreCase getBytes max sameElements toByte
* compose getChars maxBy scan toCharArray
+ concat getClass min scanLeft toDouble
++ contains groupBy minBy scanRight toFloat
++: containsSlice grouped mkString segmentLength toIndexedSeq
+: contentEquals hasDefiniteSize ne self toInt
-> copyToArray hashCode nonEmpty seq toIterable
/: copyToBuffer head notify size toIterator
:+ corresponds headOption notifyAll slice toList
:\ count indexOf offsetByCodePoints sliding toLong
< diff indexOfSlice orElse sortBy toLowerCase
<= distinct indexWhere padTo sortWith toMap
== drop indices par sorted toSeq
> dropRight init partition span toSet
>= dropWhile inits patch split toShort
addString endsWith intern permutations splitAt toStream
aggregate ensuring intersect prefixLength startsWith toString
andThen eq isDefinedAt product stringPrefix toTraversable
apply equals isEmpty r stripLineEnd toUpperCase
applyOrElse equalsIgnoreCase isInstanceOf reduce stripMargin toVector
asInstanceOf exists isTraversableAgain reduceLeft stripPrefix transpose
canEqual filter iterator reduceLeftOption stripSuffix trim
capitalize filterNot last reduceOption subSequence union
charAt find lastIndexOf reduceRight substring unzip
chars flatMap lastIndexOfSlice reduceRightOption sum unzip3
codePointAt flatten lastIndexWhere regionMatches synchronized updated
codePointBefore fold lastOption replace tail view
codePointCount foldLeft length replaceAll tails wait
codePoints foldRight lengthCompare replaceAllLiterally take withFilter
collect forall lift replaceFirst takeRight zip
collectFirst foreach lines repr takeWhile zipAll
combinations format linesIterator reverse to zipWithIndex
companion formatLocal linesWithSeparators reverseIterator toArray →
compare formatted map reverseMap toBoolean
scala> xx.
//只要以后看到有object TestScala ,你应该有这样一个认识
//1.object TestScala对应的是一个Test Scala$的一个静态对象 MODULE$
//2.在我们的程序中,是一个单例模式
object TestScala {
def main(args: Array[String]): Unit = {
println("hello,sca;a,idea...")
var num1:Int = 10
var num2:Int = 20
println(num1+num2)
println("名字\t年龄\t邮件\t性别")
}
}
Scala执行流程分析
Scala程序开发注意事项(重点)
1)Scala源文件以“.Scala”为扩展名
2)Scala程序的执行入口时main()函数
3)Scala语言严格区分大小写、
4)Scala方法由一条一条语句构成,每一个语句后不需要分号(Scala语言会在每行后自动加分号),这也体现了Scala的简洁性。
5)如果在同一行有多条语句,除了最后一条不需要分号,其他语句都需要加分号。
Scala语言转义字符
Scala语言输出的三种方式
1)字符串通过+号连接(类似java)
2)printf用法(类似C语言)字符串通过%传值
3)字符串通过$引用(类似PHP)
代码如下
//案例
object printDemo {
def main(args: Array[String]): Unit = {
var str1:String = "hello"
var str2:String = "world"
//连接起来输出
println(str1 + str2)
var name:String = "tom"
var age:Int = 10
var sal:Float = 10.67f
var height:Double = 180.15
//格式化输出
//保留小数点后面两位三位%.2f $%.3f 输出的值要一一对应
println("名字=%s 年龄是%d 薪水%.2f 身高%.3f",name,age,sal,height)
//Scala支持使用$输出内容,编译器会去解析$对应变量
println(s"个人信息如下:\n 名字$name \n年龄$age \n薪水$sal")
//如果在字符串中出现了类似${age + 10}则表示{}是一个表达式
println(s"个人信息如下:\n 名字${name} \n年龄${age + 10} \n薪水${sal*100}")
}
}
Scala源码的查看的关联
使用Scala过程中,为了搞清楚底层代码的机制,需要查看源码,
1)查看源码,选择要查看的方法或者类,输入CTRL+b
2)关联源码,步骤 1:将我们的源码包拷贝到 scala/lib 文件夹下. scala-sources-2.12.4
步骤 2: 关联即可,选中这个文件夹,进行关联, 最后,可 以看到源码
注释(comment)
注释提高了代码的阅读性,注释是一个程序员必须具有的良好的编程习惯
注释类型:单行注释 多行注释 文档注释
正确的代码风格
正确的缩进和空白
-
使用一次 tab 操作,实现缩进,默认整体向右边移动,时候用 shift+tab 整体向左移
-
或者使用 ctrl + alt + L 来进行格式化 [演示]
-
运算符两边习惯性各加一个空格。比如:2 + 4 * 5。
-
一行最长不超过 80 个字符,超过的请使用换行展示,尽量保持格式优雅
编程最难的两点:(1)业务逻辑(2)性能优化(实现那些性能)
Scala变量的基本使用
object VarDemo01 {
def main(args: Array[String]): Unit = {
var age: Int = 10
var sal: Double = 10.9
var name:String = "tom"
var isPass:Boolean = true
//在Scala中,小数默认为Double,整数默认为Int
var score:Float = 70.9f
println(s"${age} ${isPass}")
}
}
Scala变量声明基本语法
变量声明的基本语法
var|val 变量名 [: 变量类型] = 变量值
var 是可以改变值的 val是不可以改变值(常量值)的,没有线程安全问题,效率高(推荐使用) 两者有一定的区别
Var修饰的对象可以改变,val修饰的则不可以改便,但是对象的状态(值)却是可以改变的(比如L自定义对象,数组,集合等等)
变量声明时,需要初始值。
Scala数据类型介绍
Scala与Java有着相同的数据类型,在Scala中数据的类型都是对象,也就是说Scala没有Java中的原生类型。
Scala数据类型分为两大类AnyRef(值类型)和AnyRef(引用类型),注意,不管是AnyVal还是AnyRef都是对象。