1 变量和函数

变量:
Scala 有两种变量, val 和 var。
val:常量,类似于 Java 里的 final 变量。一旦初始化了, val 就不能再赋值了。
va: 如同 Java 里面的非 final 变量。var在生命周期中可以被多次赋值。
下面是一个 val 的定义:
eg:
val x:T val x:T=e
var x:T var x:T=e
函数:定义 def

2 结构控制语句

判断语句 if:
if(A)
B

else
C

eg:
def min(x:Int,y:Int):Int={
var a=x

if(x>y)
a=y

return a
}
循环(while/do语句)
while(A) B
或者:
do B while(A)
(先执行一次循环体)
枚举(for表达式)
For表达式能用任意条件进行各种形式的枚举:
for(i<- e)
E(i) //表达式
注:发生器遍历e中的元素,每一次枚举运行表达式E(i)
e可以是各种集合,包括数组、列、表达式等,或是有上下界的数值范围:
1 to 4 (1=<i<=4)
1 until 4 (1=1=<i<=4-1)(不包含上界)
yield关键字:
for(i <- e)
yeild E(i)  //用于赋值,即把每一次枚举的值记录在集合中
若E(i)由花括号括起,yield必须在花括号外,即:
for(i <- e)
yeild {E(i)}
匹配(match表达式)
类似于switch:
a match{
case e1=> E1
case e2=> E2
....    ....
case_=>...
}
若a匹配e1则执行E1,若a匹配e2,则执行E2 ,以此类推
在case后接_代表任意,
match表达式可以直接赋值:
eg:
val sign=a match{
case e1=> 123;
case e2=>"123";
}
异常处理(throw/try)
try{函数体}
catch{
case....;
case....;
}
finally{
A.close()

}
输出(print/println)
print(A)/println(A):A可以是值或者表达式,当A是表达式时,则输出表达式的值
println 输出时自动换行
输入(readLine)
输入通常使用read函数,readLine是从控制台读取一行输入,指定类型时为readT,T是所指定的类型,如
val age=readInt()
在控制台输入:zhangsan
其他语句
return 语句表示返回某个值,但是Scala事实上无须使用return语句
声明函数时使用return语句,必须声明返回值的类型,如def abd():T={return}
break/continue在C++中非常常见的控制结构语句,但在Scala中是不必要的,可以
使用布尔值类型的量通过IF语句进行控制

3 数组

定长数组声明:
val A=new Array[T](N)   eg  val A=new Array[Int](10)
数组成员默认初始化:Int初始化为0,String默认初始化为Null
也可以新建数组时给出值:
val B=Array(N1,N2)
数组初始化后能赋值:或是对指定的数组成员赋值:
val G=B+Array(1,2)   val G=B-Array(1,2)
变长数组:
import scala.collection.mutable.ArrayBuffer
val C=new ArrayBuffer[T]() //声明一个空数组,此时C是一个全空数组,数组元素为0
变长数组操作:
在数组尾部加一个类型为T的元素e1,e2、e3:
C+=e1
C+=(e2,e3)
在数组尾部增加数组Array(e2,e3)
C++=Array(e2,e3)
移除最后一个元素
C.timEnd(1)
在第二个元素后插入e3:
C.insert(2,e3)
在第二个元素后插入e2,e3,e4:
C.insert(2,e2,e3,e4)
移除第3个元素后的一个元素:
C.remove(3)
移除第3个元素后的2个元素:
C.remove(3,2)
D=C.toArray  //把变长数组转为定长数组D
E=A.toBuffer // 把定长数组转为变长数组
数组遍历:
for(i < - C) println(i)  直接遍历数组的成员
for(i < - 0 to ( C.length-1) )println(C(i)) 通过遍历数组的下标获得成员  遍历数组C中的所有成员并输出
额外的,有
for(i < - 0 to (C.length,2) ) println(C(i))  每两个元素一条进行遍历
for(i < - (0 to C.length).reverse) println(C(i))   倒序遍历
同过for语句枚举数组成员,可以实现多种数组控制,如把数组成员各加1并生成新数
组: val NEW=for(i < - C) yield i+1 这种数组生成是对应原数组类型的(定长/变长)

