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安装略)

 
   
   
 
  1. C:\Users\Administrator>java -version

  2. java version "1.8.0_161"

  3. Java(TM) SE Runtime Environment (build 1.8.0_161-b12)

  4. Java HotSpot(TM) 64-Bit Server VM (build 25.161-b12, mixed mode)

2)下载并安装配置Scala基本环境

下载后双击msi文件,指定安装目录后其他选项一律使用默认配置,安装完毕后需要在windows上配置SCALA_HOME环境变量。

Scala初步打开CMD命令窗口测试Scala初步Scala 变量

Scala 与 Java有着相同的数据类型,下表列出了 Scala 支持的数据类型

  • 数字类型:Byte、Short、Int、Long、Float、Double

  • 字符类型:Char、String

  • 布尔类型:Boolean 字面值 true|false

  • Unit:表示无值 ,等价于其他编程语言的void关键字,字面值()

  • Null:表示空或者空引用

  • Nothing:是任何类的子类型

  • Any:是所有类型的超类

  • AnyRef:是所有引用类的基类

注意:上表中列出的数据类型都是对象,也就是说scala没有java中的原生类型。在scala是可以对数字等基础类型调用方法的。

定义变量

 
   
   
 
  1. var a:Int = 1

  2. var str:String = "hello world"

  3. var pair:(Int,String) = (1,"测试") //元组

运算符号

  • 算术运算符:+、-、*、/、%、

  • 关系运算符:==、!=、>、<、>=、<=

  • 逻辑运算符:&&、||、!

  • 位运算符:&(按位与)、|(按位或)、^(异或)、~(取反)、<<、>>、>>>(无符号)

  • 赋值运算符:= 、组合赋值:(算术|位运算=)

条件分支&循环控制

if条件分支

 
   
   
 
  1. if(布尔表达式 1){

  2.   // 如果布尔表达式 1 为 true 则执行该语句块

  3. }else if(布尔表达式 2){

  4.   // 如果布尔表达式 2 为 true 则执行该语句块

  5. }else if(布尔表达式 3){

  6.   // 如果布尔表达式 3 为 true 则执行该语句块

  7. }else {

  8.   // 如果以上条件都为 false 执行该语句块

  9. }

while循环控制

 
   
   
 
  1. // 局部变量

  2. var a = 10;

  3. // while 循环执行

  4. while( a < 20 ){

  5.  println( "Value of a: " + a );

  6.  a = a + 1;

  7. }

do-while循环

 
   
   
 
  1. var a:Int = 0

  2. do{

  3.    println( "Value of a: " + a );

  4.    a = a + 1;

  5. }while( a < 20 )

for循环

 
   
   
 
  1. var a = 0;

  2. // for 循环

  3. for( a <- 1 to 10){

  4.  println( "Value of a: " + a );//打印1-10

  5. }

  6. for( a <- 1 until 10){

  7.  println( "Value of a: " + a );//打印1-9

  8. }

for 循环 中你可以使用分号 (;) 来设置多个区间,它将迭代给定区间所有的可能值(实现嵌套)

 
   
   
 
  1. var a = 0;

  2. var b = 0;

  3. for( a <- 1 to 3; b <- 1 to 3){

  4.    println( "Value of a: " + a );

  5.    println( "Value of b: " + b );

  6. }

for循环集合

 
   
   
 
  1. /*

  2. for( var x <- List ){

  3.   statement(s);

  4. }

  5. */

  6. //案例

  7. val numList = List(1,2,3,4,5,6);

  8.      // for 循环

  9. for( a <- numList ){

  10.   println( "Value of a: " + a );

  11. }

for循环过滤

 
   
   
 
  1. var a = 0;

  2. val numList = List(1,2,3,4,5,6,7,8,9,10);

  3. // for 循环

  4. for( a <- numList

  5.       if a != 3; if a < 8 ){

  6.          println( "Value of a: " + a );

  7.        }

  8. }

