scala基础概念

2024-09-04 07:38
文章标签 基础 概念 scala

本文主要是介绍scala基础概念,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Scala是面向行的语言,Scala 语句末尾的分号写或者不写都可以。

对象 - 对象有属性和行为。例如:一只哈士奇的属性有:颜色,名字,行为有:叫、跑、吃等。对象是一个类的实例。
- 类是对象的抽象;对象是类的具体实例。
方法 - 方法描述的基本的行为,一个类可以包含多个方法。
字段 - 每个对象都有它唯一的实例变量集合,即字段。对象的属性通过给字段赋值来创建。


基本语法
区分大小写;
类名 - 对于所有的类名的第一个字母要大写!如果需要使用几个单词来构成一个类的名称,每个单词的第一个字母要大写。例:class MyFirstScalaClass
方法名 - 所有的方法名称的第一个字母用小写!如果若干单词被用于构成方法的名称,则每个单词的第一个字母应大写。例:def myMethodName()
程序文件名 - 程序文件的名称应该与对象名称完全匹配。
def main(args: Array[String]) - Scala程序从main()方法开始处理,这是每一个Scala程序的强制程序入口部分。


注释

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

引用
Scala 使用 import 关键字引用包。import语句可以出现在任何地方,而不是只能在文件顶部。


var声明变量,val声明常量
如var myBian : String = “Foo”//声明变量实例
val myChang : String = “loo”//修改以上变量,声明常量实例myChang
Scala 支持多个变量的声明:val xmax, ymax = 100 // xmax, ymax都声明为100
//在没有指明数据类型的情况下声明变量或常量必须要给出其初始值,
//其数据类型是通过变量或常量的初始值推断出来的,本例会推断为Int类型,否则将会报错。


变量类型声明
如var myVar :Int;也可以赋初值var myVar :Int=10;


scala访问修饰符:公共成员public、保护成员protected、私有成员private
默认情况下,Scala对象的访问级别都是 public。
在 scala 中,对保护(Protected)成员的访问比 java 更严格一些。
作用域保护:
Scala中,访问修饰符可以通过使用限定词强调。
格式为private[x] 或 protected[x] 这里的x指代某个所属的包、类或单例对象。
private[x]读作”这个成员除了对[…]中的类或[…]中的包中的类及它们的伴生对像可见外,对其它所有类都是private。
这种技巧在横跨了若干包的大型项目中非常有用,它允许你定义一些在你项目的若干子包中可见但对于项目外部的客户却始终不可见的东西。


Scala 运算符
1. 算术运算符+-*/% 如:println(” a + b = ” + ( a + b ) ) //假设a=30,b=20,则输出为:a + b = 50
2. 关系运算符 == 、!= 、>=等
3. 逻辑运算符与&& 或|| 非!
例:假定变量 a为1,b为0,

