Scala基础

Scala

1.Scala与Java对比

Scala的特色:

1.优雅:一行代码相当于Java的多行代码
2.速度快:静态编译
3.spark依赖于Scala,所以Scala能更好的融合Hadoop生态圈
4.以jvm为基础运行,兼容Java

对比表格

JavaScala
1.字符串“”"…\n…""" 采用三对双引号支持字符串换行“str1”+"str2"采用+进行字符串拼接
2.返回值return var 采用return 进行返回默认返回最后一行表达式的值,如果使用return需要显示指定方法的返回值
3.访问修饰符默认为protect默认为public
4.默认导入的包java.lang.*java.lang.* scala scala.Predef
5.数据类型Java作为不纯粹的op包含了基本类型+引用类型全部引用类型
6.static支持静态不支持静态
7.范式支持OOP支持OOP+函数式编程
8.接口interfacetrait
9.OOP类和对象需要自己定义和实现支持单例对象、伴生对象和伴生类
9.方法的调用()表示调用调用无参方法时的可以省略

2.Scala的变量与数据类型

数据类型描述
Byte8为有符号补码整数,[-128,128)
Short16为有符号补码整数,[-32768,32768)
Int32为有符号补码整数,[-2147483648,214748364)
Long64位有符号补码整数,[-9223372036854775808,9223372036854775808)
Float32 位, IEEE 754 标准的单精度浮点数
Double64 位 IEEE 754 标准的双精度浮点数
Char16位无符号Unicode字符, 区间值为 U+0000 到 U+FFFF
String字符序列
Booleantrue或false
AnyVal所有基础类型的父类
Unit表示无值,和其他语言中void等同。用作不返回任何结果的方法的结果类型。Unit只有一个实例值,写成()。
Nullnull或空引用,不兼容值类型
NothingNothing类型在Scala的类层级的最底端;它是任何其他类型的子类型。
AnyAny是所有其他类的超类
AnyRefAnyRef类是Scala里所有引用类(reference class)的基类
Tuple1~22(1,…,22)最多22个允许不同类型元素的

变量的声明

1.不指定类型直接赋值

var var1 = 5;
val val1 = 6;

此时var1和val1的类型由值的类型确定,确定后不再改变
2.指定类型

var var1:String = "xyz";
val val1:String = "abc";

注:
Tuple的声明和输出

var e:Tuple2[Int,String] = (1,"henry")
println(s"${e._1}\t${e._2}")

特殊写法

var a,c=6	a和c值都为6

3.控制台输入输出

1.输出
常规输出可以用print()或者println()方法直接输出就可以

	var x = 10;
    var y = "yugfc";
    var z = 3.1415926;
    println(x)
    print(x);

而println()方法可以同时输出两个结果

println(s"${x}\t${z}")

格式化输出方法printf()不指定格式的场合即只写变量只能输出String类型常量或者变量,指定格式的场合按照如下格式

var x = 10;
var y = "yugfc";
var z = 3.1415926;
printf(y);
printf("{x:%d,y:%s,z:%f}",x,y,z)};

2.控制台输入
1)Console.readline()

var a = Console.readline();

2)BufferedReader

	val br = new BufferedReader(new InputStreamReader(System.in));
	var a = br.readLine();

3)Stdin同1)

4.运算符

算术:不支持 ++|–
关系:同java
逻辑: 同java
赋值:=
不支持三目运算符

5.分支结构

1.if分支结构
Scala同样具有单分支、双分支和多分支,基本结构同Java
2.模式首位和模式匹配替代了switch-case
1)简单匹配

	var dial = 7;
    var t = dial match {
      case 1=>"充值"
      case 2=>"余额"
      case 3=>"人工"
      case _=>"其他"
    }
    println(t)

2)if守卫

	var score = 88;
    var level = score match {
      case _ if(score>=90)=>"A"
      case _ if(score>=80)=>"B"
      case _ if(score>=60)=>"C"
      case _=>"D"
    }
    println(level)

3)模式首位

	val rMail = ".*@\\w+\\.(com|cn|net|org)".r
    val rPhone = "1[3-8]\\d{9}".r
    val rPid = "\\d{17}(\\d|x)".r
    var cnt = "aa@qq.com"
    println(cnt match {
      case rMail(cnt)=>"mail"
      case rPhone(cnt)=>"phone"
      case rPid(cnt)=>"pid"
      case _ => "unknown"
    })

3.样例类匹配

//1.创建样例类
	case class PubMsg(t:String,msg:String) extends Message(t,msg)
	case class ToMsg(t:String,to:Array[String],msg:String) extends Message(t,msg)
	case class PriMsg(t:String,to:String,msg:String) extends Message(t,msg)
	//2.创建样例类对象
	var msg1:Message = PubMsg("1","hello")
    var msg2:Message = ToMsg("2",Array("henry","pola"),"world")
    var msg3:Message = PriMsg("3","ariel","world")
	//3.使用match...case表达式进行匹配
    println(msg3 match {
      case PubMsg(t,msg) => "PUB"
      case ToMsg(t,toList,msg) => "TOS"
      case PriMsg(t,to,msg) => "PRI"
    })
	
	println(msg3 match {
      case _:PubMsg => "PUB"
      case _:ToMsg => "TOS"
      case _:PriMsg => "PRI"
    })

6.循环结构

1.while循环
同Java
2.do…while循环
同Java
3.for循环

	//i∈[min,max]
	for(i<-min to max){}
	//i∈[min,max)
	for(i<-min until max){}
	//循环嵌套i为外层循环j为内层循环
	for(i<-min to max;j<-min to max){}
	//if相当于continue
	for(i<-min to max;if...;if...){}
	//集合的输出(Collection换成Array就是输出数组)
	for(i<-Collection){}
	//将i放到value集合中
	val value = for(i<-min to max;if...;if...) yield i
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值