1.Scala编译器的安装
1.1.安装JDK
因为Scala是运行在JVM平台上的,所以安装Scala之前是要安装jdk的,安装jdk的方法,在此处省略。
1.2安装Scala
1.2.1Windows安装Scala编译器
访问官网http://www.scala-lang.org/,下载Scala编译器安装包,安装包分两种:一种是免安装的,下载之后解压,配置环境即可。一种是后缀名为.msi的安装包,下载之后点击下一步就OK了。
安装完之后,可以在cmd中直接输入scala,然后就进入scala的世界了;
1.2.2Linux安装Scala编译器
下载Scala地址http://downloads.typesafe.com/scala/2.10.6/scala-2.10.6.tgz然后解压Scala到指定目录
tar -zxvf scala-2.10.6.tgz -C /usr/java
配置环境变量,将scala加入到PATH中
vi /etc/profile
export JAVA_HOME=/usr/java/jdk1.7.0_45
export PATH=$PATH:$JAVA_HOME/bin:/usr/java/scala-2.10.6/bin
1.2.3Scala开发工具安装
目前主流开发工具有两种:Eclipse和IDEA,这两种都有相对应的Scala插件。
如果使用Eclipse,直接到Scala官网下载即可http://scala-ide.org/download/sdk.html。
如果使用IDEA,可以到http://www.jetbrains.com/idea/download/下载社区免费版,点击下一步安装即可。
2.Scala基础
2.1声明变量
object VariableDemo {
def main(args: Array[String]) {
//使用val定义的变量值是不可变的,相当于java里用final修饰的变量
val i=1
//使用var定义的变量是可变的,在Scala中鼓励使用Val
var s ="hello"
//scala编译器会自动推断变量的类型,必要的时候可以指定类型
val str :String ="G_yuan"
}
}
2.2常用类型
Scala和java一样,有7种数值类型:Byte,Char,Int,Long,Float和Double(无包装类型)和一个Boolean类型
2.3条件表达式
object ConditionDemo {
def main(args: Array[String]):Unit = {
val x =1
//判断x的值,将结果赋给y
val y =if (x >0)1 else -1
//支持混合类型表达式
val z =if(x >1)1 else "G_yuan"
//如果缺失else,相当于if(x>2)1 else ()
val m =if(x >2 )1
//在scala中每一个表达式都有值,scala中有个Unit类,写做(),相当于Java中的void
val n =if(x >2)1 else ()
//if 和 else if
val k =if (x <0 )0
else if (x >=1)1 else {
-1
}
println(k)
}
}
2.4块表达式
object BlockExpressionDemo {
def main(args: Array[String]) {
val x =0
//在scala中{}中课包含一系列表达式,块中最后一个表达式的值就是块的值
// 下面就是一个块表达式
val result = {
if (x <0){
-1
}else if(x >=1) {
1
}else {
"error"
}
}
//result的值就是块表达式的结果
println(result)
}
}
2.5循环
在scala中有for循环和while循环,用for循环比较多;
for循环语法结构:for(i <- 表达式/数组/集合 )
2.6调用方法和函数
scala中的+ - * % 等操作符的作用与java一样,位操作符 & | ^ >> << 也一样,只是有一点特别的:这些操作符实际上是方法。eg:
a + b 是方法调用的简写: a.+(b)
a 方法 b 可以写成 a.方法(b)
2.7定义方法和函数
2.7.1定义方法
(下面定义方法的结构,一定要铭记于心,做的心中有码,信手拈来)
方法的返回值类型可以不写,编译器会自动推断出来,但是对于递归函数,必须指定返回类型
2.7.2定义函数
第一种定义函数方式
第二种定义函数方式
val func : Int =>String = {x => x.toString}
上面两种定义函数方式可以对比js中函数定义的方式去理解(这只是类比帮助记忆,其实并没有什么可比性,语法嘛,创造者规定什么就是什么啦。笑脸):
第一种类比js中的 var func = function(){}
第二种类比js中的 function func(){}
2.7.3方法和函数的区别
在函数式编程语言中,函数是“头等公民”,他可以像任何其他数据类型一样被传递和操作
eg:首先定义一个方法(方法接受的参数是一个函数),在定义一个函数,然后将函数传递到方法里面
object MethodAndFunctionDemo {
//定义一个方法m2 参数要求是有一个函数,函数的参数必须是连个Int类型
//返回值类型也是Int类型
def m2 (f : (Int ,Int)=>Int) :Int = {
f(2,6)
}
//定义一个函数f1 ,参数两个Int类型,返回值一个Int类型
val f1 = (x :Int ,y:Int) => x + y
//在定义一个函数f2
val f2 = (x:Int,y:Int) => x * y
def main(args: Array[String]):Unit = {
//调用m2并传入f1
val res =m2(f1)
println(res)//结果8
}
}
方法,如果直接写方法名执行时,是会报错的,但是函数不会