表達式控制語句 2020/5/31
================================================================================
1.1.語法規範:
# 控制語句或函數定義必以 end 結尾
1.2.分類:
複合表達式 : begin 和 (;)
條件求值 : if-elseif-else 和 ?:
短路求值 : &&, ||
重複求值 : while 和 for
異常處理 : try-catch , error 和 throw
任務協程 : yieldto
# 任務提供了非本地的控制流,便於在臨時暫停的計算中進行切換。
# 在 Julia 中,異常處理和協同多任務都是使用的這個機制。
================================================================================
2.0.代數係數-數值文本系數
用途:編寫多項式表達式更加簡潔
規則:
數字變量:被解釋爲乘法 -2x=(-2)*x; √2x=(√2) * x 優先級略低於一元運算符
指數結合:同單目運算符 2^3x=2^(3x); 2x^3=2*(x^3) 右結合
數值括號: 3(x-1); 2(x-1)^2=2*[(x-1)^2]
括號變量: (x-1)x # 代數因子和變量或括號表達式之間不能有空格
(x-1)(x+1) # ERROR:不要接着寫兩個變量括號表達式-被解析爲函數調用
x(x+1) # ERROR:不要把變量放在括號表達式之前-被解析爲函數調用
x = 3
2x^2 - 3x + 1 # 2x^3 =2*(x^3)
2^2x # 2^2x=2^(2x)
3(x-1) # 6
2(x-1)^2 # 8
語法衝突:
以 0x 開頭的表達式,都被解析爲十六進制文本
以數字文本開頭,後面跟着 e 或 E ,都被解析爲浮點數文本
以數字文字開頭的表達式f始終是32位浮點文字;1.5F22等於1.5 * F22
================================================================================
2.1.複合表達式
定義:用單個表達式按順序計算多個子表達式,然後返回最後一個子表達式的值作爲其值
方法:begin 塊和 (;) 鏈
實例1:begin
z = begin #1.多行書寫
x = 1
y = 2
x + y
end # 返回最後表達式的值: 3
(x = 1; #2.多行書寫: ";"
y = 2;
x + y)
實例2:(;) 鏈
z = (x = 1; y = 2; x + y) #3.單行書寫: ";"
begin x = 1; y = 2; x + y end #4.單行書寫
================================================================================
2.2.條件表達式/語句:
2.2.1.if語句: if Bool-[elseif-else] end
if x < y a=1 #if無局部變量,if塊中定義的變量可在之後使用;
elseif x > y a=2 #注意定義的變量引用可能存在問題:若無x>y語句後續出現x>y時提示a未定義
else a=3 #請確保所有可能的代碼路徑都爲變量定義了一個值
end
if 1 println("true") end#錯誤 值是Bool true or false
2.2.2.鏈式問號表達式:a ? b : c --結合規則是從右到左; "?",":"和變量之間必須有空格
z=x < y ? "X1" : "X2"
z=x < y ? "X1" : x>y ? "X2" : "X3"
2.2.3.短路求值
說明:
# && , || 布爾運算符稱爲短路求值,僅計算最少表達式來確定整個鏈的布爾值。
# a && b 只有 a= true 才計算;a || b 只有 a = false 才計算;都右結合, && 比 || 優先級高
用途: 簡潔if 語句替代。
function factorial(n::Int)
n >= 0 || error("msg")# if !(n>=0) error("msg") end
n == 0 && return 1 # if n==0 return 1 end
n * factorial(n-1)
end
================================================================================
2.3.循環
2.3.1.for 循環--可以遍歷任意容器
for i in [1,2,3] println(i) end
for i = 1:10 # 1:3 是一個 Range 對象,表示1, 2, 3序列與Matlab一致
println(i)
if i >= 5 break end # -終止循環-#
if i % 3 != 0 continue end # 中斷本次循環
end
for i = 1:2, j = 3:4 # 多層 for 循環
println((i, j)) # 用 break 可以直接跳出所有循環
end
# (1,3)
# (1,4)
# (2,3)
# (2,4)
2.3.2.while 循環
# while 循環不同於 Matlab 或者 Python,這是因爲 Julia 語言中變量的作用域不同
# 循環體中變量(局部)作用域限制在循環體內,不會影響到循環體外
i = 0;
while i < 5 println("i=",i); global i += 1; end
================================================================================