Scala_入门笔记

1.来历
洛桑联邦理工学院(EPFL)的Martin Odersky于2001年基于Funnel的工作开始设计Scala。Funnel是把函数式编程思想和Petri网相结合的一种编程语言。Odersky先前的工作是Generic Java和javac(Sun Java编译器)。 Odersky教授创建Scala语言的一个主要原因是不满Java语言相对复杂的语法。因此,他设计的Scala的代码质量远远高于Java。
Scala将面向对象和函数式编程融合在一个静态类型语言中,其目标是组件或组件体系的开发。目的:设计出比Java更好的语言。

2.Scala基本语法和约定

区分大小写
类名单词首字母大写
方法名首单词首字母小写,其余单词首字母大写
程序文件名称与对象名一致
def main(args:Array[String])程序入口

可以看出和Java区别不是很大。

3.标识符


字母数字标识符:跟其他语言类似,由字母、数字和下划线组成,但需注意“$”字符被保留作为scala编译器产生的标识符之用。

操作符标识符:由一个或多个操作符字符组成。scala编译器将在内部“粉碎”操作符标识符以转换成合法的内嵌“$”的java标识符。运算符字符是可打印的ASCII字符,如:+,:,?,~或#。例如,标识符:->将被内部表示为$colon$minus$greater

混合标识符:由字母数字以及后面跟着的下划线和一个操作符标识符组成。如unary_+定义了一个前缀操作符“+”。

字面量标识符:是用反引号`…`包含的任意字符串,scala将把被包含的字符串作为标识符,即使被包含字符串是scala的关键字。例如:可以使用Thread.`yield`()来访问java中的方法,即使yield是scala的关键字。

4.数据类型

数值类型
Scala的基本数据类型与Java中的基本数据类型是一一对应的。
7种数值类型:Byte、Char、Short、Int、Long、Float和Double
2种非数值类型:Boolean和Unit(只有一个值“()”,相当于java和c++中的void,即空值)
以上所有数据类型都是对象。Scala中没有类似Java中那样的原始类型。这意味着可以调用Int,Long等方法。
字符串类型
scala沿用了java.lang包中的String。在scala中常量也称作字面量,字符串字面量由双引号包含的字符组成,同时scala提供了另一种定义字符串常量的语法:原始字符串,它以三个双引号作为开始和结束,字符串内部可以包含无论何种任意字符。

val:声明不可变的变量,一旦初始化就不能再被赋值
var:声明可变的变量,可以在它的生命周期中被多次赋值
推荐使用val,如下:

val content: String = "hello world“
val content2: String = new String(“hello world”)

5.运算符

::运算符(两个冒号)表示普通元素与List的连接操作
:::运算符(三个冒号)表示List的连接操作
<- 运算符,也叫做generator。主要用于for循环中,用于遍历集合对象。
=> 含义比较多,用法最复杂

1、val triple = (x: Int) => 3 * x---定义函数
2、switch的模式匹配

6.程序控制结构-分支循环

if{}
if {
}else{
}
 if{
 }else if{
 }else{
 }

打印1到10

for(i <- 1 to 10){
    println(i)
}

匹配表达式即(Switch-Case)

scala中做比较用的样本(case)可以是任何类型的常量或变量,但是java只能是byte、short、char和int这4种之一的常数或常量,不能是变量;
在每个case语句最后,不需要break,break是隐含的;
match表达式也能产生值;
如果没有匹配的模式,则MatchError异常会被抛出。

val str = "apple"
val friend = str match{
    case "salt" => "pepper"
    case "apple" => "pen"
    case _=> "huh?"
}

7.数组
1.声明定义

var z:Array[String] = new Array[String](3)   
var z = new Array[String](3)
var z = Array("Maxsu", "Nancy", "Alen")

2.数组的遍历

var myList = Array(1.9, 2.9, 3.4, 3.5)   
for ( x <- myList ){
     println(x) 
}
var total = 0.0; 
for ( i <- 0 to (myList.length - 1)) { 
    total += myList(i); 
} 
println("Total is " + total);

3.数组常用方法

1.sum求和(数组必须是数值型数据)
println(array.sum)
2.min max 输出数组中最小和最大元素
println(array.min)
println(array.max)
3.使用sorted方法对数组或数组缓冲进行升序排序,这个过程不会修改原始数组
val sortArr = array.sorted
4.使用比较函数sortWith进行排序
val sortArr = ab.sortWith(>)
5.数组显示
println(sortArr.mkString(“|”))
println(sortArr.mkString(“startFlag”,”|”,”endFlag”))
6.使用concat()方法连接两个数组
var myList3 = concat( myList1, myList2)
7.使用range()方法来生成包含给定范围内增加整数序列的数组
var myList2 = range(10,20) //创建一个数组,其元素介于10和20之间,范围步差为1
8.复制一个数组到另一个数组上
def copy( src: AnyRef, srcPos: Int, dest: AnyRef, destPos: Int, length: Int ): Unit
9.返回数组,长度为第一个参数指定,同时每个元素使用第二个参数进行填充。
def fill[T]( n: Int )(elem: => T): Array[T]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值