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

相关文章

Java AOP面向切面编程的概念和实现方式

《JavaAOP面向切面编程的概念和实现方式》AOP是面向切面编程,通过动态代理将横切关注点(如日志、事务)与核心业务逻辑分离,提升代码复用性和可维护性,本文给大家介绍JavaAOP面向切面编程的概... 目录一、AOP 是什么?二、AOP 的核心概念与实现方式核心概念实现方式三、Spring AOP 的关

从基础到高级详解Go语言中错误处理的实践指南

《从基础到高级详解Go语言中错误处理的实践指南》Go语言采用了一种独特而明确的错误处理哲学,与其他主流编程语言形成鲜明对比,本文将为大家详细介绍Go语言中错误处理详细方法,希望对大家有所帮助... 目录1 Go 错误处理哲学与核心机制1.1 错误接口设计1.2 错误与异常的区别2 错误创建与检查2.1 基础

Spring的基础事务注解@Transactional作用解读

《Spring的基础事务注解@Transactional作用解读》文章介绍了Spring框架中的事务管理,核心注解@Transactional用于声明事务,支持传播机制、隔离级别等配置,结合@Tran... 目录一、事务管理基础1.1 Spring事务的核心注解1.2 注解属性详解1.3 实现原理二、事务事

Java Instrumentation从概念到基本用法详解

《JavaInstrumentation从概念到基本用法详解》JavaInstrumentation是java.lang.instrument包提供的API,允许开发者在类被JVM加载时对其进行修改... 目录一、什么是 Java Instrumentation主要用途二、核心概念1. Java Agent

Java中最全最基础的IO流概述和简介案例分析

《Java中最全最基础的IO流概述和简介案例分析》JavaIO流用于程序与外部设备的数据交互,分为字节流(InputStream/OutputStream)和字符流(Reader/Writer),处理... 目录IO流简介IO是什么应用场景IO流的分类流的超类类型字节文件流应用简介核心API文件输出流应用文

Kotlin 协程之Channel的概念和基本使用详解

《Kotlin协程之Channel的概念和基本使用详解》文章介绍协程在复杂场景中使用Channel进行数据传递与控制,涵盖创建参数、缓冲策略、操作方式及异常处理,适用于持续数据流、多协程协作等,需注... 目录前言launch / async 适合的场景Channel 的概念和基本使用概念Channel 的

从基础到高级详解Python数值格式化输出的完全指南

《从基础到高级详解Python数值格式化输出的完全指南》在数据分析、金融计算和科学报告领域,数值格式化是提升可读性和专业性的关键技术,本文将深入解析Python中数值格式化输出的相关方法,感兴趣的小伙... 目录引言:数值格式化的核心价值一、基础格式化方法1.1 三种核心格式化方式对比1.2 基础格式化示例

redis-sentinel基础概念及部署流程

《redis-sentinel基础概念及部署流程》RedisSentinel是Redis的高可用解决方案,通过监控主从节点、自动故障转移、通知机制及配置提供,实现集群故障恢复与服务持续可用,核心组件包... 目录一. 引言二. 核心功能三. 核心组件四. 故障转移流程五. 服务部署六. sentinel部署

从基础到进阶详解Python条件判断的实用指南

《从基础到进阶详解Python条件判断的实用指南》本文将通过15个实战案例,带你大家掌握条件判断的核心技巧,并从基础语法到高级应用一网打尽,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一... 目录​引言:条件判断为何如此重要一、基础语法:三行代码构建决策系统二、多条件分支:elif的魔法三、

Python WebSockets 库从基础到实战使用举例

《PythonWebSockets库从基础到实战使用举例》WebSocket是一种全双工、持久化的网络通信协议,适用于需要低延迟的应用,如实时聊天、股票行情推送、在线协作、多人游戏等,本文给大家介... 目录1. 引言2. 为什么使用 WebSocket?3. 安装 WebSockets 库4. 使用 We