4 映射

    数组时包含一组元素的集合,映射是包含一组键值对应元素的集合
    不可变映射:
        val Z=Map(a1 -> b1,a2->b2,a3->b3)
        val Z=Map((a1,b1),(a2,b2),(a3,b3))
        注:an 与bn 的类型可以不一致,an是键,bn是值,an互不相同,bn可以相同
    
    获取映射对应键的值:
    val a=Z(an)或val b=Z.get(an)
        当映射中不含对应的键时抛出异常,
        可以利用contains方法检查映射中是否含有某个键
    val c=Z.contains(an)  //返回布尔值
    
        组合调用:
        val d=Z.getOrElse(an,0)
    可变映射
        val Y=scala.collection.mutable.Map((a1,b1),(a2,b2),(a3,b3))
        val X=new scala.collection.mutable.Map[T1,T2]
    
    
    可变长映射的键值操作跟变长数组类似:
    Y(an)=bn  //有这个值则更新,无则新建对应的值
    Y+=(a4->b4,a5->b5)  //增加键值对
    Y-=(a4)    //删除键值对
 
    对于不可变映射可以通过构造新的映射来增删其键值
    val W=Z+(a4->b4,a5->b5)   //新建了新的映射
    val V=W-(a4->b4,a5->b5)
    映射枚举:
        for((i,j)<-Z)
            E(i,j)
        
    互换映射的键值:
        for((i,j)<-Z)
            yield(j,i)
    
    获取映射内键的集合或值的集合:
        val e=Z.keySet
        val f=Z.values
    
 

5 元组

    若干个单个的值包含在圆括号便构成元组
    val g=(1 , 1.2,‘A’) //(Int,Double,Char)类型的元组
    利用方法_1、 _2、 _3访问元组的组元
    val h=g._1 或 val h=g _1
    
    
    元组把多个值捆绑在一起,使他们能同时被处理
    zip方法:
    
zip方法能把几个集合结合起来
val one=Array(‘a’,‘b’,‘c’ )
val two=Array( 1, 2, 3)
val three=one.zip(two) 或 val three=one zip two  //对应的就生成一个元素是二元的数组

val four=one.zip(two).toMap 或 val four = one zip two toMap  //对应的生成一个以数组one为键,数组two为值的映射

6 包的引用

  Scala通过不同的包能使用很多类型的表达式,而包的引入在Scala中相当灵活

 包是用来管理名称的,包括该名称的声明、定义等
 能给已有的包增加名称,或者创建新的包
 包是能互相嵌套的如: scala.collection.mutable的结构如下
 package scala { package collection { package mutable {……} } }
 包声明链scala.collection.mutable并不使scala与scala.collection可见
 包声明链亦不对包含的包进行声明
 即声明scala.collection并不意味着声明scala.collection.mutable

 
{……}号之间声明的量只有在{}内是有意义的
{val a=0... {...val b=a}...} 内层能调用外层声明的量
{val a=b...{val b=0...}...} 外层不能调用内层声明的量
内层声明与外层声明相同时,内层使用的是内层的声明,外层使用的是外层的声明
 如: val x=2 for( i < - 1 to 4) print(x+i)
 val x=2 for(x < - 1 to 4) print(x+x)

{val a=0... {...val b=a}...} 内层能调用外层声明的量
{val a=b...{val b=0...}...} 外层不能调用内层声明的量
内层声明与外层声明相同时,内层使用的是内层的声明,外层使用的是外层的声明
 如: val x=2 for( i < - 1 to 4) print(x+i)
 val x=2 for(x < - 1 to 4) print(x+x)

{val a=b...{val b=0...}...} 外层不能调用内层声明的量
内层声明与外层声明相同时,内层使用的是内层的声明,外层使用的是外层的声明
 如: val x=2 for( i < - 1 to 4) print(x+i)
 val x=2 for(x < - 1 to 4) print(x+x)

内层声明与外层声明相同时,内层使用的是内层的声明,外层使用的是外层的声明
 如: val x=2 for( i < - 1 to 4) print(x+i)
 val x=2 for(x < - 1 to 4) print(x+x)

 如: val x=2 for( i < - 1 to 4) print(x+i)
 val x=2 for(x < - 1 to 4) print(x+x)
 val x=2 for(x < - 1 to 4) print(x+x)

