文章出處

package yjmyzz

import scala.io.StdIn

object ScalaApp {

  def main(args: Array[String]) {
    println("please input something,press Enter to exit:") //每一行最后加不加分號都可以
    readKeyboard //注:無參數的函數調用,加不加括號都行
    println(add(1, 2) + "\n------\n")
    println(div(1, 2) + "\n------\n")
    println(div(1, 0) + "\n------\n")
    println("5!=" + factorial(5) + "\n------\n")
    println("-1!=" + factorial2(-1) + "\n------\n")
    println("5!=" + factorial2(5) + "\n------\n")
  }

  /**
   * 鍵盤讀取示例(無返回值)
   */
  def readKeyboard() {
    //注:無返回值,即相當于返回值為Unit,所以上面的方法聲明也可以寫成
    // def readKeyboard(): Unit = {
    var line = StdIn.readLine()
    while (line != "") {
      println("you just input the : " + line)
      line = StdIn.readLine()
    }
    println("bye\n")
  }

  /**
   * 整數加法(帶返回值示例)
   * @param x
   * @param y
   * @return
   */
  def add(x: Integer, y: Integer): Integer = {
    print(x + " + " + y + " = ")
    x + y //返回值,連return都不用加,十分簡潔
  }

  /**
   * 異常處理示例
   */
  def div(x: Long, y: Long): Double = {
    var hasError = false
    try {
      if (y.equals(0L)) throw new RuntimeException("divide by zero") else x.toDouble / y
    }
    catch {
      case e: Exception => {
        hasError = true
        println("error:" + e.getMessage())
        Double.MinValue
      }
    }
    finally {
      if (hasError) println("finished , but there has a error") else println("finished")
    }
  }

  /**
   * 遞歸示例
   * @param x
   * @return
   */
  def factorial(x: Integer): Long = {
    if (x.equals(0)) 1 else x * factorial(x - 1)
  }

  /**
   * 演示for循環
   * @param x
   * @return
   */
  def factorial2(x: Integer): Long = {
    if (x <= 0) return 1 //注:加return后,下面的代碼就不執行了
    println("test")
    var temp = 1L
    for (i <- 1 to x) {
      temp = temp * i
    }
    temp
  }

}

從語法風格上看,確實比java簡潔無數,有那么一丁點javascript的味道。

函數定義,除了用正式的def來定義外,還可以"匿名"定義,比如下面這樣:

    var add = (a: Integer, b: Integer) => a + b //是不是有點c#中匿名方法和lambda的味道了:)
    println(add(1, 2))

 對于無參函數,可以做為另一個函數的參數

  def oneFunc = {
    println("one func")
  }

  /**
   * 無參函數,可以直接作為另一個函數的參數(有點象c#中的委托)
   * @param a
   */
  def twoFunc(a: Unit) = {
    a
    println("two func")
  }
  
  //調用示例
  twoFunc(oneFunc)

for循環還可以寫得更強大:

  def forDemo = {
    for (x <- 1 to 2; y <- 3 to 4) println("x=" + x + ",y=" + y)

    println

    //上面的寫法,等效于下面的寫法
    for (x <- 1 to 2)
      for (y <- 3 to 4)
        println("x=" + x + ",y=" + y)

    println
    //帶條件的for循環(打印10以內的偶數)
    for (i <- 1 to 10; if i % 2 == 0) println(i)
  }

 


文章列表




Avast logo

Avast 防毒軟體已檢查此封電子郵件的病毒。
www.avast.com


arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()