如果您熟悉Java语言语法和编程,那么学习Scala将会很容易。Scala和Java之间最大的句法差异在于行结束字符的分号(;) 是可选的。

当编写Scala程序时,它可以被定义为通过调用彼此的方法进行通信的对象的集合。现在我们简单地看一下类,对象,方法和实例变量的含义。

  • 对象 - 对象有状态和行为。一个对象是类的一个实例。例如 - 狗有状态:颜色,名称,品种,它行为有:摇摆,吠叫和吃东西。
  • 类 - 可以将类定义为描述与该类相关的行为/状态的模板/蓝图。
  • 方法 - 一个方法基本上是一种行为。一个类可以包含很多方法。将逻辑代码写入方法中,数据在方法中操纵并且执行所有的动作。
  • 字段 - 每个对象都有其唯一的一组实例变量,称为字段。对象的状态是由分配给这些字段的值来创建的。
  • 闭包 - 闭包是一个函数,其返回值取决于在此函数之外声明的一个或多个变量的值。
  • 特征 - 特征(Traits)封装了方法和字段定义,然后可以通过将它们混合到类中来重用它们,特征(Traits)用于通过指定支持的方法的签名来定义对象类型。

第一个Scala项目

如果您熟悉Java语言语法和编程,那么学习Scala将会很容易。Scala和Java之间最大的句法差异在于行结束字符的分号(;) 是可选的。

当编写Scala程序时,它可以被定义为通过调用彼此的方法进行通信的对象的集合。现在我们简单地看一下类,对象,方法和实例变量的含义。

  • 对象 - 对象有状态和行为。一个对象是类的一个实例。例如 - 狗有状态:颜色,名称,品种,它行为有:摇摆,吠叫和吃东西。
  • 类 - 可以将类定义为描述与该类相关的行为/状态的模板/蓝图。
  • 方法 - 一个方法基本上是一种行为。一个类可以包含很多方法。将逻辑代码写入的方法中,数据在方法中操纵并且执行所有的动作。
  • 字段 - 每个对象都有其唯一的一组实例变量,称为字段。对象的状态是由分配给这些字段的值来创建的。
  • 闭包 - 闭包是一个函数,其返回值取决于在此函数之外声明的一个或多个变量的值。
  • 特征 - 特征(Traits)封装了方法和字段定义,然后可以通过将它们混合到类中来重用它们,特征(Traits)用于通过指定支持的方法的签名来定义对象类型。

第一个Scala项目

我们可以通过两种模式执行Scala程序:

  • 交互模式
  • 脚本模式

1. 交互模式

打开命令提示符并使用以下命令打开Scala

注意: 需要先下载: scala-2.12.x.tgz ,下载地址: http://downloads.lightbend.com/scala/2.12.3/scala-2.12.3.tgz ,并解压到一个目录,这里解压到:D:\software\ ,

打开命令提示符进入到目录:D:\software\scala-2.12.3\bin 执行如下命令运行程序 -

D:\software\scala-2.12.\bin> scala
Welcome to Scala 2.12. (Java HotSpot(TM) -Bit Server VM, Java 1.8.0_65).
Type in expressions for evaluation. Or try :help. scala> println("Hello, Scala!");
Hello, Scala! scala>

2. 脚本模式

使用以下说明在脚本模式下编写Scala程序。打开记事本创建一个源文件:HelloWorld.scala,保存在目录:D:\software\scala-2.12.3\bin 下,并在其中编写以下代码 -

object HelloWorld {
/* This is my first java program.
* This will print 'Hello World' as the output
*/
def main(args: Array[String]) {
println("Hello, world!") // prints Hello World
}
}

打开命令提示符窗口并转到保存程序文件的目录。使用'scalac'命令编译Scala程序,它将在当前目录中生成一些类文件。其中一个将被编译生成为HelloWorld.class。 这是一个使用'scala'命令在Java虚拟机(JVM)上运行的字节码。

使用以下命令来编译和执行Scala程序及输出结果如下 -

D:\software\scala-2.12.\bin>scalac HelloWorld.scala

D:\software\scala-2.12.\bin>scala HelloWorld
Hello, world! D:\software\scala-2.12.\bin>

基础语法

以下是Scala编程中的基本语法和编码约定。

    • 区分大小写 - Scala是区分大小写的,比如标识符Hellohello在Scala中表示不同的含义(对象)。
    • 类名称 - 对于所有类名,第一个字母应为大写。如果使用多个单词来形成类的名称,则每个内部单词的第一个字母应该是大写。
      示例 - class MyFirstScalaClassclass Employee类等。

    • 方法名称 - 所有方法名称应以小写字母开头。如果使用多个单词形成方法的名称,则每个内部单词的第一个字母应为大写。
      示例 - def myMethodName()def getName()等。

    • 程序文件名 - 程序文件的名称应与对象名称完全匹配。保存文件时,您应该使用对象名称保存它(记住Scala是区分大小写的),并将.scala附加到文件名称的末尾。 (如果文件名和对象名不匹配,则程序将不会编译)。
      示例 - 假设HelloWorld是对象名称。 那么文件应该保存为HelloWorld.scala

    • def main(args:Array [String]) - Scala程序从main()方法开始,这是每个Scala程序的强制性部分。

