julia-表達式控制語句(第8講)

表達式控制語句   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 

================================================================================ 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章