Scala学习笔记——入门
0.在 scala> 下运行Scala程序
首先cd到.scala文件所在的目录下
scalac这个scala文件,然后import package的名字.object的名字
然后就能使用 object的名字.def的名字来运行这个def
1.表达式
scala> 1 + 2
res0: Int = 3
2.变量定义,Scala中有两种变量,一种是var,一种val,val类似于Java里面的final变量,一旦初始化了,val就不能再次被赋值了
scala> var str = "Hello World"
str: String = Hello World
#lazy关键字修饰的变量,定义时不赋值,真正使用的时候才赋值
var str = "Hello World"
3.函数定义

object HelloWord {
def main(args: Array[String]) {
println("Hello Word")
println(max(1, 2))
println(args(0)+" "+args(1))
}
def max(x: Int, y: Int): Int = {
if (x > y)
x
else
y
}
}
输出
Hello Word
2
0 1
4.while循环和if判断
def printArg(args: Array[String]): Unit = {
var i = 0
while (i < args.length) {
println(args(i))
i += 1
}
}
5.foreach和for做枚举
def printArg1(args: Array[String]): Unit = {
//scala的foreach循环
args.foreach(arg => println(arg))
//foreach的简洁写法
args.foreach(println)
//args给arg传值
for(arg <- args)
println(arg)
}
6.类型参数化数组
def main(args: Array[String]) {
var big = new BigInteger("123")
val arr = new Array[String](3)
arr(0) = "1"
arr(1) = "2"
arr(2) = "3"
//或者
arr.update(0,"1")
arr.update(1,"2")
arr.update(2,"3")
for(i <- 0 to 2){
print (arr(i))
}
//最为简洁的创建和初始化数组的方法
var numArr = Array("1","2","3")
}
7.列表List
var list1 = List(1,2)
var list2 = List(3,4)
var list3 = list1:::list2
println (list3)
var list4 = 0::list3
println (list4)
输出
List(1, 2, 3, 4)
List(0, 1, 2, 3, 4)
一些方法
println (list4(2))
println (list4.count(s => s == 2))
输出
List(1, 2, 3, 4, 2)
2
2


8.元组Tuple
元组和列表都是不可变的,但是元组可以包含不同类型的元素
var pair = (123,"123")
println (pair._1)
println (pair._2)
输出
123
123
9.集合(set)和映射(map)
集合set和映射具有可变性和不可变性
var jetSet = Set("a","b")
jetSet += "c" //只有可变mutable集合有+=方法,如果是import scala.collection.immutable.Set,将会转换成mutable
println(jetSet.contains("c"))
输出
true
映射map
var map1 = Map[Int,String]()
map1 += (1 -> "1111") //映射和集合也是一样的,映射也有可变和不可变之分
map1 += (2 -> "2222")
map1 += (3 -> "3333")
println (map1)
输出
Map(1 -> 1111, 2 -> 2222, 3 -> 3333)
直接定义映射
var map2 = Map(1 -> 1111, 2 -> 2222, 3 -> 3333)
println (map2)
10函数式编程
从
while (i < args.length) {
println(args(i))
i += 1
}
到
for(arg <- args)
println(arg)
的过程就是函数式编程
11.从文件里读取文本行
if(args.length > 0){
for(line <- Source.fromFile(args(0)).getLines){
println(line.length+" "+line)
}
}