Scala标识符

所有Scala组件都需要名称。用于对象,类,变量和方法的名称称为标识符。关键字不能用作标识符,标识符区分大小写。Scala支持四种类型的标识符。

字母数字标识符

字母数字标识符以字母或下划线开头,后面可以有更多的字母,数字或下划线。 $字符是Scala中的保留关键字,不应在标识符中使用。

以下是合法的字母数字标识符 -

age, salary, _value,  __1_value

以下是非法标识符 -

$salary, 123abc, -salary

运算符标识符

运算符标识符由一个或多个运算符字符组成。运算符字符是可打印的ASCII字符,如:+:?~#

以下是合法运算符标识符 -

+ ++ ::: <?> :>

Scala编译器将在内部将操作符标识符转换成具有嵌入式$字符的合法Java标识符。例如,标识符:->将被内部表示为$colon$minus$greater

混合标识符

混合标识符由字母数字标识符组成,后面跟着一个下划线和一个操作符标识符。

以下是合法的混合标识符 -

unary_+,  myvar_=

这里,一元_+用作方法名称定义一个一元的+运算符,而myvar_=用作方法名定义一个赋值运算符(运算符重载)。

字面识别符

一个文字标识符是一个随意的字符串,包含在后面的勾号(...)中。

以下是合法的文字标识符 -

`x` `<clinit>` `yield`

Scala关键字

以下列表显示Scala中的保留字(关键字),这些保留字不能用作常量或变量或任何其他标识符名称。

abstract case catch class
def do else extends
false final finally for
forSome if implicit import
lazy match new Null
object override package private
protected return sealed super
this throw trait Try
true type val Var
while with yield  
- : = =>
<- <: <% >:
# @  

Scala注释

Scala支持与Java类似的单行和多行注释。多行注释可以嵌套,但需要正确嵌套。注释中任何字符都被Scala编译器忽略。

object HelloWorld {
/* This is my first java program.
* This will print 'Hello World' as the output
* This is an example of multi-line comments.
*/
def main(args: Array[String]) {
// Prints Hello World
// This is also an example of single line comment.
println("Hello, world!")
}
}

空行和空格

只包含空格的行(可能带有注释)称为空行,Scala完全忽略它。标记可以由空格字符和/或注释分隔。

换行字符

Scala是一种面向行的语言,其语句可能以分号(;)或换行符终止。语句结尾处的分号(;)通常是可选的。如果需要,您可以输入一个分号(;),但如果语句在单行上自行显示,则不需要输入。 另一方面,如果在单行上写多个语句,则需要分号。 下面的语法是多个语句的用法。

val s = "hello"; println(s)

Scala包

一个包是一个命名的代码模块。 例如,Lift实用程序包是net.liftweb.util。包声明是源文件中的第一个非注释行,如下所示:

package com.liftcode.stuff

导入Scala软件包,以便在当前的编译范围内引用它们。 以下语句导入scala.xml包的内容 -

import scala.xml._

也可以从scala.collection.mutable包导入单个类和对象,例如:HashMap

import scala.collection.mutable.HashMap

可以从单个包导入多个类或对象,例如,来自scala.collection.immutable包的TreeMapTreeSet -

import scala.collection.immutable.{TreeMap, TreeSet}

应用动态

一个能够进行动态调用的标记特征。此特征的实例x允许方法调用x.meth(args)用于任意方法名称和参数列表args以及对任意字段名称字段的字段访问x.field。此功能在Scala-2.10中引入。

如果调用不是由本机支持的(即,如果类型检查失败),则根据以下规则重写:

foo.method("blah") ~~> foo.applyDynamic("method")("blah")
foo.method(x = "blah") ~~> foo.applyDynamicNamed("method")(("x", "blah"))
foo.method(x = , ) ~~> foo.applyDynamicNamed("method")(("x", ), ("", ))
foo.field ~~> foo.selectDynamic("field")
foo.varia = ~~> foo.updateDynamic("varia")()
foo.arr() = ~~> foo.selectDynamic("arr").update(, )
foo.arr() ~~> foo.applyDynamic("arr")()

