1,什么是scala
scala是用java编写的,实现了java语言脚本化,有丰富的类库,因为java的类库就是他的类库,自己有封装了很多类库,使得scala这门语言功能很强大.他是一个完全面向对象的一门语言,数据类型,方法,对象,类都是对象
注意:scala是一种解释性语言,也就是你使用一个方法或者变量,他会直接出现内容,我们也叫REPL(read-eval-print loop)
2,scala常用的类型
Byte(字节类型) Char(字符类型) Short(短整型) Int(整数类型) Long(长整型) Float(单浮点类型) Double(双浮点类型) Boolean(布尔类型)
3,变量和常量
val a =100; //常量(不可改变)
var a=100;//变量(可改变)
4,方法各种写法
在scala中方法可以写的很随便如:
(1) 1.toString
(2) 1.toString()
(3) 1 toString
(4) 1 toString()
以上用法都是可以把1转成字符串类型
5,大数方法(BigInt)
val a=BigInt("9999999999");
a*a*a*a=9999999996000000000599999999960000000001
6,导包
import scala.math.sqrt //准确导包
import scala.math._ //导入math包下的所有类
import scala.math.sqrt ,scala.math.min //导入多个包
import scala.math.{sqrt=>s} //给导入类指定别名
7,函数和方法介绍
方法和类相关,通过类和对象调用
函数和类不相关,可以直接调用
8,apply方法
apply方法在一般情况下我们都可以把他看成()的一种重写方式,他背后的实现原理是一个名叫apply()方法来实现的我们举个例子:
"hello"(2)和"hello".apply(2)是一样的
9,控制结构(if else)
scala的表达式是有返回值得,返回最后一条语句的返回值
如: if(10==10){ 10,11} else 12 //他会返回11
基本格式: val a=if(x>1) x else x-1
//注意如果只有单个表达式,可以不需要括号,如果你没有用else他会默认返回Unit类型
10,Unit类型
无有用值的占位符,表示(),类似于java中的void
11,粘贴模式
在我们没有用到ide的开发工具时,如果我们要执行很多表达式可能行不通,我们就可以使用粘贴模式。,可以一下子输入很多表达式一起全部执行
:paste //进入粘贴模式
ctrl+d //退出
12,输出和输入
print : print(100) //不换行
println : println(100) //换行输出
printf : printf("%d + %d = %d",100
,200 , 100 + 200) //c语言风格输出方式
readLine: readLine("your name") //和java中的scanner一样,用于控制台输入
13,循环(for,while)
while循环:(和java没什么区别)
//99乘法表 scala>:paste var r = 1 ; while(r < 10){ var c = 1 ; while(c < 10){ if(c <= r){ printf("%dx%d=%d\t",c,r,r*c); } c += 1 ; } println(); r += 1 ; }
for循环
scala中的for循环和java中的增强for循环差不多 只不过换了一种形式 for循环的99乘法表 :paste //进入编辑设置 for(i <- 1 to 9){ //1 to 9 :生成1到9的range数(可迭代) for(j <- 1 to 9 ){ if(j <= i){ printf("%dx%d=%d\t",j,i,i*j); } } println(); } //break //跳出 一般用于结束当前控制表达式或者循环 //for循环高级用法 1,for循环增强 for(i <- 1 to 9;j <- 1 to 9) print(i*9) //相当于嵌套for循环这样会等简便 2,for循环守卫条件 for(i <- 1 to 9 if if i==2;j <- 1 to 9 if i==j) println(i*j) //相当于在for循环下面进行if判断 3,for循环多条件逻辑运算 for(i <- 1 to 100){ if(i%2==2 && i%3==0){ println(i) } 4,yield 生成器 val a=for(i <- 1 to 10) yield i * 2 //所谓生成器就是把操作后的数据用()包起来