1. 程式人生 > >scala 入門開發一

scala 入門開發一

scala 是基於jvm虛擬機器的一門語言,介紹就不說了 直接上程式碼吧

學習scala是為了看spark程式碼 目前spark 只支援2.1X系列的

我這裡學習的是使用的2.10.5 開發工具是eclipse scala版本

object BasicsCode {
  def main(args: Array[String]): Unit = {
    //JOKE
    println(str())
    //6
    println(add(1,2,3))
    //12
    println(add2(3,9))
    //10
    println(add3(2))    
    println("fac:"+fac(5))
    println("mulitply:"+mulitply(2)(6))
    println("m2:"+m2(2))
    println("t:"+t())
    println("testfunc02:"+testfunc02(t))
    println("d1:"+d1(5))
    println("testf1:"+testf1((a:Int,b:Int)=>{a*b}))
    println("testf1:"+testf1(add2))
    println("add4:"+add4(1,2,3))
    
    def sumInts = sum( x => x)
    println("sumInts:"+sumInts(1,3))
  }
  
  //直接賦值 返回出去
  def str(name : String = "JOKE")={name}
  
  //* 多個引數  遍歷引數  
  def add(sum : Int*)={
    var a = 0
    for(s <- sum){  a += s; }
    a
  }
  
  //先定義變數名 再定義型別
  def add2(a:Int,b:Int) =a+b
  
  //下劃線在這裡代表一個引數名  起名難問題
  def add3 = add2(_ : Int ,8)
    
  //f(n) = f(n)*f(n-1) 遞迴  需要給出返回的型別
  def fac(n:Int):Int = if(n<=0) 1 else n*fac(n-1);
  
  //	函式柯里化  
  //就是說定義 把這個引數一個個獨立開來寫
	def mulitply(x:Int)(y:Int) = x*y
  //使用下劃線
  def m2 = mulitply(2)_;
	
	// => 匿名函式宣告方式
  val t = ()=>333//聲明瞭一個函式物件付給了t
  
  // :後面是資料型別,c代表傳進來的引數 傳一個匿名函式進來 返回這個匿名函式
   def testfunc02(c : ()=>Int ) = { c() }
  //	匿名函式
	val d1 = (a:Int)=> a+100;
	
	
	//	匿名函式作為引數,其實就是引數名,後面跟上引數型別,然後是表示式
	//作用是傳入表示式  改函式負責提供具體資料
  def testf1(callback : (Int,Int)=>Int )={
   	callback(123,123);
  }
	
  //巢狀函式, def裡面套一個def
	def add4(x:Int, y:Int ,z:Int) : Int = {
		def add2(i:Int, j:Int):Int = {
			i + j
		}
		add2(add2(x,y),z)
	}
	// 匿名函式 加遞迴
  def sum(f : Int => Int) : (Int , Int) => Int = {
    def sumF(a : Int , b : Int) : Int = 
    		  if (a >b ) 0 else f(a) + sumF( a + 1 , b)
    		 sumF
    }
	
	//====================================================================
	
	
}

結果:


二、scala 中 Collection 的使用

package org.zw.test

object TestCollection {
	def main(args: Array[String]) {

		var t = List(1,2,3,5,5)
		//下標從0
//		println(t(2))


//		map 個位置相加  函式程式設計
//		println(t.map(a=> {
//		  //遍歷每個元素
//		  print("***"+a);
//		  //每個值加2
//		  a+2})
//		  );
		
		//簡潔版
//		println(t.map(_+1));
	  
		var t2 = t.+:("test");//新增元素
//		println(6::t2);//一起列印 並沒有放入進去
//		println(t2);
//		t2 = t::6::Nil;//組成新的List  t作為一個元素
//		println(t2);

//				t2.foreach(t=>print("---+++"+t))
//		println("")
//		println(t2);
		//遍歷
//		t2.foreach(println(_))

		//去重
//		println(t.distinct)
		//從多少到多少的數字
//		println(t.slice(0, 2))
		
//		println("-*--*--*--*--*--*--*--*--*-")
		//遍歷
//		for(temp<-t2){
//		  print(temp)
//		}
//		println()

//		println("-*--*--*--*--*--*--*--*--*-")
//		for(i <- 0 to t2.length-1){
//		  print("--->i:"+i+" , ")
//		  print(t2(i))
//		}


//		println("-*--*--*--*--*--*--*--*--*-")
		//對這個集合 操作  從0 開始 累加上集合裡面的值
		//0--1 1--2 3--3 6--5 11--5 16
		//3+1 4+2 6+3 9+5 14+5 19
//		println(t./:(3)({
//		    (sum,num)=>
//		      print(sum+"+"+num+" ");
//			sum+num
//		}));
		
//		 1,2,3,5,5
		//集合裡的值相加
		var vl = List(5,5,2,0)
//		println(vl.reduce(_+_))
//		println(vl.reduce((x,y)=> {
//		  println(x+","+y);
//		  x+y
//		  }
//		))
		

//		println("-*--*--*--*--*--*--*--*--*-")
//		println(t.foldLeft(10)((sum,num)=>{print(sum+"--"+num+" ");
//			num+sum;
//		}));

//		println("-*--*--*--*--*--*--*--*--*-")
//		println(t.map(v =>{println(v);v+2 }));
//		println(t.map(v =>v+2));

		println("-*--*--*--*--*--*--*--*--*-")
//		元組 定義以後不能改變 下標從1開始
		var tuple01 = (1,5,6,6);
		println(tuple01._1)
		println(tuple01._3)
		
	}
}
具體看程式碼中註釋