for使用yield(投射)

 
   
   
 
  1. /*

  2. var retVal = for{ var x <- List

  3.     if condition1; if condition2...

  4. }yield x

  5. */

  6. //案例

  7. var a = 0;

  8. val numList = List(1,2,3,4,5,6,7,8,9,10);

  9. // for 循环

  10. var retVal = for{ a <- numList

  11.               if a != 3; if a < 8

  12.             }yield a

  13. // 输出返回值

  14. for( a <- retVal){

  15.  println( "Value of a: " + a );

  16. }

Scala函数

  • 函数声明

 
   
   
 
  1. def functionName ([参数列表]) : [return type]

案例

 
   
   
 
  1. def sum(x:Int,y:Int):Int={

  2.  return x+y

  3. }

  4. //可以尝试省略返回值类型

  5. def multi(x:Int,y:Int)={

  6.  x*y

  7. }

  8. def sayHi(name:String):Unit={

  9.  println("hi~ "+name)

  10. }

  • Scala 函数传名调用

 
   
   
 
  1. object Test {

  2.    def main(args: Array[String]) {

  3.            var res1=call(sum,1,3)

  4.            var res2=call(multi,1,3)

  5.            println(res1+" "+res2)

  6.    }

  7.    def sum(x:Int,y:Int)={

  8.          x+y

  9.    }

  10.    def multi(x:Int,y:Int)={

  11.          x*y

  12.    }

  13.   //声明参数f是一个函数,x,y是参数,通常把call函数称为高阶函数

  14.    def call(f:(Int,Int)=>Int,x:Int,y:Int):Int={

  15.            return f(x,y)

  16.    }

  17. }

  • 可变长参数函数(要求必须放置在最后)

 
   
   
 
  1.  def sum(args:Int*):Int={

  2.          var sum:Int=0

  3.          for(agr <- args){

  4.            sum+=agr

  5.          }

  6.          return sum

  7.  }

  • 默认参数值

 
   
   
 
  1. def main(args: Array[String]) {

  2.         sayHi("jiangzz")

  3.         sayHi()

  4.    }

  5. def sayHi(name:String="zhangsan"):Unit={

  6.          println("hi~ "+name)

  7. }

  • 内嵌函数

 
   
   
 
  1. object Test {

  2.    def main(args: Array[String]) {

  3.      var res = factorial(5)

  4.      println(res)

  5.    }

  6.   //计算阶乘

  7.    def factorial(x:Int)={

  8.            def mulit(i:Int):Int={ //该函数存在递归,必须申明返回值类型

  9.                if(i > 0){

  10.                     i*mulit(i-1)

  11.                }else{

  12.                    1

  13.                }

  14.            }

  15.            mulit(x)

  16.    }

  17. }

  • 偏应函数

 
   
   
 
  1. def main(args: Array[String]) {

  2.      var say=saySomething(_:String,"zhangsan")

  3.      say("Hello")

  4.      say("welcome")

  5.    }

  6. def saySomething(welcome:String,name:String){

  7.            println(welcome+" ! "+ name)

  8. }

  • 指定函数名

 
   
   
 
  1. def main(args: Array[String]) {

  2.   saySomething(name="zhangsan",welcome="你好")

  3. }

  4. def saySomething(welcome:String,name:String){

  5.        println(welcome+" ! "+ name)

  6. }

  • 匿名函数

Scala 中定义匿名函数的语法很简单,箭头左边是参数列表,右边是函数体。使用匿名函数后,我们的代码变得更简洁了。

 
   
   
 
  1. (x:Int,y:Int) => {x+y}

  • 函数柯里化(Currying)

 
   
   
 
  1. def main(args: Array[String]) {

  2.    println(sum(1)(2))

  3. }

  4. def sum(x:Int)(y:Int):Int={

  5.    return x+y

  6. }

Scala初步

继续关注


以上是关于Scala初步的主要内容,如果未能解决你的问题,请参考以下文章

scala初步

Scala初步(基础篇)

Scala函数式编程初步(高阶函数)

Scala IDE for Eclipse的下载安装和WordCount的初步使用

Sbt的使用初步和用sbt插件生成eclipse工程

为什么Scala是可扩展的?