好程序员大数据学习路线分享spark之Scala

本文深入讲解Scala编程语言的基础知识,包括变量定义与类型、数据类型转换、条件表达式、循环结构、方法与函数的使用,以及如何在Scala中实现特定的逻辑运算。文章通过丰富的示例,帮助读者理解Scala的基本语法和特性。

好程序员大数据学习路线分享 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/

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值