关闭

Scala简明教程(1)

标签: Scala基础教程简明
779人阅读 评论(0) 收藏 举报
分类:

                          Scala简明教程(1)

Scala简明教程

目录

      变量声明
      函数
      包package
      数据结构
      字符串
      控制流程
      模式匹配
      面向对象
      泛型
      注解
      Implicit
      空对象Nil,Null,null,Unit,Nothing,None

Scala是一门多范式(multi-paradigm)的编程语言。
      Scala源代码被编译成Java字节码,所以它可以运行于JVM之上,并可以调用现有的Java类库。
洛桑联邦理工学院的Martin Odersky于2001年基于Funnel的工作开始设计Scala。Funnel是把函数式编程思想和佩特里网相结合的一种编程语言。Odersky先前的工作是Generic Java和javac。Java平台的Scala于2003年底/2004年初发布。该语言第二个版本,v2.0,发布于2006年3月。


Scala是面向对象的,比Java更彻底

一切皆为对象, 数值,函数都是对象

强大的静态类型系统   algebraic data types, covariance and contravariance, higher-order types, anonymous types, generic classes, upper and lower type bounds, inner classes and abstract types as object members, compound types, explicitly typed self references , views and polymorphic methods

其它Java不支持的功能:

operator overloading, optional parameters, named parameters, raw strings, and no checked exceptions


    2009年4月,Twitter宣布他们已经把大部分后端程序从Ruby迁移到Scala,其余部分也打算要迁移。这里有一篇文章解释Twitter为什么使用Scala编程语言。
Engineer-to-Engineer Series Programming Languages Programming Languages Scala Talks
Coursera把Scala作为服务器语言使用。Why we love Scala at Coursera
一些Scala学习资料:

Scala documentation
Learning Scala
Effective Scala
Scala School
Scala cheatsheets

    大数据生态圈中的Kafka和Spark都是由Scala开发的,这也是我为什么学习Scala的原因之一。
作为一个Java程序员,我觉得Scala的语法和类C语言如Java,C#等很不一样, 很多语法的技巧在里面。 基于此,我特地整理了这篇文章。 简单扼要的介绍Scala语言的知识点,尤其是和Java不太一样的地方


$变量声明

  1. var x = 5
  2. var x:Double = 5
  3. val y = 7

var声明变量, val声明常量, 类型可省略, Scala可以推断出数据类型


函数:

  1. def f(x: Int) = { x*x }
  2. def f(x: Any): Unit = println(x)
定义函数, 返回值类型可省略, =等号后面可以是块定义或者表达式。


  1. reply()
  2. reply
无参数函数调用时可以省略括号。


  1. names foreach (n => println(n))
  2. names mkString ","
  3. optStr getOrElse "<empty>"

一个参数时可以使用infix写法
infix操作符可以定义如下:

  1.   class MyBool(x: Boolean) {
  2. def and(that: MyBool): MyBool = if (x) that else this
  3. def or(that: MyBool): MyBool = if (x) this else that
  4. def negate: MyBool = new MyBool(!x)

  5. def not(x: MyBool) = x negate; // semicolon required here
  6. def xor(x: MyBool, y: MyBool) = (x or y) and not(x and y)
  7. }

  8. //更多例子
  9. 5.+(3); 5 + 3
  10. (1 to 5) map (_*2)
  11. def f(x: R)
  12. def f(x: => R)
第一个call-by-value ,第二个call-by-name(lazy parameters)


匿名函数(lambda表达式)

  1. (x:R) => x*x

=>可以由 ⇒ 字符替代(\u21D2),同样 <-和 ->也可以由单个的字符取代: ← 和 →


  1. (1 to 5).map(_*2)
  2. (1 to 5).reduceLeft( _+_ )
下划线代表替代


  1. (1 to 5).map(2*)
  2. 等价
  3. (1 to 5).map(2* _)
  4. (1 to 5).map { val x=_*2; println(x); x }
  5. (1 to 5) filter {_%2 == 0} map {_*2}
匿名函数的块风格实现,最后一个语句作为返回值


  1. def compose(g:R=>R, h:R=>R) = (x:R) => g(h(x))
  2. val f = compose({_*2}, {_-1})
