前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Scala Turtuial-基本语法

Scala Turtuial-基本语法

作者头像
吕海峰
发布2018-04-03 15:38:23
6430
发布2018-04-03 15:38:23
举报
文章被收录于专栏:Brian

概述

Scala是将面向对象思想与函数式编程思想集一身的编程语言,特别是在大数据和流式处理方面的快速发展,基于Scala语言一些重要的开源框架随之发布,比如:Spark,Kafka等。学习Scala的重要性无须多言,博主打算写三个系列的Scala文章:

1.Scala Turtuial-基础系列

2.Intermediate Scala-进阶系列

3.Advanced Scala-高级系列

今天是Scala Turtuial系列的基本语言的介绍,废话少说直接撸代码。

入门

在详细讲解Scala的基本特性之前,我们需要搭建Scala的开发环境和编译环境,基本语法推荐大家使用scala自带的交互式环境来学习,随着学习的深入和代码量大的增多,后续可以选择Idea、Eclipse和Emacs来作为自己的开发环境。

Scala是基于JVM上运行,所以我们首先要搭建JVM 运行环境。这个网上很多教程,自己参考。下载Scala-2.11.8.

代码语言:javascript
复制
tar -zxf scala-2.11.8.tgz
mv scala-2.11.8 /opt/soft
#配置SCALA环境设置
emacs /etc/profile
export SCALA_HOME=/opt/soft/scala-2.11.8
export PATH=$SCALA_HOME/bin:$PATH
#使其生效
source /etc/profile
#验证scala版本
scala -version

变量和基本数据类型

Scala中由两种类型的变量:可变变量和不可变变量。可变变量是变量被赋值后,变量的值可以随着程序的运行而改变;不可变变量一旦被赋值,在整个运行过程中不能被改变。可变变量通过var进行定义,不可变变量通过val进行定义。通过_占位符来初始化为默认null。注:Scala变量在进行定义时必须初始化。

基本变量和占位符
代码语言:javascript
复制
scala> val test="brian lv"
test: String = brian lv
scala> test="eric lv"
<console>:12: error: reassignment to val
       test="eric lv"
           ^
scala> var test="brian lv"
test: String = brian lv
scala> test="eric lv"
test: String = eric lv
scala> var test:Float = _
test: Float = 0.0
scala> var test:Int = _
test: Int = 0
scala> var test:Char = _
test: Char = ?
scala> var test:String = _
test: String = null
lazy变量

lazy修饰的的变量只有在使用时才会被复制,lazy变量只能修饰不可变变量。

代码语言:javascript
复制
scala> lazy val test="brian lv"
test: String = <lazy>
scala> test
res1: String = brian lv

lazy修饰的变量,在定义该变量时并没有赋值而是在使用时进行赋值的。

基本数据类型

1.Byte 8位有符号的整数

2.Short 16位有符号的整数

3.Int 32位有符号的整数

4.Long 64位有符号的整数

5.Char 16位无符号数

6.String

7.Float 32位浮点数

8.Double 64位浮点数

9.Boolean 布尔型

基本数据类型使用原则:

  • 直接输入浮点数,scala编译器会自动进行类型推导并自动解释成Double类型;如果需要定义为Float类型则在浮点数后加F或者f。
  • Char类型是字符类型,通过单引号包裹。
  • 数值类型满足基本的算数运算操作,包括:+、-、*、/、%
  • 对象比较运算,是基于内容比较的。
  • 字符串运算操作:indexOf,toUpperCase,toLowerCase,reverse,drop等等
代码语言:javascript
复制
scala> 1==1
res5: Boolean = true
scala> 1==1.0
res6: Boolean = true
scala> val x = new String("hello")
x: String = hello
scala> val y = new String("hello")
y: String = hello
#等同于==
scala> x.equals(y)
res10: Boolean = true
scala> x.eq(y)
res11: Boolean = false
scala> x.toUpperCase()
res15: String = HELLO
scala> x.reverse
res16: String = olleh
scala> "hello".drop(3)
res17: String = lo
scala> 1*10-2::2::Nil
res19: List[Int] = List(8, 2)
#::代表List的构造,Nil代表List构造结束,:::代表List拼接在一起。
scala> 1*10-2::2::Nil:::List(89,89)
res20: List[Int] = List(8, 2, 89, 89)
元组类型
代码语言:javascript
复制
scala> val test = ("hello","world","brian")
test: (String, String, String) = (hello,world,brian)
scala> val (o,n,e) = test
o: String = hello
n: String = world
e: String = brian
scala> test._1
res24: String = hello
scala> test._2
res25: String = world
符号类型

scala中有个比较特殊的类型即符号类型,通过单引号’来表现符号类型。符号类型主要在模式匹配和内容判断比较重要。

代码语言:javascript
复制
scala> val test='scala
test: Symbol = 'scala
scala> if(test=='scala){
     | println("test value is scala")
     | }else{
     | println("test value is "+test)
     | }
test value is scala
程序控制

Scala的程序控制和其他C++,Java的没什么太大区别。在形式上区别比较大的是,for语句。

代码语言:javascript
复制
for(i<-表达式){}
scala> for(i<-1 to 5) println("i==="+i)
i===1
i===2
i===3
i===4
i===5
scala> for(i<-1 until 3) println("i=="+i)
i==1
i==2
#2为step
scala> for(i<-1 until (5,2)) println("i=="+i)
i==1
i==3
scala> for(i<-1 to (5,2)) println("i=="+i)
i==1
i==3
i==5
scala> for(i<-1 to (5,1) if(i%2==0);if(i>2)) println("i=="+i)
i==4

<-代表生成器,1 to 5相当于1.to(5)通过隐式转换RichInt类型。

总结

Scala的语言很简洁,也很灵活,在学习的路途中多多实战和思考。我们将介绍Scala Turtuial-集合

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017-08-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 概述
  • 入门
    • 变量和基本数据类型
      • 基本变量和占位符
      • lazy变量
      • 基本数据类型
      • 元组类型
      • 符号类型
      • 程序控制
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档