scala 版HelloWorrld

object HelloWorld{
   def main(args:Array[String]){
   println("Hello World!!!");
}
}

1.使用scalac HelloWorld.scala 编译下:

2.运行scala程序:scala HelloWorld

scala 无基本类型和包装类型之分

scala 方法: block内最后一行为返回值

没有返回值的方法写法:

scala> def sayHello(name:String){
| println("hello "+name)
 }
sayHello: (name: String)Unit

方法注意:

1.没有参数的方法可以不带圆括号访问

scala> def sayHello{
| println("hello world")
| }
sayHello: Unit

scala> sayHello
hello world

2.scala 没有静态方法,通过object 来实现

class TestStaticObject {
}

object TestStaticFun{
def add(x:Int,y:Int)=x+y
}

object TestStaticObject{
     def main(args: Array[String]): Unit = {
     val res = TestStaticFun.add(2,3)
    println(res)
}
}

默认参数

def saySth(name:String="jack")
    object TestFuncParam {
      //参数默认值就是在参数定义时加=号指定一个default 值
    def loadConf(conf:String="true") {
          println(conf)
}

def main(args: Array[String]): Unit = {
     loadConf()
   // loadConf("ok")
}
}

带名参数

(赋值时顺序与定义时顺序不一致)

object TestFuncParam {
//参数默认值就是在参数定义时加=号指定一个default 值
     def loadConf(conf:String="true") {
     println(conf)
}
def sayInfo(name:String,age:Int){
println(name+":"+age)
}
def main(args: Array[String]): Unit = {
    loadConf()
   // loadConf("ok")
   sayInfo("tom",18)
//带名参数
  sayInfo(age=18,name="zhanggao")
}
}

变长参数:

(x :Int *)

//变长参数
def add(x:Int *)={
for(i<-x){
println(i)
}
x.sum //累加
}

def main(args: Array[String]): Unit = {
loadConf()
// loadConf("ok")
sayInfo("tom",18)
//带名参数
sayInfo(age=18,name="zhanggao")
val res = add(4,5,6,7,8)
println(res)
}

流程控制

if:

val x = 11;
if(x>10) println("x is bigger than 10") else println("x is less than 10")
var result = 0
val a = 10
val b=20
//在java中的写法
// if(a>b){
// result = 1
// }else{
// result = -1
// }
//scala中的简洁写法
result = if(a>b) 1 else -1
for:
for(i<-1 to 10){
println(i)
}

//for 循环可以做条件过滤

for(i<-1 to 10 if i % 2==0){
println(i)
}

1 to 10 = 1.to(10)

1.until(10) 10没有了

集合

定长数组

val array_name = new ArrayT

val array_name = Array(“a”,”b”,”c”)

通过()访问,而不是[]

丰富的方法:

sum/max/min/

reverse

scala> val arr = new Array[String](3)
arr: Array[String] = Array(null, null, null)
scala> val arr1=Array(1,2,3);
arr1: Array[Int] = Array(1, 2, 3)

变长数组:

import scala.collection.mutable.ArrayBuffer
val buff = new ArrayBuffer[T]()

丰富的方法:

+=/++=/-=/–=/

insert/remove/toArray/trimEnd()

sum/max/min/

reverse/

scala> val arr3 = new scala.collection.mutable.ArrayBuffer[String]()
arr3: scala.collection.mutable.ArrayBuffer[String] = ArrayBuffer()
scala> arr3 +="tom"
res9: arr3.type = ArrayBuffer(tom)
scala> arr3 ++= Array("lucy","rose","ombama")
res10: arr3.type = ArrayBuffer(tom, lucy, rose, ombama)
scala> arr3 -= "tom"
res11: arr3.type = ArrayBuffer(lucy, rose, ombama)
scala> arr3.insert(2,"jack")
scala> arr3
res13: scala.collection.mutable.ArrayBuffer[String] = ArrayBuffer(lucy, rose, jack, ombama)
scala> arr3.remove(2)
res14: String = jack
scala> arr3
res15: scala.collection.mutable.ArrayBuffer[String] = ArrayBuffer(lucy, rose, ombama)
scala> arr3.trimEnd(2)
scala> arr3
res17: scala.collection.mutable.ArrayBuffer[String] = ArrayBuffer(lucy)
scala> val arr4 = new scala.collection.mutable.ArrayBuffer[Int]()
arr4: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer()
scala> arr4 ++= Array(2,34,5,6)
res18: arr4.type = ArrayBuffer(2, 34, 5, 6)
scala> arr4.sum
res19: Int = 47
scala> arr4.max
res20: Int = 34
scala> arr4.min
res21: Int = 2
//toArray并不是把它自己变成定长数组,而是产生新的数组
scala> arr4.toArray
res22: Array[Int] = Array(2, 34, 5, 6)
scala> arr4
res23: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(2, 34, 5, 6)

定长数组也有 max、min、sum、reverse方法

遍历数组:

