前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Scala 学习:N-001

Scala 学习:N-001

作者头像
谢伟
发布2018-06-06 12:06:04
7620
发布2018-06-06 12:06:04
举报
文章被收录于专栏:GopherCoder

主题:scala初识

  1. 是什么
  2. 开发环境的搭建
  3. 简单的语法
    1. 变量
    2. 数据类型
    3. 函数与代码块
    4. if, for
    5. try, match
    6. 求值策略:call by value; call by name
    7. 柯里化
    8. 递归和尾递归

1.

  1. 下载scala
  2. 下载IntelliJ + scala plugin
  3. 下载java SDK
  4. 配置scala环境
  5. 配置java环境

验证是否安装成功:

  1. cmd
  2. java -version
  3. scala -version

Paste_Image.png

2.

Scala 简介: Scala 是 Scalable Language 的简写,是一门多范式的编程语言

Scala 特性:

1. 面向对象特性

Scala是一种纯面向对象的语言,每个值都是对象。对象的数据类型以及行为由类和特质描述。 类抽象机制的扩展有两种途径:一种途径是子类继承,另一种途径是灵活的混入机制。这两种途径能避免多重继承的种种问题。

2. 函数式编程

Scala也是一种函数式语言,其函数也能当成值来使用。Scala提供了轻量级的语法用以定义匿名函数,支持高阶函数,允许嵌套多层函数,并支持柯里化。Scala的case class及其内置的模式匹配相当于函数式编程语言中常用的代数类型。 更进一步,程序员可以利用Scala的模式匹配,编写类似正则表达式的代码处理XML数据。

3. 静态类型

Scala具备类型系统,通过编译时检查,保证代码的安全性和一致性。类型系统具体支持以下特性:

  • 泛型类
  • 协变和逆变
  • 标注
  • 类型参数的上下限约束
  • 把类别和抽象类型作为对象成员
  • 复合类型
  • 引用自己时显式指定类型
  • 视图
  • 多态方法
4. 扩展性

Scala的设计秉承一项事实,即在实践中,某个领域特定的应用程序开发往往需要特定于该领域的语言扩展。Scala提供了许多独特的语言机制,可以以库的形式轻易无缝添加新的语言结构: 任何方法可用作前缀或后缀操作符 可以根据预期类型自动构造闭包。

5. 并发性

Scala使用Actor作为其并发模型,Actor是类似线程的实体,通过邮箱发收消息。Actor可以复用线程,因此可以在程序中可以使用数百万个Actor,而线程只能创建数千个。在2.10之后的版本中,使用Akka作为其默认Actor实现。

3.

第一个程序:

  1. cmd
  2. scala

Paste_Image.png

IntelliJ + scala plugin

  1. one.sc # 命令式
  2. one.scala # 脚本

1480234929057.png

4.

注释:

代码语言:javascript
复制
object HelloWorld {
   /* 这是一个 Scala 程序
    * 这是一行注释
    * 这里演示了多行注释
    */
   def main(args: Array[String]) {
      // 输出 Hello World
      // 这是一个单行注释
      println("Hello, world!")
   }
}

5.

正则表达式:

代码语言:javascript
复制
import scala.util.matching.Regex

1. String 类的r() 方法构造一个Regex 对象
2. new Regex()

findFirstIn
findAllIn

replaceFirstIn
replaceAllIn

示例:

代码语言:javascript
复制
import scala.util.matching.Regex

val content:String = "I love wen li min 18717711819"
// 方法一
val pattern1 = """(.ove).*?(\d+)""".r
val allIn1 = pattern1.findAllIn(content)
for (pattern1(str,num)<- allIn1)
  println(str,num)
println((pattern1 findAllIn content).mkString(","))

// 方法二
val pattern2 = new Regex("""(.ove).*?(\d+)""")
val allIn2 = pattern2.findAllIn(content)
for (pattern2(str, num) <- allIn2)
  println(str,num)
println((pattern2 findAllIn content).mkString(","))
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2016.11.27 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 主题:scala初识
  • 1.
  • 2.
    • 1. 面向对象特性
      • 2. 函数式编程
        • 3. 静态类型
          • 4. 扩展性
            • 5. 并发性
            • 3.
            • 4.
            • 5.
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档