rust [rust] Rust 요약(기초)

2023.05.10 18:27

졸리운_곰 조회 수:1

[rust] Rust 요약(기초)

Rust 요약(기초)

설치하기

curl https://sh.rustup.rs -sSf | sh

Hello, World!

프로젝트 생성

cargo new hello --bin
cd hello
ls -al

빌드

cargo build

실행

./target/debug/hello

변수생성

원격에서 ssh 연결 을 설정해 두면 편하다.

vi src/main.rs

가변형 / 불변형

rust 기본적으로 모든 변수는 불변형이다.(변경 불가)
mut 키워드를 붙여서 가변형 변수로 생성할 수 있다.
또는 기존에 선언한 변수를 다시 선언하면서 값을 바꾸는 것은 가능하다.

fn main() {
    let a = 1;
    a = a + 1;      // compile error

    let mut b = 1;
    b = b + 1;      // ok
}

정수형

overflow 에 상당히 민감하다.
cast 연산자를 붙여 주어야 오류가 발생하지 않는다.

use std::any::type_name;

fn type_of<T>(_: T) -> &'static str {
    type_name::<T>()
}

fn main() {
    let a: i8 = -128;
    let b: u8 = 255;

    println!("Signed a == {}, Unsigned b == {}", a, b);

    let a: i16 = 2;
    let c: i32 = a.pow(14) as i32;

    println!("c == {}", c);

    let d = 100;

    println!("type of d is {}", type_of(d));
}
Signed a == -128, Unsigned b == 255
c == 16384
type of d is i32

부동 소수점

상황에 따라 타입이 변한다.

fn main() {
    let x = 2.0;
    println!("type of x is {}", type_of(x)); // f64
}
fn main() {
    let x = 2.0;
    let y: f32 = 3.0;

    let z = x * y;

    println!("type of x is {}", type_of(x)); // f32
    println!("type of z is {}", type_of(z)); // f32
}

Boolean형

fn main() {
    let a = true;
    println!("type of a is {}", type_of(a));
}
type of a is bool

문자형

fn main() {
    let c = 'A';
    println!("type of c is {}", type_of(c));
}
type of c is char

복합형(tuple)

fn main() {
    let (a, b, c) = (1, 2, 3);
    println!("a + b + c == {}", (a + b + c));
}

배열(array)

fn main() {
    let a = [1, 2, 3, 4, 5];
    println!("a[1] == {}", a[1]);
}

제어문

괄호를 쓰면 컴파일러 경고가 뜬다.

경축! 아무것도 안하여 에스천사게임즈가 새로운 모습으로 재오픈 하였습니다.
어린이용이며, 설치가 필요없는 브라우저 게임입니다.
https://s1004games.com

if else

fn main() {
    let a = 1;
    if a > 1 {
        println!("over");
    } else if a < 1 {
        println!("below");
    } else {
        println!("equal");
    }
}

let if

fn main() {
    let a = true;
    let b = if a { 1 } else { 2 };

    println!("b == {}", b);
}

let with block

블록으로 값을 지정할 수 있다.

fn main() {
    let a = true;
    let b = {
        let a = 3;
        a + 1
    };

    println!("b == {}", b);
}

switch case

없나??

반복구문

for

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

    for element in a.iter() {
        println!("{}", element);
    }

    println!("-----------");

    for number in (1..4).rev() {    // 4 는 제외
        println!("{}", number);
    }
}
10
20
30
40
50
-----------
3
2
1

while

fn main() {
    let mut num = 10;

    while num != 0 {
        println!("{}", num);
        num = num - 1;
    }
}

loop

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

함수(function)

fn main() {
    function_without_parameter();

    function_with_parameter(100, 200);

    let a = function_with_return_value();
    println!("a == {}", a);
}

fn function_without_parameter() {
    println!("function without parameter");
}

fn function_with_parameter(x: i32, y: i32) {
    println!("function with parameter x == {}, y == {}", x, y);
}

fn function_with_return_value() -> i32 {
    5       // 세미콜론을 붙이면 오류가 발생한다.
}

구조체(struct)

fn main() {
    let user1 = User {
        email: String::from("someone@example.com"),
        username: String::from("someusername123"),
        // active: true,
        // sign_in_count: 1,
    };

    println!("name of user1 is {}", user1.username);
    println!("email of user1 is {}", user1.email);
}