scala> val arr = new Array[String](6)
arr: Array[String] = Array(null, null, null, null, null, null)
scala> for(i <- 0 until arr.length) arr(i)= i+""
scala> arr
res25: Array[String] = Array(0, 1, 2, 3, 4, 5)
scala> for(i <- 0 until arr.length) println(arr(i))
0
1
2
3
4
5
推荐写法:
scala> for(i <- arr) println(i)
0
1
2
3
4
5

Map

不可变: val age = Map(“jack” -> 18,”lucy” -> 20)

可变:

val info = scala.collection.mutable.Map(“a” -> 1)

指定泛型:

val info = scala.collection.mutable.Map[String,Int]()
scala> val m = Map("jack"->18,"lucy"->20)
m: scala.collection.immutable.Map[String,Int] = Map(jack -> 18, lucy -> 20)
scala> m("jack")
res28: Int = 18
scala> m.get("jack")
res29: Option[Int] = Some(18)
scala> m.get("jack2")
res30: Option[Int] = None
scala> m("jack2")
java.util.NoSuchElementException: key not found: jack2
at scala.collection.MapLike$class.default(MapLike.scala:228)
at scala.collection.AbstractMap.default(Map.scala:59)
at scala.collection.MapLike$class.apply(MapLike.scala:141)
at scala.collection.AbstractMap.apply(Map.scala:59)
... 33 elided
scala> m.getOrElse("jack",22)
res32: Int = 18
scala> m.getOrElse("jack2",22)
res33: Int = 22
scala> m.keys
res34: Iterable[String] = Set(jack, lucy)
scala> m.values
res35: Iterable[Int] = MapLike(18, 20)
可变map:
scala> val m2 = scala.collection.mutable.Map("tom"->16)
m2: scala.collection.mutable.Map[String,Int] = Map(tom -> 16)
//其实是产生了一个新的Map对象
scala> m2 + ("jim"-> 20)
res36: scala.collection.mutable.Map[String,Int] = Map(jim -> 20, tom -> 16)
scala> m2
res37: scala.collection.mutable.Map[String,Int] = Map(tom -> 16)
定长Map:
scala> m + ("jim"->23)
res38: scala.collection.immutable.Map[String,Int] = Map(jack -> 18, lucy -> 20, jim -> 23)
scala> val m_new = m+("jim"->34)
m_new: scala.collection.immutable.Map[String,Int] = Map(jack -> 18, lucy -> 20, jim -> 34)
如果想在原来的m2(可变Map)基础上加入一个k,v.
scala> m2+=("jim"->3232)
res39: m2.type = Map(jim -> 3232, tom -> 16)
scala> m2
res40: scala.collection.mutable.Map[String,Int] = Map(jim -> 3232, tom -> 16)

Map的迭代:

for((k,v) <- map){ }

也可单独去key或value

for((k,_)) <- map)

for((_,v) <- map)

或者

map.keys / map.keySet

map.values

map遍历:

scala> for((k,v) <- m){
| println("key is "+k+",value is "+v)
| }
key is jack,value is 18
key is lucy,value is 20

只想遍历value,如何做到:

scala> for((_,v)<- m){
| println("value is "+v)
| }
value is 18
value is 20
//只遍历key
scala> for((k,_)<- m){
| println("key is "+k)
| }
key is jack
key is lucy
scala> m.keys
res46: Iterable[String] = Set(jack, lucy)
scala> m.keySet
res47: scala.collection.immutable.Set[String] = Set(jack, lucy)
scala> m.values
res48: Iterable[Int] = MapLike(18, 20)

元组

val tuple = (1,2,3,4) //就是()里包含一系列的值

通过 ._ 取值,下标从1开始,例如 t._1

迭代

for(elem <- t.productIterator) {
}
scala> val tupe = (1,2,3,4)
tupe: (Int, Int, Int, Int) = (1,2,3,4)
//获取元组值
scala> tupe._3
res49: Int = 3
scala> tupe.productIterator
res50: Iterator[Any] = non-empty iterator
scala> for(i <- tupe.productIterator) println(i)
1
2
3
4

