import java.util.Date
class ScalaTest1 {
}
//在scala里面沒有static關(guān)鍵詞的,在 object修改的代碼塊中定義的方法或者變量或者常量都是靜態(tài)的
object ScalaTest1{
def main(args: Array[String]) {
//常量
val name:String = "hello scala"
//變量
var age = 10
println(name + "\t" + age)
var person=new Person(name,age)
person.hello()
}
}
class Person(param1:String,param2:Int){
var name=param1
var age=param2
//Unit 表示沒有返回值等同于void
def hello():Unit={
print("名稱為:"+name+"\t"+age)
}
}
object ScalaTest2{
def main(args: Array[String]): Unit = {
//if else
var age=18
if (age<18){
println("18歲")
}else if (18<=age && age<=20){
println("18-20之間")
}else{
println("大于20")
}
//for循環(huán)
for (i<- 1 to 10){
println(i)
}
for (i<- 1 until 10){
println(i)
}
//i<- 1 to 10 代表 將1 到10 的數(shù)據(jù)復(fù)制給i(包括10)
//i<- 1 until 10 代表 將1 到10 的數(shù)據(jù)復(fù)制給i(不包括10)
//雙層for循環(huán)
for (i<- 1 to 10;j<- 1 until 10){
println("i="+i+"j="+j)
}
//for循環(huán)加判斷打印偶數(shù)
for (i<-1 to 10;if (i%2==0)){
println(i)
}
//scala 可以不用寫分好
//for循環(huán)的yield關(guān)鍵詞用法,將每次迭代的數(shù)值存入一個(gè)list數(shù)組中
val list = for(i <- 1 to 10 ; if i % 2 == 0) yield i
for(elem <- list){
println(elem)
}
//while循環(huán)
//scala中不能使用count++苛谷,count--只能使用count = count+1 伦籍,count += 1
var index = 0
while(index < 100 ){
println("第"+index+"次while 循環(huán)")
index += 1
}
//這是一個(gè)完整版的函數(shù)
def fun1(a:Int,b:Int):Int = {
return a+b
}
//這是一個(gè)簡(jiǎn)化版的函數(shù) 最后一行語句的執(zhí)行結(jié)果就是這個(gè)函數(shù)的返回值
def fun1_01(a:Int,b:Int) = {
a+b
}
println(fun1(1,2))
println(fun1_01(1,2))
//創(chuàng)建一個(gè)帶有默認(rèn)值參數(shù)的函數(shù) 函數(shù)中參數(shù)的默認(rèn)修飾符是val
def fun2(a:Int,b:Int=10,c:Int = 20)={
a+b+c
}
// println(fun2(1))
// println(fun2(1,2,3))
//創(chuàng)建一個(gè)可變參數(shù)長(zhǎng)度的函數(shù)
def fun3(elems:Int*)={
for(elem <- elems){
println(elem)
}
}
fun3(1,2,3,4,5,6,7,8,9)
//遞歸函數(shù) 求解5 的階乘 推測(cè)類型 需要有依據(jù) 找不根據(jù)推測(cè)不出類型的
def fun4(num:Int):Int = {
if(num == 1){
num
}else{
num * fun4(num - 1)
}
}
println(fun4(5))
//匿名函數(shù) : 沒有名字的函數(shù)
val fun5 = (name:String,facePower:Double) => {
println(name + "\tfacePower:" + facePower)
}
fun5("scala",100)
//偏應(yīng)用函數(shù)是一種表達(dá)式址愿,不需要提供函數(shù)需要的所有參數(shù)锐朴,只需要提供部分殷费,或不提供所需參數(shù)
def log(date:Date,log:String) = {
println(date + "\t" + log)
}
//在調(diào)用log函數(shù)的時(shí)候 每次都需要傳入一個(gè)date對(duì)象 煩
val date = new Date()
log(date,"log1")
log(date,"log2")
log(date,"log3")
val logWithDate = log(date,_:String)
logWithDate("log1")
logWithDate("log2")
logWithDate("log3")
/**
* 什么是高階函數(shù)追驴?
* 函數(shù)的參數(shù)是函數(shù)眉枕,或者函數(shù)的返回類型是函數(shù)恶复,或者函數(shù)的參數(shù)和函數(shù)的返回類型是函數(shù)的函數(shù)
* scala支持面向函數(shù)編程
* scala支持面向?qū)ο笞兂? *
* fun6函數(shù)的參數(shù)要一個(gè)函數(shù) 要一個(gè)什么樣的函數(shù)?
*/
def fun6(f:(Int,Int) => Int):Int = {
f(100,200)
}
def f(a:Int,b:Int) = {
a+b
}
println(fun6(f))
//原則:匿名函數(shù)中參數(shù)在函數(shù)體中只出現(xiàn)一次可以用_代替
println(fun6((a:Int,b:Int)=>{a+b}))
println(fun6((_+_)))
val str1 = "hello scala1"
val str2 = "hello scala2"
val str3 = "HELLO scala3"
println(str1.indexOf('o'))
println(str1.equals(str3))
//不區(qū)分大小寫
println(str1.equalsIgnoreCase(str3))
//創(chuàng)建一個(gè)可變長(zhǎng)度的字符串
val strBuilder = new StringBuilder
strBuilder.+('F')
strBuilder.++=("Hello")
strBuilder ++= " World"
strBuilder.append(" Scala")
strBuilder += ('P')
println(strBuilder)
//創(chuàng)建了一個(gè)長(zhǎng)度為10的數(shù)組 數(shù)組中元素的類型必須是Int
val arr = new Array[Int](10)
for(index <- 0 until arr.length){
arr(index) = index * index
}
arr.foreach((x:Int)=>{
println(x)
})
//簡(jiǎn)化版
arr.foreach(println)
//List集合
val list1 = List(1,2,3,4,5,6,7,8,9)
list1.foreach(println)
// ?filter:過濾元素
def fl(x:Int):Boolean={
x > 3
}
println("=============================================================")
var filtered = list.filter(fl)
filtered.foreach(println)
filtered = list.filter((x:Int) =>x > 3)
filtered.foreach(println)
// ?count:計(jì)算符合條件的元素個(gè)數(shù)
val count = list.count((x:Int) => {
x > 1
})
println(count)
// ?map:對(duì)元素操作
val list2 = List("hello 11111","hello 22222","hello 33333")
//map函數(shù)傳入的匿名函數(shù)的參數(shù)的類型一定是與集合中元素的類型一致
//map函數(shù)傳入的匿名函數(shù)的返回值的類型就是這個(gè)新集合的泛型
val rest = list2.map((x:String) => {
x.split(" ")
})
rest.foreach((x:Array[String])=>{
x.foreach(println)
})
// ?flatmap :壓扁扁平,先map再flat
val rest1 = list2.flatMap((x:String) => {
x.split(" ")
})
rest1.foreach(println)
//set集合
val set1 = Set(1,2,3,4,4)
val set2 = Set(1,2,5)
//交集 scala中字符有可能也是方法名
val rest3 = set1.intersect(set2)
val rest4 = set1.&(set2)
rest4.foreach(println)
println("===============取兩個(gè)集合的差集===================")
//取兩個(gè)集合的差集 在set1集合中存在的但是set2集合中沒有的元素
set1.diff(set2)
set1.&~(set2).foreach(println)
val str = set1.mkString("~")
println(str)
set1.max
set1.min
set1.toList
val map = Map(
"1" -> "scala",
2 -> "scala1",
(3,"scala2")
)
val keyIterator = map.keys.iterator
while(keyIterator.hasNext){
val key = keyIterator.next()
println(key + "====" + map.get(key).get)
}
println(map.get("1"))
println(map.get("1000").getOrElse("no result"))
map.foreach((x:(Any,String)) => {
val key = x._1
val value = x._2
println("key:" + key + "\tvalue:" + value)
})
println(map.contains("1"))
//============================Tuple============================
val t2 = (1,2)
val t3 = Tuple3(1,2,3)
val t4 = Tuple4("scala",1,true,1.0)
val t44 = ("scala1",1,true,1.0)
println(t2._2)
val iterator = t44.productIterator
while(iterator.hasNext){
//在循環(huán)體內(nèi)不要調(diào)用多次next方法
println(iterator.next())
}
//二元組對(duì)象才有swap:調(diào)換位置
val s2 = t2.swap
println(s2._1)
//============trait==============================
/**
* trait可以類比成java中的接口 但是比java接口更高級(jí)一些
* trait中可以定義方法也可以實(shí)現(xiàn)方法
*/
val s = new Student
s.read("scala")
s.listen("I Like")
s.sayName("scala Like")
}
}
trait Read {
def read(name:String){
println(name+" is reading")
}
def sayName(name:String):String
}
trait Listen {
def listen(name:String){
println(name + " is listenning")
}
}
class Student extends Read with Listen{
override def sayName(name: String): String = {
println("say you:" + name)
name
}
}
Scala簡(jiǎn)單基礎(chǔ)語法
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
- 文/潘曉璐 我一進(jìn)店門糜烹,熙熙樓的掌柜王于貴愁眉苦臉地迎上來违诗,“玉大人,你說我怎么就攤上這事疮蹦。” “怎么了茸炒?”我有些...
- 文/不壞的土叔 我叫張陵愕乎,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我壁公,道長(zhǎng)感论,這世上最難降的妖魔是什么? 我笑而不...
- 正文 為了忘掉前任紊册,我火速辦了婚禮比肄,結(jié)果婚禮上快耿,老公的妹妹穿的比我還像新娘。我一直安慰自己芳绩,他們只是感情好掀亥,可當(dāng)我...
- 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著妥色,像睡著了一般搪花。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上嘹害,一...
- 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼枯跑!你這毒婦竟也來了惨驶?” 一聲冷哼從身側(cè)響起,我...
- 序言:老撾萬榮一對(duì)情侶失蹤敛助,失蹤者是張志新(化名)和其女友劉穎粗卜,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體纳击,經(jīng)...
- 正文 獨(dú)居荒郊野嶺守林人離奇死亡续扔,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
- 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了焕数。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片纱昧。...
- 正文 年R本政府宣布灼捂,位于F島的核電站,受9級(jí)特大地震影響换团,放射性物質(zhì)發(fā)生泄漏悉稠。R本人自食惡果不足惜,卻給世界環(huán)境...
- 文/蒙蒙 一艘包、第九天 我趴在偏房一處隱蔽的房頂上張望的猛。 院中可真熱鬧耀盗,春花似錦、人聲如沸卦尊。這莊子的主人今日做“春日...
- 文/蒼蘭香墨 我抬頭看了看天上的太陽猫牡。三九已至胡诗,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間淌友,已是汗流浹背煌恢。 一陣腳步聲響...
- 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像器联,于是被迫代替她去往敵國和親二汛。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
推薦閱讀更多精彩內(nèi)容
- 定義變量 寫過js的我發(fā)現(xiàn) var 這塊又被用上了 定義常量 懶加載 定義函數(shù) hello scala 程序
- 首先拨拓,參照相關(guān)攻略肴颊,在Linux下分別下載安裝Java、Scala渣磷,然后配置Java和Scala環(huán)境變量婿着。安裝完畢...
- 這里小結(jié)一下scala和Java基礎(chǔ)語法上的區(qū)別 1.變量的聲明java :變量:private String n...
- List集合 list是一個(gè)有序且可以重復(fù)的序列。 創(chuàng)建list集合 List(elem1, elem2...)這...
- 坐在電腦前畫了一天圖醋界,練習(xí)各種制版工具竟宋,每當(dāng)這時(shí),時(shí)間就過的特別快形纺,幾個(gè)小時(shí)不動(dòng)丘侠,還得算數(shù)字,精神很容易就集中了逐样。...