第二章 控制結構和函式

2022-09-11 03:39:14 字數 1752 閱讀 7179

在本章中,會了解scala的條件表示式、迴圈、和函式,在j**a中表示式和語句是兩種不同的東西,表示式有值,而語句執行動作。

在scala中,幾乎所有構造出來的語法都有值。

1.條件表示式

val s = if(x > 0 ) 1 else -1

val s = if(x > 0) "positive" else  -1 //可以輸出混合型別,s的型別為any

if(x > 0 ) 1 else () //()表示無用值,佔位符,將類unit寫成(),相當於j**a中的void

2.終止語句

scala中,行尾不需要分號

if(n > 0)

s = s0 +(v - v0) * t +  //告訴編譯器這不是語句的末尾

0.5 * (a - a0) * t * t

if(n > 0)

3.塊表示式和賦值

在scala中,{}塊包含一系列表示式,其結果也是乙個表示式,塊中最後乙個表示式的值就是塊的值

4.輸入和輸出

使用print和println函式,進行輸出

5.迴圈

for(i <- 表示式)

6.高階for迴圈和for推導

for( i <- 1 to 3; j <-  to 3 if i != j) print((10 * i + j) + " ")  

//列印 12 13 21 23 31 32

for( i <- 1 to 3; from = 4 -1; j  <- from to 3) print((10 * i + j) + " ")

for( i <- 1 to 10) yield i % 3 // 該迴圈構造出乙個集合

7.函式

def abs(x: double) = if (x >= 0 ) x else -x  

// =右邊是函式體,有時可以省略函式體的{},只要函式不是遞迴,就不需要指定返回型別

8.預設引數和帶名引數

def decorate(str : string, left:string="[", right:string = "]") = left + str + right

//這個函式有兩個引數,left和right,帶有預設值"["和"]"

decorate("hello", ">>>[")

decorate(left = "<<<" , str="hello", right=">>>")

9.變長引數

def sum(args: int*) =

val s = sum( 1 to 10) //錯誤

val s = sum(1 to 10 : _*) //將1 to 5 當做引數序列處理,:_*告訴編譯器將序列轉換成引數序列

10.過程

scal對於不返回的函式有特殊的表示法。如果函式包含在花括號中,但沒有前面的=號,那麼返回的型別就是unit,這樣的函式被稱作過程(procedure)。過程不返回值。

def box(s:string)

11懶值

當val被宣告為lazy時,它的初始化將被推遲,直到我們首次對它取值。例如:

lazy val  words = scala.io.source.fromfile("usr/share/dict/words").mkstring

12.異常

scala中沒有"受檢"異常,不需要宣告說函式或方法可能會丟擲某種異常。

throw表示式有特殊的型別nothing,如果乙個分支的型別是nothing,那麼if/else表示式的型別就是另乙個分支的型別。

第二章 函式

bool check int n 判斷是否為質數 int arr 15 15 為0 為1 int sum 號個數 int num 0 滿足題意的圖形數 int n int i,j void prin int n sum 0 for i 0 i n i for j 0 j n i j if arr i...

Oracle強化 第二章 編寫控制結構

1.寫乙個pl sql塊 向dept表中迴圈插入5條記錄,每一條記錄的deptno 值比表中最大的deptno 值增加1,dname分別為 education1 education2 education5 loc 值都為空.2.1到30之間,能被3整除的數列印出來 3.輸入4位整數,判斷是否是閏年 ...

第二章 順序結構

c語言沒有輸入輸出語句,通過函式庫完成,只需要用工具取出來。輸入輸出函式庫名稱為stdio。如何取出函式?1.明確函式在什麼庫中,如輸入輸出函式存在於stdio.h函式庫中。2.使用預編譯指令調入函式庫 include 如果是自定義的標頭檔案作為函式庫,採用雙引號包含庫名。輸出函式 printf 字...