Scala学习笔记(一)的更多相关文章

  1. 基于.net的分布式系统限流组件 C# DataGridView绑定List对象时,利用BindingList来实现增删查改 .net中ThreadPool与Task的认识总结 C# 排序技术研究与对比 基于.net的通用内存缓存模型组件 Scala学习笔记:重要语法特性

    基于.net的分布式系统限流组件   在互联网应用中,流量洪峰是常有的事情.在应对流量洪峰时,通用的处理模式一般有排队.限流,这样可以非常直接有效的保护系统,防止系统被打爆.另外,通过限流技术手段,可 ...

  2. Scala学习笔记及与Java不同之处总结-从Java开发者角度

    Scala与Java具有很多相似之处,但又有很多不同.这里主要从一个Java开发者的角度,总结在使用Scala的过程中所面临的一些思维转变. 这里仅仅是总结了部分两种语言在开发过程中的不同,以后会陆续 ...

  3. Scala学习笔记之:tuple、array、Map

    [TOC] 本文<快学Scala>的笔记 tuple学习笔记 tuple的定义 对偶是元组(tuple)的最简单形态--元组是不同类型的值的聚集. 元组的值是通过将单个值包含在圆括号中构成 ...

  4. 机器学习(三)--- scala学习笔记

    Scala是一门多范式的编程语言,一种类似Java的编程语言,设计初衷是实现可伸缩的语言.并集成面向对象编程和函数式编程的各种特性. Spark是UC Berkeley AMP lab所开源的类Had ...

  5. 【大数据】Scala学习笔记

    第 1 章 scala的概述1 1.1 学习sdala的原因 1 1.2 Scala语言诞生小故事 1 1.3 Scala 和 Java  以及 jvm 的关系分析图 2 1.4 Scala语言的特点 ...

  6. 原创:Scala学习笔记(不断更新)

    Scala是一种函数式语言和面向对象语言结合的新语言,本笔记中就零散记下学习scala的一些心得,主要侧重函数式编程方面. 1. 以递归为核心控制结构. 实现循环处理的方式有三种:goto,for/w ...

  7. scala 学习笔记(04) OOP(上)主从构造器/私有属性/伴生对象(单例静态类)/apply方法/嵌套类

    一.主从构造器 java中构造函数没有主.从之分,只有构造器重载,但在scala中,每个类都有一个主构造器,在定义class时,如果啥也没写,默认有一个xxx()的主构造器 class Person ...

  8. scala 学习笔记(03) 参数缺省值、不定个数参数、类的属性(Property)、泛型初步

    继续学习,这一篇主要是通过scala来吐槽java的,同样是jvm上的语言,差距咋就这么大呢? 作为一个有.NET开发经验的程序员,当初刚接触java时,相信很多人对java语言有以下不爽(只列了极小 ...

  9. scala学习笔记

    一 入门 为了增加编程趣味和技能,学习新语言,体会函数式编程和简易的并发管理模型,了解日渐活跃的Spark,尝试下Scala.Scala = Scalable language,作者是Martin O ...

  10. Scala学习笔记1(安装)

    到 官网下载scala tar包  http://www.scala-lang.org/download/ mac Finder里双击解压. 改名成scala 进命令行, mv ~/Downloads ...

随机推荐

  1. CSS布局(五) 网页布局方式

    网页实质是块与块之间的位置,块挨着块,块嵌套块,块叠着块. 三种关系:相邻,嵌套,重叠. 下面介绍网页布局的常用几种方式 1.一列布局: 一般都是固定的宽高,设置margin : 0 auto来水平居 ...

  2. MySQL的常见存储引擎介绍与参数设置调优

    MySQL常用存储引擎之MyISAM 特性: 1.并发性与锁级别 2.表损坏修复 check table tablename repair table tablename 3.MyISAM表支持的索引 ...

  3. linux周期性计划任务 进程管理

    周期性计划任务crontab命令系统服务:/etc/init.d/crond(crond必须启动才会生效)用户计划:/var/spool/cron/用户名默认的计划任务全局配置:/etc/cronta ...

  4. 第1章 PCI总线的基本知识

    PCI总线作为处理器系统的局部总线,主要目的是为了连接外部设备,而不是作为处理器的系统总线连接Cache和主存储器.但是PCI总线.系统总线和处理器体系结构之间依然存在着紧密的联系. PCI总线作为系 ...

  5. 实战DeviceIoControl 之一:通过API访问设备驱动程序

    Q 在NT/2000/XP中,我想用VC编写应用程序访问硬件设备,如获取磁盘参数.读写绝对扇区数据.测试光驱实际速度等,该从哪里入手呢? A 在NT/2000/XP中,应用程序可以通过API函数Dev ...

  6. 用DataRelation给多个DataTable建立关系并显示到TreeView

    DataRelation 对象执行两种功能: 它可使与正使用的记录相关的记录可用.如果在父记录 (GetChildRows) 中,则它提供子记录:如果正使用子记录 (GetParentRow),则它提 ...

  7. JSP常见的三个编译指令

    JSP常见的三个编译指令 1.page指令   是针对当前页面的指令 2.include指令    用于指定包含另一个页面 3.taglib指令    用于定义和访问自定义标签

  8. org.hibernate.TransientObjectException:The given object has a null identifier

    1.错误描述 org.hibernate.TransientObjectException:The given object has a null identifier:com.you.model.U ...

  9. Django学习-18-中间件

    为了验证中间件功能和函数执行过程,手动注册3个中间件到setting.py文件中 MIDDLEWARE = [ 'django.middleware.security.SecurityMiddlewa ...

  10. hdu5904 LCIS

    这题惩罚我这种经常不管常数的懒人 直接 1e6 TLE 如果1e5对数组枚举过 诶其实很想吐槽些伤心事,但是还是不想在博客上吐口水 不管今年比赛结果如何 请享受比赛 #include<bits/ ...