表达式,值,变量,代码块,函数,方法

// 表达式
1 + 1
println(1 + 1) // 2
// 值(values)使用 val 关键字声明,带初值时类型可省略。
val x = 1 + 1
println(x) // 2
val x: Int = 1 + 1
// x = 3
// 变量(variables)使用 var 关键字声明,带初值时类型可省略。
var x = 1 + 1
var x: Int = 1 + 1
x = 3
// 代码块(blocks): 使用大括号括起来,代码块的值由最后一句表达式语句的值来决定。
println({
val x = 1 + 1
x + 1
}) // 3
// 函数(functions): 参数类型不可省略,返回值的类型可省略。
(x: Int) => x + 1
val addOne = (x: Int) => x + 1
println(addOne(1)) // 2
// 函数可以有多个参数
val add = (x: Int, y: Int) => x + y
println(add(1, 2)) // 3
// 函数也可以没有参数
val add = (x: Int, y: Int) => x + y
println(add(1, 2)) // 3
// 方法(methods): 使用 def 关键字声明,参数类型不可省略,返回值的类型可省略。
def add(x: Int, y: Int): Int = x + y
println(add(1, 2)) // 3
// 方法可以有多个参数列表
def addThenMultiply(x: Int, y: Int)(multiplier: Int): Int = (x + y) * multiplier
println(addThenMultiply(1, 2)(3)) // 9
// 方法也可以没有参数
def name: String = System.getProperty("name")
println("Hello, " + name + "!")
// 方法的值取决于最后一句表达式语句的值
def getSquareString(input: Double): String = {
val square = input * input
square.toString
}

类,样例类,单例对象,特质,Main方法

// 类(classes)的定义
class Greeter(prefix: String, suffix: String) {
def greet(name: String): Unit =
println(prefix + name + suffix)
}
// 用关键字 new 创建类的实例
val greeter = new Greeter("Hello, ", "!")
greeter.greet("Scala developer") // Hello, Scala developer!
// 样例类(case classes)
case class Point(x: Int, y: Int)
// 创建样例类的实例不用 new
val point = Point(1, 2)
val anotherPoint = Point(1, 2)
// 样例类的实例通过值来比较
if (point == anotherPoint) {
println(point + " and " + anotherPoint + " are the same.")
} else {
println(point + " and " + anotherPoint + " are different.")
}
// Point(1,2) and Point(1,2) are the same.
// 单例对象
object IdFactory {
private var counter = 0
def create(): Int = {
counter += 1
counter
}
}
// 通过对象的名字来调用它的方法
val newId: Int = IdFactory.create()
println(newId) // 1
val newerId: Int = IdFactory.create()
println(newerId) // 2
// 特质(traits)
trait Greeter {
def greet(name: String): Unit
}
trait Greeter {
def greet(name: String): Unit =
println("Hello, " + name + "!")
}
// 用类来扩展特质
class DefaultGreeter extends Greeter
class CustomizableGreeter(prefix: String, postfix: String) extends Greeter {
override def greet(name: String): Unit = {
println(prefix + name + postfix)
}
}
val greeter = new DefaultGreeter()
greeter.greet("Scala developer") // Hello, Scala developer!
val customGreeter = new CustomizableGreeter("How are you, ", "?")
customGreeter.greet("Scala developer") // How are you, Scala developer?
// Main 方法(在单例对象中定义)
object Main {
def main(args: Array[String]): Unit =
println("Hello, Scala developer!")
}

类型层次

Any 类型是所有类型的超类型。

AnyVal 类型代表值类型。

AnyRef 类型代表引用类型。

Nothing 类型是所有类型的子类型。该类型只有一个实例: null。

val list: List[Any] = List(
"a string",
732, // an integer
'c', // a character
true, // a boolean value
() => "an anonymous function returning a string"
)
list.foreach(element => println(element))

