HelloWorld

从HelloWorld开始,使用scala IDE编辑器。

  • 新建scala project
  • 新建scala object
  • 编写HelloWorld
  • run as scala application
object HelloWorld {

  def main(args: Array[String]){
println("Hello world")
}
}

表达式和值

scala中,几乎所有的元素都是表达式,以val定义常量,var定义变量

函数

可以使用def来定义一个函数。函数体是一个表达式。

使用Block表达式的时候,默认最后一行的返回是返回值,如果不是递归函数,无需显式指定。

函数还可以像值一样,赋值给var或val。因此函数也可以作为参数传给另一个函数

//定义函数,函数参数要指定类型签名
def square(a: Int) = a * a
def squareWithBlock(a: Int) = {
a * a
}
//定义匿名函数,匿名函数由参数列表,箭头连接符和函数体组成
val squareVal = (a: Int) => a * a def addOne(f: Int => Int, arg: Int) = f(arg) + 1 println("square(2):" + square(2))
println("squareWithBlock(2):" + squareWithBlock(2))
println("squareVal(2):" + squareVal(2))
println("addOne(squareVal,2):" + addOne(squareVal, 2))

执行结果:

square(2):4
squareWithBlock(2):4
squareVal(2):4
addOne(squareVal,2):5

def log(msg: => String)按名称传递,参数只有在实际使用时才计算

使用class定义类,使用new生成类,构造函数不是特殊的方法,他们是除了类的方法定义之外的代码

class Calculator(brand: String) {
/**
* A constructor.
*/
val color: String = if (brand == "TI") {
"blue"
} else if (brand == "HP") {
"black"
} else {
"white"
} // An instance method.
def add(m: Int, n: Int): Int = m + n
}
val calc = new Calculator("HP")
calc.color

特质(trait)

特质类似于java中interface,但trait则可以定义方法体,通过with关键字,一个类可以扩展多个特质:

在scala中重写一个方法是需要指定override关键词的。如果重写一个方法时,没有加上override关键词,那么scala编译会无法通过。

trait Friendly {
def greet() = "Hi"
} class Dog extends Friendly {
override def greet() = "Woof"
} class HungryDog extends Dog {
override def greet() = "I'd like to eat my own dog food"
} trait ExclamatoryGreeter extends Friendly {
override def greet() = super.greet() + "!"
} var pet: Friendly = new Dog
println(pet.greet()) pet = new HungryDog
println(pet.greet()) pet = new Dog with ExclamatoryGreeter
println(pet.greet()) pet = new HungryDog with ExclamatoryGreeter
println(pet.greet())

result:

Woof

I'd like to eat my own dog food

Woof!

I'd like to eat my own dog food!

类型

泛型,可以到用方括号语法引入的类型参数

object

scala中没有静态方法和属性,全部由singleton object(单例对象)来替代

参考文献

http://zh.scala-tour.com/#/welcome

http://twitter.github.io/scala_school/zh_cn/index.html

first step to scala

A Tour of Scala

广告

点击Spark加入群Spark,分享更多Spark相关信息

