scala基础语法

1.变量

val:常量 & var:变量

val定义之后值不可变

scala> val name = "joey"
name: String = joey

scala> name
res0: String = joey

scala> name = "karol"
<console>:8: error: reassignment to val
       name = "karol"
            ^

scala> name
res1: String = joey

var定义后值可变

scala> name
res1: String = joer

scala> var age = 17
age: Int = 17

scala> age
res2: Int = 17

scala> age = 18
age: Int = 18

scala> age
res3: Int = 18

定义多个变量:
scala> var num1,num2 : Double = 0
num1: Double = 0.0
num2: Double = 0.0

2.数据类型:

Scala中没有Java中的原生类型,以下数据类型全部都是对象

和Java相同的八大数据类型,但第一个字母都是大写

Byte,Short,Int,Long,Float,Double,Char,Boolean

和Java不同的数据类型

String,Nothing,Unit,Any,Null

注:

Nothing:表示没有值

Unit:表示没有返回值,相当于void

Null:空值或空引用

Any:任何类型


3.String类型的声明

val str = "我是字符串"

若字符串中有特殊符号,可用转义
val str2 : String = "我是/"字符串/""
 
也可以使用三个双引号,里面可以包含所有符号,包括换行符
val str3 : String = """ 我是"字符串""""

4.自动类型推断
scala可根据变量的赋值类型来自动推断变量的类型
如上例中:
var age = 18
根据18为Int类型,自动推断age为Int类型
val name = "joey"
根据"joey"为String,自动推断name为String类型

也可以像java一样定义变量的类型,写法略有不同:

scala> var money : Float = 100
money: Float = 100.0

scala> money
res4: Float = 100.0

scala> money = 101
money: Float = 101.0

若不定义money的类型,会自动推断为Int:
scala> val money = 100
money: Int = 100
若想要自动推断为Float,需要这样定义:
scala> val money = 100f
money: Float = 100.0


5.类型的判断与转换
常用的两个API:isInstanceOf && asInstanceOf

isInstanceOf类型判断,返回Boolean:
scala> val x : String = "255"
x: String = 255

scala> x.isInstanceOf[Int]
res10: Boolean = false

asInstanceOf类型转换,与java强转类似:
scala> val x : Long = 255
x: Long = 255

scala> x.asInstanceOf[Int]
res13: Int = 255
如果不能强转的类型之间,会报ClassCastException,如:
scala> "333".asInstanceOf[Int]
java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer

除了这两个API之外,每种数据类型都会有toString,toInt之类的方法


6.lazy关键字
使用lazy关键字声明的变量,仅在第一次调用时,才初始化该变量,分配相应堆栈空间
使用场景多为读取一些大文件,或者产生IO的变量
如:

import scala.io._
lazy val line = fromFile("D:/data/....").mkString
执行到此时,不会初始化line变量,也不会进行IO操作
print(line)
当第一次调用line时,才会初始化变量,执行相关操作

7.scala的操作符
scala的操作符基本上和Java的一样,优先级也和java的一样
有几点特殊的地方:
a.不支持java中的三元操作符(?:),也不支持++/--
b.scala的操作符实质上就是对象的函数,如:

scala> val a = 1
a: Int = 1

scala> a + 1
res19: Int = 2

scala> a.+(1)
res20: Int = 2

所以反过来,类的函数也可以当作操作符来使用

scala> 1.to(4)
res23: scala.collection.immutable.Range.Inclusive = Range(1, 2, 3, 4)

scala> 1 to 4
res24: scala.collection.immutable.Range.Inclusive = Range(1, 2, 3, 4)

scala> 1.max(5)
res25: Int = 5

scala> 1 max 5
res26: Int = 5

c.scala几乎所有的操作符都是左连接(从左到右),只有":"结尾的操作符是右连接,如:

1 :: 2 :: 3 ::Nil

8.scala的表达式
每行以换行符作为结尾,也可以加上";"
scala的表达式的返回值就是最后一行的执行结果,如:

scala> val x = {
     | print("hello")
     | }
hellox: Unit = ()

scala> val x = {
     | print("hello")
     | "hello"
     | }
hellox: String = hello

scala> val x = {
     | print("hello")
     | 234
     | }
hellox: Int = 234
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,001评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,210评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,874评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,001评论 1 291
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,022评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,005评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,929评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,742评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,193评论 1 309
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,427评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,583评论 1 346
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,305评论 5 342
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,911评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,564评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,731评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,581评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,478评论 2 352

推荐阅读更多精彩内容