好程序员大数据学习路线分享 spark 之 Scala ,基本语法:
变量
变量的定义:不可变: val a = 2 或者 val a : Int = 2 ( 指定了数据类型 ) lazy val a : Int =2
可变: var a = 2 或者 var a : Int = 2( 指定了数据类型 )
def a = 2
定义变量不能 1. 以数字以及特殊符号( _ 除外)开头 2. 以关键字( var 、 val 、 class 等)开头
def 定义的是??
var 编译后有 set 与 get 方 ☐ 法 所以可以重新赋值
val 编译后只有 get 方法 所以不能再赋值了
lazy 惰性变量 , 只在该变量被调用的时候才实例化,而且后面只能跟 val
def 与 val 差不多 不能重新赋值 更多修饰方法
Scala 变量的类型: Any 是 scala 的顶级类型, Any 下有 AnyVal (值类型)和 AnyRef (引用类型)两个子类
AnyVal : 它有 9 个类型,其中 7 个是指类型: Double Float Byte Int Short Long Char 和两个非值类型: Unit Boolean
AnyRef : 是引用类型,它的子类有: List Option 或者自定义的并继承它的 class
所有的类型都需要首字母大写
Scala 会自动推断类型
Scala 数据类型可以从低到高转换 Byte-Short-Int-Long-Float-Double
Char-Int-Long-Float-Double
注意: scala 内没有强转
操作符
Scala 里没有操作符的概念,所谓的操作符其实都是方法
数学运算: + - * / : % .+ ( ) 注: x+y 与 x.+(y) 等价
关系: < <= > >= ! != ==
位运算: | & ^
如果两个不一样类型的变量进行运算,最终结果的类型是大的那个类型
如果想要格式化输出: var x =5 var y = 5
var n =x + y
print(s”x+y=$n”) 输出结果 x+y=10
当然也可以在结果前面加字符串”x+y”
条件表达式
这种打出来是空,因为else 里不是一个值,而是一个赋值语句
正常应该是 var res = if(sex == 1){“男”}else{“女”}
因为大括号里只有一个 ‘表达式’,大括号可以省略
var res = if(sex == 1)“男”else“女”
f or 循环
for(i<- 1 to 10){println (i)} // 打印 1-10
for(i <- 1 until 10){println (i)} // 打印 1-9
val arr = Array(“java”,”scala”,”python”) // 定义一个数组
for(i<- arr){println (i)} // 打印数组内容
for(i <- 1 to 3 ;j <- 1 to 3 if(i != j)){println(i*10+j)} // 相当于双层 for 循环
val arr =for(i <- 1 until 10) yield (i) // 把 0-9 循环出来后封装进 arr 集合
val arr =for(i <- 1 until 10) yield (i*10)
val res2 = for(i <- arr if i%2 == 0) yield i*100 // 过滤
val arrf = bf.filter(_ %2==0).map(_ *100) // 过滤 _ 是全部数据的意思
在 scala 中不支持 break 语句,但在 scala 2.8 之后 可以利用 Breaks 方式来实现
方法
def m1(x : Int , y : Int ) : Int = {x + y} // 三种声明方式
def m2(x:Int , y:Int) {print(x+y)}
def m3(x:Int , y:Int){x+y}
解释: m1 是方法名 xy 是 int 型的参数 括号外的 int 是返回值类型 x+y 是方法
调用: m1 (3,4)
函数
val f1 = (x:Int , y:Int) => x+y // 声明
val f1 = (x:Int , y:Int) =>{
val sum = x+y
sum*100} // 最后一句作为函数的返回值 函数没有返回值类型
回车之后会看到
f1: (Int, Int) => Int = <function2>
这里的 function2 中的 2 指的是参数的个数
调用: f1 (3,4) // 与方法的调用一致
函数与方法的关系 ???
我们通过一个案例来探讨:
首先创建一个方法: def func (yAge:Int,mAge:Int):String={
val a : Boolean = yAge >= mAge
val str : String = if(a) " 哥哥 " else " 弟弟 "
str
}
我们发现这个条件可以做成一个函数: val m = ( yAge:Int , mAge:Int ) = >{yAge >= mAge}
我们可以调用函数: def func1 (yAge:Int,mAge:Int):String={
val a : Boolean = m(yAge,mAge)
val str : String = if(a) " 哥哥 " else " 弟弟 "
}
我们也可以把函数当做一个参数传入到方法中:
def func1(yAge:Int,mAge:Int,f:(Int,Int) =>Boolean):String={
var a= f(yAge,mAge) 或者 var a :Boolean = f(yAge,mAge)
val res : String=if(a)" 哥哥 " else " 弟弟 "
res
}
调用: println(func1(18,20,m))
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/69913892/viewspace-2653923/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/69913892/viewspace-2653923/
本文深入讲解Scala编程语言的基础知识,包括变量定义与类型、数据类型转换、条件表达式、循环结构、方法与函数的使用,以及如何在Scala中实现特定的逻辑运算。文章通过丰富的示例,帮助读者理解Scala的基本语法和特性。
1302

被折叠的 条评论
为什么被折叠?