//行数数字的长度
def widthOfLength(s: String) = s.length.toString.length def readFile(args: Array[String]): Unit = {
if (args.length > 0) {
var lines = Source.fromFile(args(0)).getLines.toList
//有空格
var maxWidth = 0
for (line <- lines) {
maxWidth = maxWidth.max(widthOfLength(line))
}
for (line <- lines) {
var numSpace = maxWidth - widthOfLength(line)
var padding = " " * numSpace
println(padding + line.length + " | " + line)
}
//无空格
// for(line <- Source.fromFile(args(0)).getLines){
// println(line.length+" "+line)
// }
}
}
12.类和对象
1.Scala中不用加上分号,但是如果一行中有多个语句的话,分号是必须的
2.Scala比Java更为面向对象的特点之一是Scala不能定义静态变量,而是代之以定义单例对象(singleton object),所要做的就是用object关键字取代class关键字.
当单例对象Object和某个类共享同一个名称的时候,它就被称为是这个类的伴生对象.类和它的伴生对象可以互相访问气私有对象.
object ChecksumAccumulator {
private var cache = Map[String, Int]()
def main(args: Array[String]) {
System.out.println(calculate("abc"))
System.out.println(calculate("a"))
System.out.println(cache)
}
def calculate(s: String): Int = {
if (cache.contains(s))
cache(s)
else {
val acc = new ChecksumAccumulator
for (c <- s)
acc.add(c.toByte)
val cs = acc.checkSum()
cache += (s -> cs) //把map赋值给cache
cs
}
}
}
class ChecksumAccumulator {
private var sum = 0
def add(b: Byte): Unit = sum += b //不超过-128-127
def checkSum(): Int = ~(sum & 0xFF) + 1
}
3.除了使用main方法来定义程序的入口之外,Scala还提供了特质scala.Application,可以减少一些输入工作。
import ChecksumAccumulator.calculate
object FallWinterSpringSummer extends Application{
for (season <- List("fall","winter","spring","winter")){
println(season+": "+calculate(season))
}
}
13.基本类型

在Scala中 == 是比较内容,而在Java中是比较引用,这是Scala和Java中不同的地方
运算符优先级

14.字面量
14.1——整数字面量
类型Int,Long,Short和Byte的整数字面量有3种格式:10进制,16进制(以0x或者0X开头),8进制(以0开头)
如果整数字面量是以L或者l结尾的话,就是Long类型
如果Int类型的字面量被赋值给Short或者Byte类型的变量,字面量就会被当成是被赋值的类型,以便让字面量值处于有效范围内
14.2——浮点字面量
浮点数字面量是由十进制数字、可选的小数点、可选的E或者e及指数部分组成的。
14.3——字符字面量
字符字面量可以是在单引号之间的任何Unicode字符,如
val a = 'A'
val a = '\101'
val a = '\u0041'
val B\u0041\u0044 = 1

14.4——字符串字面量