Scala系统学习(三):Scala基础语法的更多相关文章

  1. 学习java之基础语法(三)

    学习java之基础语法(三) java运算符 计算机的最基本用途之一就是执行数学运算,作为一门计算机语言,Java也提供了一套丰富的运算符来操纵变量.我们可以把运算符分成以下几组: 算术运算符 关系运 ...

  2. 《Java程序设计》第三章-基础语法

    20145221<Java程序设计>第三章-基础语法 总结 教材学习内容总结 类型.变量与运算符 类型 Java可区分为基本类型(Primitive Type)和类类型(Class Typ ...

  3. Java学习笔记之---基础语法

    Java学习笔记之---基础语法 一. Java中的命名规范 (一)包名 由多个单词组成时,所有字母小写(例如:onetwo) (二)类名和接口 由多个单词组成时,所有单词首字母大写(例如:OneTw ...

  4. 学习java之基础语法(一)

    学习java之基础语法(一) 基本语法 编写 Java 程序时,应注意以下几点: 大小写敏感:Java 是大小写敏感的,这就意味着标识符 Hello 与 hello 是不同的. 类名:对于所有的类来说 ...

  5. Scala系统学习(二):Scala开发环境安装配置

    Scala可以安装在任何基于UNIX/Linux或基于Windows的系统上.在您的机器上开始安装Scala之前,必须在计算机上安装Java 1.8或更高版本. 下面请按照以下步骤安装Scala. 步 ...

  6. Scala系统学习(一):Scala概述

    Scala是可扩展语言的缩写,是一种混合功能编程语言. 它由Martin Odersky创建. Scala顺利整合面向对象和函数式语言的功能. Scala被编译后在Java虚拟机上运行. 许多现有公司 ...

  7. Scala - 快速学习01 - Scala简介

    Scala简介 Scala(Scalable Language)是一门多范式(multi-paradigm)编程语言,Scala的设计吸收借鉴了许多种编程语言的思想,具备面向对象编程.函数式编程等特性 ...

  8. Java基础知识二次学习-- 第二章 基础语法与递归补充

    第二章 基础语法与递归补充   时间:2017年4月24日10:39:18 章节:02章_01节,02章_02节 视频长度:49:21 + 15:45 内容:标识符,关键字与数据类型 心得:由字母,下 ...

  9. Hive学习笔记:基础语法

    Hive基础语法 1.创建表 – 用户表 CREATE [EXTERNAL外部表] TABLE [IF NOT EXISTS 是否存在] HUserInfo ( userid int comment ...

随机推荐

  1. HTML-锚点-JS跳转锚点

    window.location.hash使用说明,这篇写的挺详细的 http://www.cnblogs.com/nifengs/p/5104763.html a标签的话是 name,div呢是id, ...

  2. 杨辉三角(Pascal Triangle)的几种C语言实现及其复杂度分析

    说明 本文给出杨辉三角的几种C语言实现,并简要分析典型方法的复杂度. 本文假定读者具备二项式定理.排列组合.求和等方面的数学知识. 一  基本概念 杨辉三角,又称贾宪三角.帕斯卡三角,是二项式系数在三 ...

  3. 很好用的php在线调试工具

    什么叫在线调试?就是在线上生产环境进行调试,假设有一天某个用户报某个页面某个数据怎么不对啊,看来线上出BUG了,于是你要迅速找出原因,首先看日志,可是悲剧的没有足够的日志让你确定线上BUG的原因,也许 ...

  4. [转载]Array.prototype.slice.call(arguments,1)原理

    Array.prototype.slice.call(arguments,1)该语句涉及两个知识点. arguments是一个关键字,代表当前参数,在javascript中虽然arguments表面上 ...

  5. vue案例 - v-model实现自定义样式の多选与单选

    接,上文:https://www.cnblogs.com/padding1015/p/9265985.html 这两天在玩mpvue,但是下午如果对着文档大眼瞪小眼的话,肯定会睡着的. 想起昨晚的fl ...

  6. Android studio修改字体(font)大小(size)

    Android Studio 默认编辑器(Editor)的方案(Scheme)是无法修改字体的, 可以Save as, 保存为新的方案(Scheme), 然后更改字体大小; 位置: File-> ...

  7. Linux 安装Ruby详解(在线和离线安装)

    很多时候我们会发现,真实的生成环境很多都没有外网,只有内网环境,这个时候我们又需要安装Ruby,则不能提供yum命令进行在线安装了,这个时候我们就需要下载安装包进行离线安装.本文主要简单介绍如果离线安 ...

  8. linux中删除文件名称乱码

    在最近的操作中发现一些上传的文件有乱码,更改几次都无法正常转换到中文.下面给出正确的解决方案: 使用 ls -i 或者 ls -inum 查找出文件id号(红色字体) [root@localhost ...

  9. 使用sql语句删除数据库中重复的数据

    在数据库中有一批数据,但是由于数据入库之前某些不当的操作引入了一些重复的数据,需要将这些重复的数据删除.数据的结构大概是下面的样子 CREATE TABLE [dbo].[aaa]( [id] [in ...

  10. 【CF772D】Varying Kibibits FWT

    [CF772D]Varying Kibibits 题意:定义函数f(a,b,c...)表示将a,b,c..的10进制下的每一位拆开,分别取最小值组成的数.如f(123,321)=121,f(530,  ...