struct User {
    username: String,
    email: String,          // 마지막 콤마는 optional 이다.
    // sign_in_count: u64,
    // active: bool,
}

tuple struct

fn main() {
    let black = Color(0, 0, 0);
    let origin = Point(10, 0);

    println!("R value of black is {}", black.0);
    println!("x value of origin is {}", origin.0);
}

// tuple struct
struct Color(i32, i32, i32);
struct Point(i32, i32);

열거형(enum)

fn main() {
    let id: String = "id".to_string();
    let password: String = "abcd1234".to_string();

    if check_login(id, password) == ErrorCode::Ok {
        println!("login ok");
    }
}

#[derive(PartialEq)]
enum ErrorCode {
    Ok,
    InvalidId,
    InvalidPassword,
}

fn check_login(id: String, password: String) -> ErrorCode {
    if id != "id" {
        ErrorCode::InvalidId
    } else if password != "abcd1234" {
        ErrorCode::InvalidPassword
    } else {
        ErrorCode::Ok
    }
}

 

[출처] https://www.skyer9.pe.kr/wordpress/?p=5620

 

 

본 웹사이트는 광고를 포함하고 있습니다.
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.
번호 제목 글쓴이 날짜 조회 수
24 [rust] Rust 언어 튜토리얼 졸리운_곰 2024.01.16 0
23 [rust] Learn X in Y minutes : Y분 안에 X를 배우세요 졸리운_곰 2023.11.27 3
22 [Kotlin]함수형 프로그래밍 초간단 이해하기 file 졸리운_곰 2023.09.04 0
21 [Kotlin] Eclipse를 이용한 Kotlin 작업환경 구성 file 졸리운_곰 2023.09.02 1
20 [kotlin] 이클립스에 코틀린 세팅하기 file 졸리운_곰 2023.09.02 0
19 [kotlin] [Kotlin] 기본 - Null 처리 '? / ?. / !! / ?: / lateinit / lazy' file 졸리운_곰 2023.09.02 1
18 [flutter/dart] [flutter] flutter_localizations 다국어 적용하는 방법 졸리운_곰 2023.07.02 4
17 [flutter/dart] 플러터(Flutter) 다국어 대응하기 (Localization) file 졸리운_곰 2023.07.02 2
16 [flutter/dart] mac os x : fvm(Flutter Version Management) 설치 및 사용법 file 졸리운_곰 2023.07.01 8
15 [rust] Learn Rust in under 10 mins 졸리운_곰 2023.06.28 67
14 [flutter/dart] flutter - fvm 적용하기 (Futter Version Management) file 졸리운_곰 2023.06.24 1
13 [flutter/dart] Flutter fvm(Flutter Version Management) 사용하기 file 졸리운_곰 2023.06.23 62
12 [kotlin java] [코틀린/Kotlin] 기초 문법 정리 졸리운_곰 2023.06.08 3
11 [kotlin java] 이펙티브 코틀린 간단 정리 (Effective Kotlin) 졸리운_곰 2023.06.08 6
10 [kotlin java] 코틀린 기본 문법 요약 정리 강좌 - [kotlin/cheat sheet] file 졸리운_곰 2023.06.08 4
9 [rust] Rust 요약(메모리 관리) 졸리운_곰 2023.05.10 10
» [rust] Rust 요약(기초) 졸리운_곰 2023.05.10 1
7 [rust programming] Rust 언어 튜토리얼 졸리운_곰 2023.05.04 2
6 [rust programming] Rust WebAssembly Front End Frameworks 프런트 엔드 프레임워크 졸리운_곰 2023.05.02 0
5 [go golang] Gin 소개 & 설치 (Introduction & Installation) file 졸리운_곰 2023.01.03 3
대표 김성준 주소 : 경기 용인 분당수지 U타워 등록번호 : 142-07-27414
통신판매업 신고 : 제2012-용인수지-0185호 출판업 신고 : 수지구청 제 123호 개인정보보호최고책임자 : 김성준 sjkim70@stechstar.com
대표전화 : 010-4589-2193 [fax] 02-6280-1294 COPYRIGHT(C) stechstar.com ALL RIGHTS RESERVED