多个块作为参数


  1. val zscore = (mean:R, sd:R) => (x:R) => (x-mean)/sd  //currying, obvious syntax.
  2. def zscore(mean:R, sd:R) = (x:R) => (x-mean)/sd  //currying, obvious syntax
  3. def zscore(mean:R, sd:R)(x:R) = (x-mean)/sd       //currying, 语法糖,也叫参数分组. 但是必须按照下面的语法调用:
  4. val normer = zscore(7, 0.4)_         //需要尾部的下划线,仅限于上面一行的语法糖
  5. def sum(args: Int*) = args.reduceLeft(_+_)
可变参数






1
0
查看评论

Scala简明教程

Scala简明教程 目录       变量声明       函数       包package       数据结构 &#...
  • GarfieldEr007
  • GarfieldEr007
  • 2015-12-10 11:34
  • 466

Scala 基础入门教程

1.前言最近在参加Hadoop和Spark培训,需要使用Scala,自学了一下作为入门,这里作一个记录。2.下载1) 在scala官网下载,地址: http://www.scala-lang.org/2) 下载IDE,地址: http://scala-ide.org/3)配置环境...
  • afandaafandaafanda
  • afandaafandaafanda
  • 2016-03-16 16:14
  • 12012

scala实现1-100内的奇数的平方和

为了学习scala,在网上加了个QQ群,群主非要做道题才能加入。题目如标题,要求必须在50个字符内,因为添加好友的验证框就能输入50个字符,于是乎,实现如下:1.方法一 (1 to 100).filter(x=>(x%2)!=0).map(x =>x*x).foldLeft(0)(_+_...
  • u011878191
  • u011878191
  • 2015-06-05 12:56
  • 1242

Scala简明教程(3)

Scala简明教程(3)面向对象 没有访问修饰符的class或者类成员默认都是public类型的参数是private类型class C(x: R) //等价于 class C(private val x: R) var c = new C(4)参数是public类型class C(val x: ...
  • sbq63683210
  • sbq63683210
  • 2016-05-31 14:39
  • 462

Scala简明教程(2)

Scala简明教程(2)包Packageimport scala.collection._ //通配符导入,类似java中的.* import scala.collection.Vector import scala.collection.{Vector, Sequence} //导入多个 im...
  • sbq63683210
  • sbq63683210
  • 2016-05-31 14:12
  • 640

scala入门1(简介与基础语法1)

scala是什么?        Scala 是一门 函数式的面向对象语言。他运行在Java虚拟机上.
  • wangmuming
  • wangmuming
  • 2014-06-24 15:04
  • 6487

scala入门1

scala入门简介
  • huang_xiaoge
  • huang_xiaoge
  • 2016-03-30 22:19
  • 498

【Scala系列一】Scala各种符号的含义

::: :: :::运算符 :::(三个冒号)表示List的连接操作,比如:   Java代码   val a = List(1, 2)   val...
  • songsehaiyang
  • songsehaiyang
  • 2017-12-14 11:28
  • 60

bootstarp简明教程

bootstrap 的学习非常简单,并且它所提供的样式又非常精美。只要稍微简单的学习就可以制作出漂亮的页面。 bootstrap中文网:http://v3.bootcss.com/   bootstrap提供了三种类型的下载: ------------...
  • sinat_25926481
  • sinat_25926481
  • 2015-12-04 08:41
  • 1036

A-Frame简明教程之初体验

本文为A-Frame简明教程系列文章的第一篇,大家可以到专题里了解更多。 A-Frame初体验 关于A-Frame A-Frame是一个利用web技术创建虚拟现实的框架,由moz://a维护支持。 尽管名字起的有点不着调,但是,对于有着web编程背景的人来说,上手容易,而且虚拟现实...
  • whqet
  • whqet
  • 2018-02-05 17:18
  • 92
    个人资料
    • 访问:163238次
    • 积分:3161
    • 等级:
    • 排名:第12920名
    • 原创:144篇
    • 转载:9篇
    • 译文:0篇
    • 评论:16条
    博客专栏
    Spark

    文章:16篇

    阅读:33853