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

相关文章

MySQL中my.ini文件的基础配置和优化配置方式

《MySQL中my.ini文件的基础配置和优化配置方式》文章讨论了数据库异步同步的优化思路,包括三个主要方面:幂等性、时序和延迟,作者还分享了MySQL配置文件的优化经验,并鼓励读者提供支持... 目录mysql my.ini文件的配置和优化配置优化思路MySQL配置文件优化总结MySQL my.ini文件

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

【Linux 从基础到进阶】Ansible自动化运维工具使用

Ansible自动化运维工具使用 Ansible 是一款开源的自动化运维工具,采用无代理架构(agentless),基于 SSH 连接进行管理,具有简单易用、灵活强大、可扩展性高等特点。它广泛用于服务器管理、应用部署、配置管理等任务。本文将介绍 Ansible 的安装、基本使用方法及一些实际运维场景中的应用,旨在帮助运维人员快速上手并熟练运用 Ansible。 1. Ansible的核心概念

AI基础 L9 Local Search II 局部搜索

Local Beam search 对于当前的所有k个状态,生成它们的所有可能后继状态。 检查生成的后继状态中是否有任何状态是解决方案。 如果所有后继状态都不是解决方案,则从所有后继状态中选择k个最佳状态。 当达到预设的迭代次数或满足某个终止条件时,算法停止。 — Choose k successors randomly, biased towards good ones — Close

【VUE】跨域问题的概念,以及解决方法。

目录 1.跨域概念 2.解决方法 2.1 配置网络请求代理 2.2 使用@CrossOrigin 注解 2.3 通过配置文件实现跨域 2.4 添加 CorsWebFilter 来解决跨域问题 1.跨域概念 跨域问题是由于浏览器实施了同源策略,该策略要求请求的域名、协议和端口必须与提供资源的服务相同。如果不相同,则需要服务器显式地允许这种跨域请求。一般在springbo

音视频入门基础:WAV专题(10)——FFmpeg源码中计算WAV音频文件每个packet的pts、dts的实现

一、引言 从文章《音视频入门基础:WAV专题(6)——通过FFprobe显示WAV音频文件每个数据包的信息》中我们可以知道,通过FFprobe命令可以打印WAV音频文件每个packet(也称为数据包或多媒体包)的信息,这些信息包含该packet的pts、dts: 打印出来的“pts”实际是AVPacket结构体中的成员变量pts,是以AVStream->time_base为单位的显

C 语言基础之数组

文章目录 什么是数组数组变量的声明多维数组 什么是数组 数组,顾名思义,就是一组数。 假如班上有 30 个同学,让你编程统计每个人的分数,求最高分、最低分、平均分等。如果不知道数组,你只能这样写代码: int ZhangSan_score = 95;int LiSi_score = 90;......int LiuDong_score = 100;int Zhou

c++基础版

c++基础版 Windows环境搭建第一个C++程序c++程序运行原理注释常亮字面常亮符号常亮 变量数据类型整型实型常量类型确定char类型字符串布尔类型 控制台输入随机数产生枚举定义数组数组便利 指针基础野指针空指针指针运算动态内存分配 结构体结构体默认值结构体数组结构体指针结构体指针数组函数无返回值函数和void类型地址传递函数传递数组 引用函数引用传参返回指针的正确写法函数返回数组

【QT】基础入门学习

文章目录 浅析Qt应用程序的主函数使用qDebug()函数常用快捷键Qt 编码风格信号槽连接模型实现方案 信号和槽的工作机制Qt对象树机制 浅析Qt应用程序的主函数 #include "mywindow.h"#include <QApplication>// 程序的入口int main(int argc, char *argv[]){// argc是命令行参数个数,argv是

【MRI基础】TR 和 TE 时间概念

重复时间 (TR) 磁共振成像 (MRI) 中的 TR(重复时间,repetition time)是施加于同一切片的连续脉冲序列之间的时间间隔。具体而言,TR 是施加一个 RF(射频)脉冲与施加下一个 RF 脉冲之间的持续时间。TR 以毫秒 (ms) 为单位,主要控制后续脉冲之前的纵向弛豫程度(T1 弛豫),使其成为显著影响 MRI 中的图像对比度和信号特性的重要参数。 回声时间 (TE)