Scala Turtuial-基本语法

概述

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.

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变量在进行定义时必须初始化。

基本变量和占位符

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变量只能修饰不可变变量。

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等等
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)

元组类型

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

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语句。

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-集合

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Coding迪斯尼

使用普拉特解析法解析复杂的算术表达式

1642
来自专栏desperate633

Java中的collection架构总结

collection是java中用来收集对象的。java提供了collection的Api,为了避免出现死记api的情况,为了更好的使用collection,首...

874
来自专栏大数据钻研

让你分分钟学会 javascript 闭包

闭包,是 javascript 中重要的一个概念,对于初学者来讲,闭包是一个特别抽象的概念,特别是ECMA规范给的定义,如果没有实战经验,你很难从定义去理解它。...

2764
来自专栏一名合格java开发的自我修养

java或判断优化小技巧

写业务代码的时候,我们经常要做条件判断,有的时候条件判断的或判断长达20多个。reg.equals("1") || reg.equals("2") || reg...

621
来自专栏Java爬坑系列

【Java入门提高篇】Day14 Java中的泛型初探

  泛型是一个很有意思也很重要的概念,本篇将简单介绍Java中的泛型特性,主要从以下角度讲解:   1.什么是泛型。   2.如何使用泛型。   3.泛型的好处...

3286
来自专栏和蔼的张星的图像处理专栏

55. 比较字符串

比较两个字符串A和B,确定A中是否包含B中所有的字符。字符串A和B中的字符都是 大写字母 样例 给出 A = "ABCD" B = "ACD",返回 tru...

1311
来自专栏怀英的自我修炼

怀英漫谈8 - JS的字符串和数

你好,这周想和你聊聊JS中的基本语法的另一个部分——字符串和数组的使用。这次我们先聊聊字符串和它的方法。

1282
来自专栏信数据得永生

JavaScript 编程精解 中文第三版 三、函数

3317
来自专栏take time, save time

初级程序员面试不靠谱指南(二)

3.read-only的const。如果你突然冒出一句看似很高深的话但又不解释一般都是装逼,就像前面提到过const准确的应该理解为一个read-only的变量...

2907
来自专栏程序员的知识天地

Python里面这些点,据说80%的新手都会一脸懵逼

Python虽然语法简单,通俗易懂,但是再简单它也是一门语言,就像一棵大树,总有一些树枝是弯弯绕绕的,让新手看完之后一脸懵逼,今天我们就来说说这几个点,反正我学...

773

扫码关注云+社区

领取腾讯云代金券