14.5——符号字面量
符号字面量被写成‘<标识符>,这里的<标识符>可以是任何字母或者数字的标识符。这种字面量被映射成预定义类scala.Symbol的实例,可以使用在更新数据库记录的方法中
def updateRecordByName(r:Symbol,value:Any): Unit ={
}
updateRecordByName('a,"a")
如果同一个符号字面量出现两次,那么两个字面量指向的是同一个Symbol对象
15.操作符和方法,Scala的数学运算,关系和逻辑操作,位操作符,和Java的差不多
Scala的操作符+支持重载,比如1+1L的结果就是Long型的
16.对象相等性
如果想要比较一下两个对象是否相等,可以使用==,==操作符对所有的对象都起作用,而不仅仅是基本类型
17.富包装器

Scala学习笔记——入门的更多相关文章
- PHP学习笔记 - 入门篇(5)
PHP学习笔记 - 入门篇(5) 语言结构语句 顺序结构 eg: <?php $shoesPrice = 49; //鞋子单价 $shoesNum = 1; //鞋子数量 $shoesMoney ...
- PHP学习笔记 - 入门篇(4)
PHP学习笔记 - 入门篇(4) 什么是运算符 PHP运算符一般分为算术运算符.赋值运算符.比较运算符.三元运算符.逻辑运算符.字符串连接运算符.错误控制运算符. PHP中的算术运算符 算术运算符主要 ...
- PHP学习笔记 - 入门篇(3)
PHP学习笔记 - 入门篇(3) 常量 什么是常量 什么是常量?常量可以理解为值不变的量(如圆周率):或者是常量值被定义后,在脚本的其他任何地方都不可以被改变.PHP中的常量分为自定义常量和系统常量 ...
- PHP学习笔记--入门篇
PHP学习笔记--入门篇 一.Echo语句 1.格式 echo是PHP中的输出语句,可以把字符串输出(字符串用双引号括起来) 如下代码 <?php echo "Hello world! ...
- LESS学习笔记 —— 入门
今天在网上完成了LESS的基础学习,下面是我的学习笔记.总共有三个文件:index.html.main.less.mian.css,其中 mian.css 是 main.less 经过Koala编译之 ...
- 基于.net的分布式系统限流组件 C# DataGridView绑定List对象时,利用BindingList来实现增删查改 .net中ThreadPool与Task的认识总结 C# 排序技术研究与对比 基于.net的通用内存缓存模型组件 Scala学习笔记:重要语法特性
基于.net的分布式系统限流组件 在互联网应用中,流量洪峰是常有的事情.在应对流量洪峰时,通用的处理模式一般有排队.限流,这样可以非常直接有效的保护系统,防止系统被打爆.另外,通过限流技术手段,可 ...
- Scala学习笔记及与Java不同之处总结-从Java开发者角度
Scala与Java具有很多相似之处,但又有很多不同.这里主要从一个Java开发者的角度,总结在使用Scala的过程中所面临的一些思维转变. 这里仅仅是总结了部分两种语言在开发过程中的不同,以后会陆续 ...
- 【大数据】Scala学习笔记
第 1 章 scala的概述1 1.1 学习sdala的原因 1 1.2 Scala语言诞生小故事 1 1.3 Scala 和 Java 以及 jvm 的关系分析图 2 1.4 Scala语言的特点 ...
- Scala学习笔记之:tuple、array、Map
[TOC] 本文<快学Scala>的笔记 tuple学习笔记 tuple的定义 对偶是元组(tuple)的最简单形态--元组是不同类型的值的聚集. 元组的值是通过将单个值包含在圆括号中构成 ...
随机推荐
- maven deploy distributionManagement
分发构件至远程仓库 mvn install 会将项目生成的构件安装到本地Maven仓库,mvn deploy 用来将项目生成的构件分发到远程Maven仓库.本地Maven仓库的构件只能供当前用户使用, ...
- django 返回json数据
from django.core import serializers @login_required def ajax_get_data(request): json_data = serializ ...
- Eclipse C++的配置问题launch failed binary not found
首先下载eclipse c++ 我的是64bit版本 安装好MinGW,并配置好环境变量,参考我的博客 http://www.cnblogs.com/fickleness/p/3273044.html ...
- JQUERY根据值将input控件选中!
<select>: $('#country').find("option[value = " + data.country + "]").attr( ...
- mac上校验文件的 md5 sha-1
文件校验 mac md5 sha-1html, body {overflow-x: initial !important;}.CodeMirror { height: auto; } .CodeMir ...
- PHP程序员如何理解IoC/DI(转)
php - Dependency Injection依赖注入 和 自动加载 各自的优缺点 ioc/di和自动加载时两回事. ioc/di 让代码由创建对象改为注入对象,是一种编程思想,而自动加载,只是 ...
- C语言 · 错误票据
历届试题 错误票据 时间限制:1.0s 内存限制:256.0MB 锦囊1 排序. 锦囊2 把所有的编号排序,再扫描一遍数组,即可找到重复的和遗漏的. 问题描述 某涉密单位下发 ...
- led子系统
最简单的led驱动就是从端口输出0或1来关闭或点亮灯.而我们这里讲的led子系统,主要是对led事件进行了分装和优化,这里我们主要讲的是可 以实现跨平台的led驱动.不管你是使用三星的平台,还是Atm ...
- 树莓派3B+首次登陆通过网络
树莓派3B+默认串口不能登录,即使可使用可需要通过连线方式连接,如何才能直接通过网络ssh登录树莓派呢? 串口问题及使用 树莓派3的UART串口的使用问题,该串口问题的官方反馈及回复请参考这两篇官方博 ...
- MVC教程八:缓存过滤器
缓存过滤器用来输出页面缓存,其用法如下图所示: 注意: Duration:表示缓存多少秒;VaryByParam:表示缓存是否随地址参数而改变.OutputCache除了可以定义在Action方法上面 ...