还没关注?
快动动手指!
前言
在春节期间,欢天喜地的办理了自己的婚礼,导致春节前后的一段时间都比较忙碌,进而使自己原创文章的脚步放慢了很多。许多朋友在微信公众号后台留言,表示想看大数据相关的文章。那么,我们就接着《大数据之脚踏实地学11--Spark神器的安装》一文,开始Scala编程语言的学习。
纲要
本文所涉及的所有代码都可以正常运行,读者可以直接Copy文内的代码进行测试。本文的主要内容包括:
1)变量的定义
2)数据的基本类型
3)数据类型的转换
4)Scala中常用的运算符
知识点讲解
用法:
val variable_name = initial_value
val variable_name:datatype = initial_value
举例
// 定义val变量 scala> val name = "刘顺祥" name: String = 刘顺祥 scala> name = "xuxin" // 不可以重新赋值 <console>:12: error: reassignment to val name = "xuxin" ^ // 定义var变量 scala> var age:Int = 30 age: Int = 30 scala> age = 28 // var定义的变量,可以重新赋值 age: Int = 28 // 多个变量赋予同一个数值 val x1,x2 : Int = 10
数据类型一览表
数据类型的描述
数据类型 | 数据描述 |
---|---|
Byte | 小整型,区间为 -128 到 127 |
Short | 短整型,区间为 -32768 到 32767 |
Int | 整型,区间为 -2147483648 到 2147483647 |
Long | 长整型,区间为 -9223372036854775808 到 9223372036854775807 |
Float | 单精度浮点型,默认保留7位有效数字 |
Double | 双精度浮点型 |
Char | 字符型,用一对单引号表示 |
String | 字符串型,用一对双引号表示 |
Boolean | 布尔型,两种值为true和false |
Unit | 不返回任何结果的类型,其对应的实例仅为() |
Null | 空值,其对应的实例为null |
Nothing | 底层类,即所有类型的子类型 |
Any | 顶层类,即所有类型的父类型 |
AnyVal | 顶层类,所有值类型的父类 |
AnyRef | 顶层类,所有引用类(如scala类,Java类等)的父类 |
举例
scala> val mybyte : Byte = 124 mybyte: Byte = 124 scala> val mybyte2 : Byte = 321 // 超过Byte的数值范围,会报错 <console>:11: error: type mismatch; found : Int(321) required: Byte val mybyte2 : Byte = 321 // 超过Byte的数值范围,会报错 ^ scala> val myInt : Int = 1234567 // 对于一个整数,默认为Int型 myInt: Int = 1234567 scala> val myLong : Long = 12345678910L // 必须在整数的末尾加上字母l或L,否则溢出 myLong: Long = 12345678910 scala> val myDouble : Double = 3.14159 // 对于一个实数,默认为双精度浮点型 myDouble: Double = 3.14159 scala> val myFloat : Float = 3.14159f // 必须在实数的末尾加上字母f或F myFloat: Float = 3.14159 scala> val myChar : Char = 'A' myChar: Char = A scala> val myString : String = "今天天气很好!" myString: String = 今天天气很好! scala> val myBoolean : Boolean = true myBoolean: Boolean = true
该转换是指数据从低精度往高精度转换的过程,通常在做数学运算时便可以实现转换(前提是一定可以转)。如数据类型一览图中的虚线指向。
举例
scala> val x1 : Byte = 123 x1: Byte = 123 scala> x1 + 100 // Byte + Int 会自动升级为Int res0: Int = 223 scala> val x2 : Int = 10000 x2: Int = 10000 scala> x2 + 1111.1 // Int + Double 会自动升级为Double res1: Double = 11111.1 scala> val x3 : Char = 'A' x3: Char = A scala> x3 + 1 // Char + Int 会自动升级为Int res2: Int = 66 scala> val x4 : Short = x1 + 100 // Int + Int 无法降级到Short,故报错 <console>:12: error: type mismatch; found : Int required: Short val x4 : Short = x1 + 100 // Int + Int 无法降级到Short,故报错
强制转换则是指在无法隐式转换的情况下,借助于对象的“方法”将其强制转换。
举例
scala> val x4 : Short = (x1 + 100).toShort // toShort方法强制转换为Short类型 x4: Short = 223 scala> (x3 + 1).toChar // 将Int型的66强制转换为Char类型 res3: Char = B scala> (23.5/5).toInt // 将Double类型强制转换为Int类型 res5: Int = 4
通过比较运算符,可以得到Boolean类型的值。
运算符 | 含义 |
---|---|
> | 判断运算符左侧的值是否大于右侧的值 |
>= | 判断运算符左侧的值是否大于等于右侧的值 |
< | 判断运算符左侧的值是否小于右侧的值 |
<= | 判断运算符左侧的值是否小于等于右侧的值 |
== | 判断运算符左侧的值是否等于右侧的值 |
!= | 判断运算符左侧的值是否不等于右侧的值 |
借助于逻辑运算符,将多个比较运算符进行连接。
运算符 | 含义 |
---|---|
&& | 逻辑与,双&符号,单&符号属于位运算符 |
|| | 逻辑或,双|符号,单|符号属于位运算符 |
! | 逻辑非 |
举例 构造Scala对象,生成Scala脚本文件CompareOprate.scala(关于构造对象的详细内容将在后期的文章中分享)。如下脚本中介绍了一些比较运算符的实例。
object CompareOprate { def main(args: Array[String]) : Unit = { var a = 18; var b = 8; println("a = " + a + ", b = " + b) println("a >= b = " + (b >= a)) println("a < b = " + (a < b)) println("a == b = " + (a == b)) println("a != b = " + (a != b)) println("a >= b || a < 10 = " + (a >= b || a < 10)) println("!(a <= b) = " + !(a <= b)) } }
Scala文件的执行与Java文件类似,需要一步编译过程,即使用scalac命令对CompareOprate.scala文件做编译。之后再对编译文件执行scala命令。
[root@hadoop char01]# scalac CompareOprate.scala //编译Scala脚本 [root@hadoop char01]# scala CompareOprate // 运行编译后的文件 a = 18, b = 8 a >= b = false a < b = false a == b = false a != b = true a >= b || a < 10 = true !(a <= b) = true
运算符 | 含义 |
---|---|
+ | 和运算,如果加号两边为数值,为求和,如果加号两边包含字符串,则为拼接运算 |
- | 减运算 |
* | 乘法运算 |
/ | 除法运算,需要注意的是,如果分子分母均为整数,则商为整数 |
% | 求余运算 |
+= | 自增运算 |
-= | 自减运算 |
*= | 自乘运算 |
/= | 自除运算 |
举例 构造Scala对象,生成Scala脚本文件MathOprate.scala。如下脚本中介绍了一些基本数学运算符的实例。
object MathOprate { def main(args: Array[String]) : Unit = { var a = 23 val b = 6 println("a="+a + " ,b="+b) // 打印a和b的值 println("a + b =" + (a + b)) // 加法运算 println("a - b =" + (a - b)) // 减法运算 println("a * b =" + (a * b)) // 乘法运算 println("a / b =" + (a / b)) // 除法运算(两个整数的商) println("a * 1.0 / b =" + (a*1.0 / b)) // 除法运算(浮点数与整数的商) println("a % b =" + (a % b)) // 余数运算 var c = a c += 10 // 自加运算 println("a += 10 = " + c) // 式子中的加号为字符串的拼接运算 } }
如上脚本文件的编译过程和执行结果如下:
[root@hadoop char01]# scalac MathOprate.scala //编译Scala脚本 [root@hadoop char01]# scala MathOprate // 运行编译后的文件 a=23 ,b=6 a + b =29 a - b =17 a * b =138 a / b =3 a * 1.0 / b =3.8333333333333335 a % b =5 a += 10 = 33
结语
本期的内容就介绍到这里,如果你有任何问题,欢迎在公众号的留言区域表达你的疑问。同时,也欢迎各位朋友继续转发与分享文中的内容,让更多的人学习和进步。
每天进步一点点:数据分析1480
长按扫码关注我
本文分享自微信公众号 - 数据分析1480(lsxxx2011)
原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。
原始发表时间:2019-02-26
本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。
我来说两句