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 

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

 

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