Scala学习笔记(一)
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学习笔记(一)的更多相关文章
- 基于.net的分布式系统限流组件 C# DataGridView绑定List对象时,利用BindingList来实现增删查改 .net中ThreadPool与Task的认识总结 C# 排序技术研究与对比 基于.net的通用内存缓存模型组件 Scala学习笔记:重要语法特性
基于.net的分布式系统限流组件 在互联网应用中,流量洪峰是常有的事情.在应对流量洪峰时,通用的处理模式一般有排队.限流,这样可以非常直接有效的保护系统,防止系统被打爆.另外,通过限流技术手段,可 ...
- Scala学习笔记及与Java不同之处总结-从Java开发者角度
Scala与Java具有很多相似之处,但又有很多不同.这里主要从一个Java开发者的角度,总结在使用Scala的过程中所面临的一些思维转变. 这里仅仅是总结了部分两种语言在开发过程中的不同,以后会陆续 ...
- Scala学习笔记之:tuple、array、Map
[TOC] 本文<快学Scala>的笔记 tuple学习笔记 tuple的定义 对偶是元组(tuple)的最简单形态--元组是不同类型的值的聚集. 元组的值是通过将单个值包含在圆括号中构成 ...
- 机器学习(三)--- scala学习笔记
Scala是一门多范式的编程语言,一种类似Java的编程语言,设计初衷是实现可伸缩的语言.并集成面向对象编程和函数式编程的各种特性. Spark是UC Berkeley AMP lab所开源的类Had ...
- 【大数据】Scala学习笔记
第 1 章 scala的概述1 1.1 学习sdala的原因 1 1.2 Scala语言诞生小故事 1 1.3 Scala 和 Java 以及 jvm 的关系分析图 2 1.4 Scala语言的特点 ...
- 原创:Scala学习笔记(不断更新)
Scala是一种函数式语言和面向对象语言结合的新语言,本笔记中就零散记下学习scala的一些心得,主要侧重函数式编程方面. 1. 以递归为核心控制结构. 实现循环处理的方式有三种:goto,for/w ...
- scala 学习笔记(04) OOP(上)主从构造器/私有属性/伴生对象(单例静态类)/apply方法/嵌套类
一.主从构造器 java中构造函数没有主.从之分,只有构造器重载,但在scala中,每个类都有一个主构造器,在定义class时,如果啥也没写,默认有一个xxx()的主构造器 class Person ...
- scala 学习笔记(03) 参数缺省值、不定个数参数、类的属性(Property)、泛型初步
继续学习,这一篇主要是通过scala来吐槽java的,同样是jvm上的语言,差距咋就这么大呢? 作为一个有.NET开发经验的程序员,当初刚接触java时,相信很多人对java语言有以下不爽(只列了极小 ...
- scala学习笔记
一 入门 为了增加编程趣味和技能,学习新语言,体会函数式编程和简易的并发管理模型,了解日渐活跃的Spark,尝试下Scala.Scala = Scalable language,作者是Martin O ...
- Scala学习笔记1(安装)
到 官网下载scala tar包 http://www.scala-lang.org/download/ mac Finder里双击解压. 改名成scala 进命令行, mv ~/Downloads ...
随机推荐
- Linux常用命令详解(二) -- 查找常用命令
locate: 作用:在后台数据库中按文件名搜索,搜索速度更快 命令格式:locate 文件名 选项或参数: -l num(要显示的行数) ...
- PHP中::的使用
访问静态变量,静态属性,const修饰的变量.
- MysqL应该考虑到的安全策略
1:使用预处理语句防止SQL注入2:写入数据库的数据要进行特殊字符的转义,比如字符中带单引号和双引号需要在应用层转义,这样为了防止SQL注入3:查询的错误信息不要返回给用户,将错误记录到日志.错误信息 ...
- javascript 函数详解
一.函数的一些基础概念: 1.js中的函数使用function来声明. 2.关于return: 2.1 函数在执行到return语句后悔立即停止并退出,return后面的代码永远不会得到执行: 2. ...
- JavaScript将小写金额转换成大写
//num为小写金额,单位元 changeMoney(num) { if(isNaN(num))return ""; var strPrefix=""; if( ...
- 【推荐】开源项目minapp-重新定义微信小程序的开发
minapp 重新定义微信小程序的开发 官网:https://qiu8310.github.io/minapp/ 作者:Mora minapp 重新定义微信小程序的开发 使用 用 npm 安装命令行工 ...
- Android项目中的换肤总结
纵观现在各种Android app,其换肤需求可以归为 白天/黑夜主题切换(或者别的名字,通常2套),如同花顺/自选股/天天动听等,UI表现为一个switcher. 多种主题切换,通常为会员特权,如Q ...
- 理解Android DecorView
一.DecorView为整个Window界面的最顶层View. 二.DecorView只有一个子元素为LinearLayout.代表整个Window界面,包含通知栏,标题栏,内容显示栏三块区域. 三. ...
- 如何使用DirectDraw直接显示RGB、YUV视频数据(播放yuv)
#include "draw.h"void CTest100Dlg::OnButton1() { // TODO: Add your control notification ha ...
- zTree实现获取当前选中的第一个节点在同级节点中的序号
zTree实现获取当前选中的第一个节点在同级节点中的序号 1.实现源码 <!DOCTYPE html> <html> <head> <title>zTr ...