Scala快速入门-基础的更多相关文章

  1. Scala快速入门 - 基础语法篇

    本篇文章首发于头条号Scala快速入门 - 基础语法篇,欢迎关注我的头条号和微信公众号"大数据技术和人工智能"(微信搜索bigdata_ai_tech)获取更多干货,也欢迎关注我的 ...

  2. Scala快速入门到精通 视频教程 百度云网盘下载地址

    Scala快速入门到精通  视频教程 百度云网盘下载地址 Scala快速入门到精通 下载地址链接:https://pan.baidu.com/s/1bqGIKyF 密码:ojwd

  3. scala快速入门之文档注释

    scala快速入门之文档注释 1.在项目栏的目录树中找到该源码,右击点击Show in Explorer, 即可找到该源码的本地路径,在路径中输入cmd 2.执行scaladoc -d  生成文档注释 ...

  4. Scala快速入门(四)——继承、接口

    Scala快速入门(四)--继承.接口 一.继承 1.继承的概念:省略 2.模板: class Person(n:String,a:Int) { var name:String=n var age:I ...

  5. Spark(七) -- Scala快速入门

    Scala作为Spark的开发语言,想要成为Spark高手,精通Scala是必须要走的一条路 然后一门语言并不是你想精通就能够精通的,更何况是Scala这种面向对象又面向函数的编程语言,个人觉得其学习 ...

  6. Objective-C 快速入门--基础(二)

    1.什么是继承?OC中的继承有哪些特点? “继承”是面向对象软件技术当中的一个概念.如果一个类A继承自另一个类B,就把这个A称为"B的子类",而把B称为"A的父类&quo ...

  7. Scala 快速入门

     Scalable 编程语言 纯正的的面向对象语言 函数式编程语言 无缝的java互操作 scala之父 Martin Odersky 1. 函数式编程 函数式编程(functional progr ...

  8. CSS快速入门基础篇,让你快速上手(附带代码案例)

    1.什么是CSS 学习思路 CSS是什么 怎么去用CSS(快速上手) CSS选择器(难点也是重点) 网页美化(文字,阴影,超链接,列表,渐变等) 盒子模型 浮动 定位 网页动画(特效效果) 项目格式: ...

  9. Spark记录-scala快速入门

    1.hello world程序 object HelloWorld { def main(args: Array[String]) { println("Hello,World!" ...

随机推荐

  1. FileBeats安装

    FileBeats安装 FileBeats官方下载链接: https://www.elastic.co/downloads/beats/filebeat 也可以直接使用以下命令下载(文章下载目录一概为 ...

  2. 微信小程序 唯一标识 加减

    var nums = 'goods_list[' + e.currentTarget.dataset.indexs+'].goods_num' //console.log(nuns) var num ...

  3. telent connection refused

    1.问题场景 Centos7 做flume案例时,telnet hadoop-senior03.itguigu.com 44444 总是Connection redused, Trying 192.1 ...

  4. 微信小程序通过api接口将json数据展现到小程序上

    实现知乎客户端的一个重要知识前提就是,要知道怎么通过知乎新闻的接口,来把数据展示到微信小程序端上. 那么我们这一就先学习一下,如何将接口获取到的数据展示到微信小程序上. 1.用到的知识点 <1& ...

  5. 关于C链表的实现

    学习了数据结构后,自己学习写了一个链表的程序.初步功能是实现了.但是不知道会不会有一些隐含的问题.所以希望大佬指导指导 /******************/ /*一个小的链表程序*/ /***** ...

  6. 数组循环左移 i 位

    数组左移 i 位 3 种方法 1.临时数组存储 先将前 i 个元素用数组存起来 再将后 n - i 个元素左移 i 位 最后将存起来的数组添加到后面去即可 2.通过多次调用左移 1 位的函数 3.翻转 ...

  7. Django中的模型继承

    1.使用最原始的方式继承 class Animal(models.Model): name = models.CharField(max_length=20) age = models.Integer ...

  8. 2 进程multiprocessing [mʌltɪ'prəʊsesɪŋ] time模块

    1.multiprocessing模块 multiprocessing模块就是跨平台版本的多进程模块. multiprocessing模块提供了一个Process类来代表一个进程对象, 2.Proce ...

  9. Windows Server 2008 R2 安装域

    在Windows Server 2008 R2里面安装域. 1.首先在"服务"里面添加"角色": 2.选择对应的域角色 3.安装完成后要启动配置向导 4.选择新 ...

  10. imageNamed和imageWithContextOfFile的区别?哪个性能高

    imageNamed性能高 1.用imageNamed的方式加载时,图片使用完毕后缓存到内存中,内存消耗多,加载速度快.即使生成的对象被 autoReleasePool释放了,这份缓存也不释放,如果图 ...