网站首页 > 基础教程 正文
Scala是一门多范式编程语言,集成了面向对象和函数式语言的特性。本篇文章将以代码实例的形式简单介绍一下Scala语言的基础语法。
声明值和变量
// val声明的变量是不可变的 val str1 = "Hello World!" val str2 : String = "Hello World!" val str3 : java.lang.String = "Hello World!" println(str1) println(str2) println(str3) // var声明的变量是可变的 var str5 = "Hello World!" str5 = "str5 Hello World!" println(str5)
基本数据类型
Scala的数据类型包括:Byte、Char、Short、Int、Long、Float、Double和Boolean。在Scala中,这些类型都是“类”,并且都是包scala的成员,比如,Int的全名是scala.Int。对于字符串,Scala用java.lang.String类来表示字符串。
Scala的字面量包括:整数字面量、浮点数字面量、布尔型字面量、字符字面量、字符串字面量、符号字面量、函数字面量和元组字面量。举例如下:
val i = 123 //123就是整数字面量 val i = 3.14 //3.14就是浮点数字面量 val i = true //true就是布尔型字面量 val i = 'A' //'A'就是字符字面量 val i = "Hello" //"Hello"就是字符串字面量 // Scala允许对“字面量”直接执行方法 5.toString() //产生字符串"5" "abc".intersect("bcd") //输出"bc"
操作符
Scala的常用操作符:加(+)、减(-) 、乘(*) 、除(/) 、余数(%)、大于(>)、小于(<)、大于等于(>=)和小于等于(<=)等,这些操作符就是方法。
Scala的操作符就是方法,a 方法 b和a.方法(b)是等价的,前者是后者的简写形式,这里的+是方法名,是Int类中的一个方法。
// 下面三种写法的输出结果都是8 val sum1 = 5 + 3 val sum2 = (5).+(3) val sum2 = 5.+(3)
控制结构
1、if条件表达式
val x = 6 if (x > 0) { println("x = " + x) } else { println("x = " + x) } val x = 3 if (x > 0) { println("x = " + x) } else if (x == 0) { println("x = 0") } else { println("x = " + x) } // Scala中的if表达式的值可以赋值给变量 val a = if (x > 0) 1 else -1
2、while循环
var i = 9 while (i > 0) { i -= 1 printf("i is %d\n", i) } var i = 0 do { i += 1 println(i) } while (i < 5)
3、for循环
// for Range // Range可以是一个数字区间表示 i to j ,或者 i until j,左箭头 <- 用于为变量 x 赋值。 for (a <- 1 to 10) { println("a = " + a); } for (a <- 1 until 10) { println("a = " + a); } for( a <- 1 to 3; b <- 1 to 3){ println( "a = " + a ); println( "Value of b: " + b ); } // 循环集合 var a = 0; val numList = List(1, 2, 3, 4, 5, 6); for (a <- numList) { println("a = " + a); } // 循环过滤 var a = 0; val numList = List(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); for (a <- numList if a != 3; if a < 8) { println("a = " + a); } // 使用yield // 大括号中用于保存变量和条件,retVal是变量,循环中的yield会把当前的元素记下来,保存在集合中,循环结束后将返回该集合。 var a = 0; val numList = List(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); var retVal = for { a <- numList if a != 3; if a < 8 } yield a for(a <- retVal) { println("a = " + a); }
数组
1、定长数组
定长数组,就是长度不变的数组,在Scala中使用Array进行声明,如下:
//声明一个长度为3的整型数组,每个数组元素初始化为0 val intValueArr = new Array[Int](3) //在Scala中,对数组元素的应用,是使用圆括号,而不是方括号,也就是使用intValueArr(0),而不是intValueArr[0],这个和Java是不同的。 intValueArr(0) = 12 intValueArr(1) = 45 intValueArr(2) = 33 //声明一个长度为3的字符串数组,每个数组元素初始化为null val strArr = new Array[String](3) strArr(0) = "Flink" strArr(1) = "Storm" strArr(2) = "Spark" for (i <- 0 to 2) println(strArr(i)) //Scala提供了更加简洁的数组声明和初始化方法,如下: val intValueArr = Array(12, 45, 33) val strArr = Array("Flink", "Storm", "Spark") //从上面代码可以看出,都不需要给出数组类型,Scala会自动根据提供的初始化数据来推断出数组的类型。
2、可变数组
可变数组需要导入包scala.collection.mutable.ArrayBuffer
//导入ArrayBuffer包 import scala.collection.mutable.ArrayBuffer //定义一个可变的数组 val arr : ArrayBuffer[String] = new ArrayBuffer[String]() //在末尾添加一个元素 arr += "Hadoop" //在末尾添加多个元素 arr += ("Hive", "Hbase") //在末尾添加一个集合 arr ++= ArrayBuffer("Scala", "Java") //在指定位置添加元素 arr(1) = "spark" arr.insert(1, "Flume") arr.insert(1, "Kafka", "Kylin") arr.insertAll(1, ArrayBuffer("Hello", "World")) println(arr) //更新元素 arr(1) = "insistent" arr.update(2, "Java") println(arr) //获取指定元素 println(arr(1)) println(arr.apply(2)) println(arr.take(3)) //删除元素 arr -= "insistent" //删除集合 arr -= ("Java", "Kafka") arr.remove(1) //从1处开始删掉三个 arr.remove(1, 3) //从前往后移除n个元素 arr.trimStart(1) //从后往前移除n个元素 arr.trimEnd(1) println(arr) //遍历数组 for (i <- arr) { print(i + " ") } //变长数组转成定长数组 arr.toArray //定长数组转成变长数组 array.toBuffer
猜你喜欢
- 2024-10-12 Scala初学者入门指南!涵盖20多个基本技巧
- 2024-10-12 Scala循环性能问题,为了性能,你愿意牺牲代码的可维护性么?
- 2024-10-12 使用Apache Kafka时的7个错误 apache kafka实战pdf
- 2024-10-12 scala中为什么不建议用return scala for until
- 2024-10-12 scala——泛型方法、类、特质的使用,泛型边界、协变逆变非变
- 2024-10-12 程序员构建总是出问题,怎么办? 程序员构建总是出问题,怎么办呢
- 2024-10-12 scala——列表、元祖、列表相关知识
- 2024-10-12 scala语言基础图解-第一阶段(变量-条件-循环-方法-函数-集合)
- 2024-10-12 Scala入门视频已更新至88讲,后续还有大约20讲左右的视频就结束
- 2024-10-12 Scala快速入门 - 环境安装篇 scala安装步骤
- 最近发表
- 标签列表
-
- gitpush (61)
- pythonif (68)
- location.href (57)
- tail-f (57)
- pythonifelse (59)
- deletesql (62)
- c++模板 (62)
- css3动画 (57)
- c#event (59)
- linuxgzip (68)
- 字符串连接 (73)
- nginx配置文件详解 (61)
- html标签 (69)
- c++初始化列表 (64)
- exec命令 (59)
- canvasfilltext (58)
- mysqlinnodbmyisam区别 (63)
- arraylistadd (66)
- node教程 (59)
- console.table (62)
- c++time_t (58)
- phpcookie (58)
- mysqldatesub函数 (63)
- window10java环境变量设置 (66)
- c++虚函数和纯虚函数的区别 (66)