2 Scala基本语法的更多相关文章

  1. Scala基础语法 (一)

    如果你之前是一名 Java 程序员,并了解 Java 语言的基础知识,那么你能很快学会 Scala 的基础语法. Scala 与 Java 的最大区别是:Scala 语句末尾的分号 ; 是可选的. 我 ...

  2. Scala进阶之路-Scala高级语法之隐式(implicit)详解

    Scala进阶之路-Scala高级语法之隐式(implicit)详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 我们调用别人的框架,发现少了一些方法,需要添加,但是让别人为你一 ...

  3. scala基本语法和单词统计

    scala 基本语法 1.声明变量 (1)val i = 1 使用val声明的变量值是不可变的,相当于java里final修饰的变量,推荐使用. (2)var i = "hello" ...

  4. 【Scala学习之一】 Scala基础语法

    环境 虚拟机:VMware 10 Linux版本:CentOS-6.5-x86_64 客户端:Xshell4 FTP:Xftp4 jdk1.8 scala-2.10.4(依赖jdk1.8) spark ...

  5. Scala基本语法总结(一)

    Scala基本语法总结 时隔快一年了,又捡起scala,不是想学的有多么的精通,只是想把之前遇到的知识点和实践中遇到的重点进行归纳总结,对以后的面试或许有点帮助吧! 一.scala开发环境的配置 我这 ...

  6. 【scala】语法的省略

    我们直到JAVA在语法方面是冗长的,但是JAVA的可读性非常好. 在Scala的语法并不像JAVA那样冗长,但是又不失可读性,我们这里记录一下常见的语法省略. 首先是我们可以省略数据类型,因为Scal ...

  7. 1.scala基础语法总结

    Scala基础语法总结:Scala 与 Java 的最大区别是:Scala 语句末尾的分号 ; 是可选的.如果一行里写多个语句那么分号是需要的 val s = "菜鸟教程"; pr ...

  8. scala基本语法

    scala基本语法scala函数1 def定义方法2 方法的返回值类型可以省略3 方法体重最后一行计算结果可以返回 return 如果省略方法类型4 方法参数 要指定类型5 如果方法体可以一步搞定 方 ...

  9. scala 基础语法

    文章内容全部来自:http://twitter.github.io/scala_school/zh_cn/index.html 表达式 scala> 1 + 1 res0: Int = 2 值 ...

  10. Scala系统学习(三):Scala基础语法

    如果您熟悉Java语言语法和编程,那么学习Scala将会很容易.Scala和Java之间最大的句法差异在于行结束字符的分号(;) 是可选的. 当编写Scala程序时,它可以被定义为通过调用彼此的方法进 ...

随机推荐

  1. python(32):多进程(2) multiprocessing

    python 多线程:多线程 由于Python设计的限制(我说的是咱们常用的CPython).最多只能用满1个CPU核心. Python提供了非常好用的多进程包multiprocessing,你只需要 ...

  2. Vagrant 无法校验手动下载的 Homestead Box 版本

    起因 4年前电脑,配置不太好了,现有的 Homestead 运行起来太吃内存.在修改了 Homestead.yaml 文件里 memory 选项的内存配置为 1024 后,应用最新配置重启失败. 索性 ...

  3. 【内核】几个重要的linux内核文件【转】

    转自:http://www.cnblogs.com/lcw/p/3159394.html Preface 当用户编译一个linux内核代码后,会产生几个文件:vmlinz.initrd.img, 以及 ...

  4. gnuplot生成MySQL QPS图形

    1.建立MySQL QPS执行脚本 #!/bin/bash mysqladmin -uroot -p' extended-status -i1|awk \ 'BEGIN{flag=0; print & ...

  5. 一步一步搭建11gR2 rac+dg之DG 机器配置(七)【转】

    DG 机器配置 转自: 一步一步搭建11gR2 rac+dg之DG 机器配置(七)-lhrbest-ITPUB博客http://blog.itpub.net/26736162/viewspace-12 ...

  6. 转载:Google 官方应用架构的最佳实践指南 赞👍

    官方给的实践指南,很有实际的指导意义,  特别是对一些小公司,小团队,给了很好的参考意义. 原文地址: https://developer.android.com/topic/libraries/ar ...

  7. Python subprocess- call、check_call、check_output

    简介 subprocess模块用来创建新的进程,连接到其stdin.stdout.stderr管道并获取它们的返回码.subprocess模块的出现是为了替代如下旧模块及函数:os.system.os ...

  8. java 多线程总结篇4——锁机制

    在开发Java多线程应用程序中,各个线程之间由于要共享资源,必须用到锁机制.Java提供了多种多线程锁机制的实现方式,常见的有synchronized.ReentrantLock.Semaphore. ...

  9. GreenPlum学习笔记:基础知识

    一.介绍 GreenPlum分布式数据仓库,大规模并行计算技术. 无共享/MPP核心架构 Greenplum数据库软件将数据平均分布到系统的所有节点服务器上,所以节点存储每张表或表分区的部分行,所有数 ...

  10. Spark(十一)Spark分区

    一.分区的概念 分区是RDD内部并行计算的一个计算单元,RDD的数据集在逻辑上被划分为多个分片,每一个分片称为分区,分区的格式决定了并行计算的粒度,而每个分区的数值计算都是在一个任务中进行的,因此任务 ...