object Test {def main(args: Array[String]) {var a = true;                         //非0值为turevar b = false;println("a && b = " + (a&&b) );       //输出为:a&&b =falseprintln("a || b = " + (a||b) );       //输出为:a||b =tureprintln("!(a && b) = " + !(a && b) ); //输出为:!(a && b) =ture}
}  

4 . 位运算符:按位与&、 或|、 异或^、 取反~、 左移动运算符<<、 右移动运算符>>

5 . 赋值运算符
相加后再赋值 如:C += A 相当于 C = C + A
按位左移后再赋值 如:C <<= 2 相当于 C = C << 2
按位与运算后赋值 如:C &= 2 相当于 C = C & 2
6 . 运算符优先级
基本的优先级:
指针最优,单目运算优于双目运算。如正负号;
先乘除(模),后加减;
先算术运算,后移位运算,最后位运算。请特别注意:1 << 3 + 2 & 7 等价于 (1 << (3 + 2))&7
逻辑运算最后计算


循环
Scala 不支持 break 或 continue 语句,但从 2.8 版本后提供了一种中断循环的方式 //????
无限循环:如果条件永远为 true,则循环将变成无限循环。可以使用 Ctrl + C 键来中断无限循环。


函数
1 . 函数声明
def functionName ([参数列表]) : [return type] //函数声明格式 。return type 可以是任意合法的 Scala 数据类型
//如果你不写等于号和方法主体,那么方法会被隐式声明为”抽象(abstract)”,包含它的类型于是也是一个抽象类型。
2 . 函数定义
def functionName ([参数列表]) : [return type] = { //函数定义格式
function body
return [expr]
}
例:

object Add{def addInt( a:Int, b:Int) : Int={   //函数返回类型为Intvar sum:Int=0sum=a+breturn sum}
}

如果函数没有返回值,可以返回为Unit,类似于java的void。
如:

def hello() : Unit={println("hello,scala")
}

3 . 函数调用

调用上面的addInt()函数:
object Test{def main(args:Array[String]){println("returned value is:" + addInt( 2,3 ))  //输出为 returned value is:5}
}

4 . Scala也是一种函数式语言,所以需要进一步学习scala的很多函数


闭包


从文件上读取内容,可以使用 Scala 的 Source 类及伴生对象来读取文件。


Scala Iterator(迭代器)
是一种用于访问集合的方法。
调用 it.next() 会返回迭代器的下一个元素,并且更新迭代器的状态。
调用 it.hasNext() 用于检测集合中是否还有元素。
让迭代器 it 逐个返回所有元素最简单的方法是使用 while 循环.
例 val it = Iterator(“Baidu”, “Google”, “Taobao”)
while (it.hasNext){
println(it.next()) //输出三行,为:Baidu Google Taobao
使用 it.min 和 it.max 方法从迭代器中查找最大与最小元素.
使用 it.size 或 it.length 方法来查看迭代器中的元素个数/长度。


类和对象
可以使用 new 关键字来创建类的对象,即实例化类。

import java.io._class Point(xc: Int, yc: Int) {var x: Int = xcvar y: Int = ycdef move(dx: Int, dy: Int) {x = x + dxy = y + dyprintln ("x 的坐标点: " + x);println ("y 的坐标点: " + y);}
}object Test {def main(args: Array[String]) {val pt = new Point(10, 20);     //new创建对象//移到一个新的位置pt.move(10, 10);                //输出为  x 的坐标点: 20 y 的坐标点: 30}
}

继承
重写一个非抽象方法,必须使用override修饰符。
只有主构造函数才可以往基类的构造函数里写参数。
在子类中重写超类的抽象方法时,你不需要使用override关键字。
Scala 使用 extends 关键字来继承一个类。


Scala 单例对象
关键字 object
object对象不能带参数。
当单例对象与某个类共享同一个名称时,他被称作是这个类的伴生对象:companion object。
你必须在同一个源文件里定义类和它的伴生对象。
类被称为是这个单例对象的伴生类:companion class。
类和它的伴生对象可以互相访问其私有成员。


Scala Trait(特征)
关键字是 trait
与接口不同的是,它还可以定义属性和方法的实现。
一般情况下Scala的类只能够继承单一父类,但是如果是 Trait(特征) 的话就可以继承多个,从结果来看就是实现了多重继承。
特征构造顺序,特征也可以有构造器。构造器的顺序是类的线性化的反向。


Scala 模式匹配
关键字case
箭头符号 => 隔开了模式和表达式。
match 对应 Java 里的 switch,但是写在选择器表达式之后。即: 选择器 match {备选项}。
match 表达式通过以代码编写的先后次序尝试每个模式来完成计算,只要发现有一个匹配的case,剩下的case不会继续匹配。


使用样例类
使用了case关键字的类定义就是就是样例类(case classes)
样例类是种特殊的类,经过优化以用于模式匹配。


Scala 正则表达式
通过 scala.util.matching 包中的 Regex 类来支持正则表达式。
将匹配的文本替换为指定的关键词,可以使用 replaceFirstIn( ) 方法来替换第一个匹配项,使用 replaceAllIn( ) 方法替换所有匹配项。

这篇关于scala基础概念的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1135404

相关文章

从基础到进阶详解Pandas时间数据处理指南

《从基础到进阶详解Pandas时间数据处理指南》Pandas构建了完整的时间数据处理生态,核心由四个基础类构成,Timestamp,DatetimeIndex,Period和Timedelta,下面我... 目录1. 时间数据类型与基础操作1.1 核心时间对象体系1.2 时间数据生成技巧2. 时间索引与数据

安装centos8设置基础软件仓库时出错的解决方案

《安装centos8设置基础软件仓库时出错的解决方案》:本文主要介绍安装centos8设置基础软件仓库时出错的解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录安装Centos8设置基础软件仓库时出错版本 8版本 8.2.200android4版本 javas

Linux基础命令@grep、wc、管道符的使用详解

《Linux基础命令@grep、wc、管道符的使用详解》:本文主要介绍Linux基础命令@grep、wc、管道符的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录grep概念语法作用演示一演示二演示三,带选项 -nwc概念语法作用wc,不带选项-c,统计字节数-

MySQL 事务的概念及ACID属性和使用详解

《MySQL事务的概念及ACID属性和使用详解》MySQL通过多线程实现存储工作,因此在并发访问场景中,事务确保了数据操作的一致性和可靠性,下面通过本文给大家介绍MySQL事务的概念及ACID属性和... 目录一、什么是事务二、事务的属性及使用2.1 事务的 ACID 属性2.2 为什么存在事务2.3 事务

python操作redis基础

《python操作redis基础》Redis(RemoteDictionaryServer)是一个开源的、基于内存的键值对(Key-Value)存储系统,它通常用作数据库、缓存和消息代理,这篇文章... 目录1. Redis 简介2. 前提条件3. 安装 python Redis 客户端库4. 连接到 Re

SpringBoot基础框架详解

《SpringBoot基础框架详解》SpringBoot开发目的是为了简化Spring应用的创建、运行、调试和部署等,使用SpringBoot可以不用或者只需要很少的Spring配置就可以让企业项目快... 目录SpringBoot基础 – 框架介绍1.SpringBoot介绍1.1 概述1.2 核心功能2

Spring Boot集成SLF4j从基础到高级实践(最新推荐)

《SpringBoot集成SLF4j从基础到高级实践(最新推荐)》SLF4j(SimpleLoggingFacadeforJava)是一个日志门面(Facade),不是具体的日志实现,这篇文章主要介... 目录一、日志框架概述与SLF4j简介1.1 为什么需要日志框架1.2 主流日志框架对比1.3 SLF4

Spring Boot集成Logback终极指南之从基础到高级配置实战指南

《SpringBoot集成Logback终极指南之从基础到高级配置实战指南》Logback是一个可靠、通用且快速的Java日志框架,作为Log4j的继承者,由Log4j创始人设计,:本文主要介绍... 目录一、Logback简介与Spring Boot集成基础1.1 Logback是什么?1.2 Sprin

MySQL复合查询从基础到多表关联与高级技巧全解析

《MySQL复合查询从基础到多表关联与高级技巧全解析》本文主要讲解了在MySQL中的复合查询,下面是关于本文章所需要数据的建表语句,感兴趣的朋友跟随小编一起看看吧... 目录前言:1.基本查询回顾:1.1.查询工资高于500或岗位为MANAGER的雇员,同时还要满足他们的姓名首字母为大写的J1.2.按照部门

Android Mainline基础简介

《AndroidMainline基础简介》AndroidMainline是通过模块化更新Android核心组件的框架,可能提高安全性,本文给大家介绍AndroidMainline基础简介,感兴趣的朋... 目录关键要点什么是 android Mainline?Android Mainline 的工作原理关键