Scala初步
Posted 麦田里的守望者
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Scala初步相关的知识,希望对你有一定的参考价值。
Scala 是一门多范式(multi-paradigm)的编程语言,设计初衷是要集成面向对象编程和函数式编程的各种特性。Scala 运行在Java虚拟机上,并兼容现有的Java程序。Scala 源代码被编译成Java字节码,所以它可以运行于JVM之上,并可以调用现有的Java类库。
介绍 Scala 是 Scalable Language 的简写,是一门多范式的编程语言联邦理工学院洛桑(EPFL)的Martin Odersky于2001年基于Funnel的工作开始设计Scala。Funnel是把函数式编程思想和Petri网相结合的一种编程语言。Odersky先前的工作是Generic Java和javac(Sun Java编译器)。Java平台的Scala于2003年底/2004年初发布。.NET平台的Scala发布于2004年6月。该语言第二个版本,v2.0,发布于2006年3月。截至2009年9月,最新版本是版本2.7.6 。Scala 2.8预计的特性包括重写的Scala类库(Scala collections library)、方法的命名参数和默认参数、包对象(package object),以及Continuation。2009年4月,Twitter宣布他们已经把大部分后端程序从Ruby迁移到Scala,其余部分也打算要迁移。此外, Wattzon已经公开宣称,其整个平台都已经是基于Scala基础设施编写的。
Scala Windows安装
Scala 语言可以运行在Window、Linux、Unix、 Mac OS X等系统上。Scala是基于java之上,大量使用java的类库和变量,必须使用Scala之前必须先安装 Java(>1.5版本)。1)检查JDK版本(JDK安装略)
C:\Users\Administrator>java -version
java version "1.8.0_161"
Java(TM) SE Runtime Environment (build 1.8.0_161-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.161-b12, mixed mode)
2)下载并安装配置Scala基本环境
下载后双击msi文件,指定安装目录后其他选项一律使用默认配置,安装完毕后需要在windows上配置SCALA_HOME环境变量。
打开CMD命令窗口测试Scala 变量
Scala 与 Java有着相同的数据类型,下表列出了 Scala 支持的数据类型
数字类型:Byte、Short、Int、Long、Float、Double
字符类型:Char、String
布尔类型:Boolean 字面值 true|false
Unit:表示无值 ,等价于其他编程语言的void关键字,字面值()
Null:表示空或者空引用
Nothing:是任何类的子类型
Any:是所有类型的超类
AnyRef:是所有引用类的基类
注意:上表中列出的数据类型都是对象,也就是说scala没有java中的原生类型。在scala是可以对数字等基础类型调用方法的。
定义变量
var a:Int = 1
var str:String = "hello world"
var pair:(Int,String) = (1,"测试") //元组
运算符号
算术运算符:+、-、*、/、%、
关系运算符:==、!=、>、<、>=、<=
逻辑运算符:&&、||、!
位运算符:&(按位与)、|(按位或)、^(异或)、~(取反)、<<、>>、>>>(无符号)
赋值运算符:= 、组合赋值:(算术|位运算=)
条件分支&循环控制
if条件分支
if(布尔表达式 1){
// 如果布尔表达式 1 为 true 则执行该语句块
}else if(布尔表达式 2){
// 如果布尔表达式 2 为 true 则执行该语句块
}else if(布尔表达式 3){
// 如果布尔表达式 3 为 true 则执行该语句块
}else {
// 如果以上条件都为 false 执行该语句块
}
while循环控制
// 局部变量
var a = 10;
// while 循环执行
while( a < 20 ){
println( "Value of a: " + a );
a = a + 1;
}
do-while循环
var a:Int = 0
do{
println( "Value of a: " + a );
a = a + 1;
}while( a < 20 )
for循环
var a = 0;
// for 循环
for( a <- 1 to 10){
println( "Value of a: " + a );//打印1-10
}
for( a <- 1 until 10){
println( "Value of a: " + a );//打印1-9
}
for 循环 中你可以使用分号 (;) 来设置多个区间,它将迭代给定区间所有的可能值(实现嵌套)
var a = 0;
var b = 0;
for( a <- 1 to 3; b <- 1 to 3){
println( "Value of a: " + a );
println( "Value of b: " + b );
}
for循环集合
/*
for( var x <- List ){
statement(s);
}
*/
//案例
val numList = List(1,2,3,4,5,6);
// for 循环
for( a <- numList ){
println( "Value of a: " + a );
}
for循环过滤
var a = 0;
val numList = List(1,2,3,4,5,6,7,8,9,10);
// for 循环
for( a <- numList
if a != 3; if a < 8 ){
println( "Value of a: " + a );
}
}
for使用yield(投射)
/*
var retVal = for{ var x <- List
if condition1; if condition2...
}yield x
*/
//案例
var a = 0;
val numList = List(1,2,3,4,5,6,7,8,9,10);
// for 循环
var retVal = for{ a <- numList
if a != 3; if a < 8
}yield a
// 输出返回值
for( a <- retVal){
println( "Value of a: " + a );
}
Scala函数
函数声明
def functionName ([参数列表]) : [return type]
案例
def sum(x:Int,y:Int):Int={
return x+y
}
//可以尝试省略返回值类型
def multi(x:Int,y:Int)={
x*y
}
def sayHi(name:String):Unit={
println("hi~ "+name)
}
Scala 函数传名调用
object Test {
def main(args: Array[String]) {
var res1=call(sum,1,3)
var res2=call(multi,1,3)
println(res1+" "+res2)
}
def sum(x:Int,y:Int)={
x+y
}
def multi(x:Int,y:Int)={
x*y
}
//声明参数f是一个函数,x,y是参数,通常把call函数称为高阶函数
def call(f:(Int,Int)=>Int,x:Int,y:Int):Int={
return f(x,y)
}
}
可变长参数函数(要求必须放置在最后)
def sum(args:Int*):Int={
var sum:Int=0
for(agr <- args){
sum+=agr
}
return sum
}
默认参数值
def main(args: Array[String]) {
sayHi("jiangzz")
sayHi()
}
def sayHi(name:String="zhangsan"):Unit={
println("hi~ "+name)
}
内嵌函数
object Test {
def main(args: Array[String]) {
var res = factorial(5)
println(res)
}
//计算阶乘
def factorial(x:Int)={
def mulit(i:Int):Int={ //该函数存在递归,必须申明返回值类型
if(i > 0){
i*mulit(i-1)
}else{
1
}
}
mulit(x)
}
}
偏应函数
def main(args: Array[String]) {
var say=saySomething(_:String,"zhangsan")
say("Hello")
say("welcome")
}
def saySomething(welcome:String,name:String){
println(welcome+" ! "+ name)
}
指定函数名
def main(args: Array[String]) {
saySomething(name="zhangsan",welcome="你好")
}
def saySomething(welcome:String,name:String){
println(welcome+" ! "+ name)
}
匿名函数
Scala 中定义匿名函数的语法很简单,箭头左边是参数列表,右边是函数体。使用匿名函数后,我们的代码变得更简洁了。
(x:Int,y:Int) => {x+y}
函数柯里化(Currying)
def main(args: Array[String]) {
println(sum(1)(2))
}
def sum(x:Int)(y:Int):Int={
return x+y
}
继续关注
以上是关于Scala初步的主要内容,如果未能解决你的问题,请参考以下文章