RUST 0x02 函數與註釋與控制流

RUST 0x02 函數與註釋與控制流

1 函數

Rust中的函數採用「蛇形命名法(Snake Case)」,其函數名中只能出現小寫字母和下劃線_html

例如:file_name、 line_number。express

調用函數示例:網絡

fn main() {
    println!("Hello, world!");
    another_function();
}

fn another_function() {
    println!("Another function.");
}

函數能夠在main的不管先後定義。函數

函數參數(Parameters)

示例:oop

fn main() {
    another_function(5, 6);
}

fn another_function(x: i32, y: i32) {
    println!("The value of x is: {}", x);
    println!("The value of y is: {}", y);
}
  • 在定義函數時應注意聲明參數的數據類型。日誌

  • 多個參數間用,分隔。code

  • 不一樣參數的數據類型沒必要相同。htm

函數體包括語句和表達式(Statements&Expressions)

Statements(沒有返回值):blog

  • 建立變量並綁定數值:letelement

    因此let x = (let y = 6);是錯誤的。

  • 定義函數

Expressions:

  • 數字運算:5 + 6

  • {}

    let y = {
            let x = 3;
            x + 1
        };

    須要注意的是,這裏的x+1的後面沒有;,由於若是加了;,整個{}將變爲一個Statement,從而不具備返回值。

有返回值的函數

  • 函數可以具備返回值。

  • 返回值不用命名,可是須要用->聲明數據類型。

  • 在Rust中,函數的返回值等於函數體中的最後一個表達式。

  • 也能夠用return提早返回值。

示例:

fn five() -> i32 {
    5
}

fn main() {
    let x = five();
    println!("The value of x is: {}", x);
}

若是在應有返回值的函數體的最後一個表達式尾加入;,則會拋出一個CE。

2 註釋

單行註釋:用//開頭。

多行註釋:每行用//開頭。

3 控制流

if表達式

示例:

fn main() {
    let number = 3;
    
    if number < 5 {
        println!("condition was true");
    } else {
        println!("condition was false");
    }
}
  • if → if
  • else → else

須要注意的是,if後面的條件語句最好(),不然會拋出一個warning。

且條件語句的值必須是一個bool,不然會拋出一個CE。Rust並不會自動將整數類型轉換爲邏輯類型。因此若是要判斷一個數字非零,運用!= 0

利用else if處理多條件狀況

示例:

fn main() {
    let number = 6;

    if number % 4 == 0 {
        println!("number is divisible by 4");
    } else if number % 3 == 0 {
        println!("number is divisible by 3");
    } else if number % 2 == 0 {
        println!("number is divisible by 2");
    } else {
        println!("number is not divisible by 4, 3, or 2");
    }
}

Rust只執行最早條件爲真的分支,在其後面的分支將會被跳過。

let語句中運用if

由於if是一個表達式,因此咱們能夠在let語句的右邊運用if

示例:

fn main() {
    let condition = true;
    let number = if condition {
        5
    } else {
        6
    };

    println!("The value of number is: {}", number);
}

須要注意的是,在這種狀況下,每一個if分支中的表達式的數據類型必須是相同的。不然會拋出一個CE。


Rust中有三種循環方式:loopwhilefor

loop

loop會使Rust不斷重複執行一段代碼,直到你讓它中止。

示例:

fn main() {
    loop {
        println!("again!");
    }
}

要使println!("again!");中止,能夠關閉程序,或者按^C(Ctrl+C)停止程序。

也能夠在loop中加入break來中止執行loop

loop中返回值

能夠在break以後加上想要返回的值,例如:

fn main() {
    let mut counter = 0;

    let result = loop {
        counter += 1;

        if counter == 10 {
            break counter * 2;
        }
    };

    println!("The result is {}", result);
}

條件循環while

示例:

fn main() {
    let mut number = 3;

    while number != 0 {
        println!("{}!", number);

        number -= 1;
    }

    println!("LIFTOFF!!!");
}

一樣地,最好不要加(),不然會拋出一個warning。

利用for循環遍歷一個集合

咱們能夠用while來遍歷一個集合:

fn main() {
    let a = [10, 20, 30, 40, 50];
    let mut index = 0;

    while index < 5 {
        println!("the value is: {}", a[index]);

        index += 1;
    }
}

可是這樣寫是易於出錯的(下標可能越界),並且還比較慢(每個循環都要判斷一下條件)。

for能夠更簡潔:

fn main() {
    let a = [10, 20, 30, 40, 50];

    for element in a.iter() {
        println!("the value is: {}", element);
    }
}
  • iter() → 迭代器(iterator)
fn main() {
    for number in (1..4).rev() {
        println!("{}!", number);
    }
    println!("LIFTOFF!!!");
}
  • (1..4)Range類型,生成一個序列"1 2 3"(左閉右開)。
  • rev() → 反轉(reverse) 。

參考

The Rust Programming Language by Steve Klabnik and Carol Nichols, with contributions from the Rust Community : https://doc.rust-lang.org/book/

蛇形命名法(snake case)駝峯命名法(camel case)字符轉換問題 by 王約翰的網絡日誌:http://www.javashuo.com/article/p-uorvqiac-ep.html

相關文章
相關標籤/搜索