Scala语言学习笔记(2)的更多相关文章

  1. Scala语言学习笔记——方法、函数及异常

    1.Scala 方法及函数区别 ① Scala 有方法与函数,二者在语义上的区别很小.Scala 方法是类的一部分,而函数是一个对象可以赋值给一个变量.换句话来说在类中定义的函数即是方法 ② Scal ...

  2. Scala语言学习笔记(3)

    类 // 定义并使用类 class User val user1 = new User // 主体构造器(primary constructor) class Point(var x: Int, va ...

  3. Scala语言学习笔记(4)

    高阶函数 // 高阶函数 map val salaries = Seq(20000, 70000, 40000) val doubleSalary = (x: Int) => x * 2 val ...

  4. HTML语言学习笔记(会更新)

    # HTML语言学习笔记(会更新) 一个html文件是由一系列的元素和标签组成的. 标签: 1.<html></html> 表示该文件为超文本标记语言(HTML)编写的.成对出 ...

  5. Scala入门学习笔记三--数组使用

    前言 本篇主要讲Scala的Array.BufferArray.List,更多教程请参考:Scala教程 本篇知识点概括 若长度固定则使用Array,若长度可能有 变化则使用ArrayBuffer 提 ...

  6. 2017-04-21周C语言学习笔记

    C语言学习笔记:... --------------------------------- C语言学习笔记:学习程度的高低取决于.自学能力的高低.有的时候生活就是这样的.聪明的人有时候需要.用笨的方法 ...

  7. 2017-05-4-C语言学习笔记

    C语言学习笔记... ------------------------------------ Hello C语言:什么是程序:程序是指:完成某件事的既定方式和过程.计算机中的程序是指:为了让计算机执 ...

  8. GO语言学习笔记(一)

    GO语言学习笔记 1.数组切片slice:可动态增长的数组 2.错误处理流程关键字:defer panic recover 3.变量的初始化:以下效果一样 `var a int = 10` `var ...

  9. Haskell语言学习笔记(88)语言扩展(1)

    ExistentialQuantification {-# LANGUAGE ExistentialQuantification #-} 存在类型专用的语言扩展 Haskell语言学习笔记(73)Ex ...

随机推荐

  1. Refused to display '[url]' in a frame because it set 'X-Frame-Options' to 'Deny'.

    X-Frame-Options是一个HTTP标头(header),用来告诉浏览器这个网页是否可以放在iFrame内.例如: X-Frame-Options: DENY X-Frame-Options: ...

  2. netty答题

    1,介绍一下netty netty封装了Java原生的nio,是一个异步和数据驱动的网络编程框架, 与tcp: netty -> Java Runtime Socket (io.nio.nio2 ...

  3. 基于DRL和TORCS的自动驾驶仿真系统——之环境配置

    基于DRL和TORCS的自动驾驶仿真系统 --之环境配置 玩TORCS和DRL差不多有一整年了,开始的摸爬滚打都是不断碰壁过来的,近来在参与CMU的DRL10703课程学习和翻译志愿者工作,也将自己以 ...

  4. ES(5): ES Cluster modules settings

    ES cluster 提供了针对不同模块的参数设置,可通过修改集群上各个节点的elasticsearch.yml文件,也可在集群运行时通过api接口来更新(https://www.elastic.co ...

  5. VS2005的depends工具 (分析EXE)

    忙乎了近两个月,程序开始打包供外部调用了,连同其所需的dll文件,这就需要使用VC自带的Depends软件,在VS2005中其路径为:D:\Program Files\Microsoft Visual ...

  6. java web 程序---投票系统

    1.这里会连接数据库--JDBC的学习实例 一共有3个页面. 2.第一个页面是一个form表单,第二个页面是处理数据,第三个页面是显示页面 vote.jsp <body bgcolor=&quo ...

  7. IT职业发展攻略(技术仅是工具而已)

    时光飞逝,我事业中第一个十年就快结束了.在这十年里,让我收获了很多,今天想与大家分享一下,我在 IT 职场方面的一些个人经验,不一定对每个人都实用,请大家仅作参考吧. 大家既然都是做技术的,那我们不妨 ...

  8. 【Linux_Unix系统编程】chapter6 进程

    chapter6 进程 重点关注进程虚拟内存的布局及内容.6.1 进程和程序 进程(process)是一个可执行程序(program)的实例. 程序是包含了一系列信息的文件,这些信息描述了如何在运行时 ...

  9. 【Linux_Unix系统编程】Chapter4 文件IO

    Chapter4 文件IO 4.1 概述 文件描述符 == Windows的句柄 标准文件描述符: 0 标准输入 STDIN_FILENO stdin 1 标准输出 STDOUT_FILENO std ...

  10. Hive基础之排序

    order by 1.order by会对输入按照指定字段做全局排序,输出结果有序,因此只有一个reducer(多个reducer无法保证全局排序,手工设定reduce数量无效): 只有一个reduc ...