-line comment
//
-block comment
/*...*/
-doc comment
-outer doc comment
///
: 코드블록 외부에 작성되고 markdown표기법을 지원
-inner doc comment
//!
: 코드블록 내의 항목을 참조하는 문서를 생성하는데 사용됨
let x = 10; //컴파일시 warning
//warning 문구 안보고 싶으면 '_' 추가
let _x = 10; //이라고 적으면 됨
casting = simple type change using 'as'
---------------------------------------
let my_number = 8; //i32
let second_number: u8 = 10;
let third_number = my_number + second_number as u16;
print!("my third number is {}", third_number);
fn main() {
let my_number = 'a' as u8;
print!("my_number is {}" my_number); // 97 = decimal
}
!();
ex) println!();
fn give_age() -> i32 {
25
}
fn main() {
let my_name = "Joe";
// let my_age = 25;
println!("My name is {} and my age is {}", my_name, give_age());
println!("My name is {my_name}");
}
fn main() {
let city = "Seoul";
let city2 = "Busan";
let city3 = "Incheon";
let year = 2002;
let year2 = 2020;
let year3 = 2023;
println!("The city of {} in {} is good", city, year);
println!("The city of {0} in {1} is good", city2, year2);
println!("The city of {city3} in {year3} is good");
}
print!() : 단순히 출력값을 콘솔에 보여줌
println!() : 출력값 끝에 줄바꿈
eprint!() : 출력을 오류로 표시
eprintln!() : 출력을 오류로 표시하고 줄바꿈
fn main() {
println!("Number : 10 \nBinary:{:b} Hexadecimal:{:x} Octal:{:o}", 10, 10, 10);
}
//Number : 10
Binary:1010 Hexadecimal:a Octal:12
연결된 이름은 식별자이고 변수 내부에 들어가는 데이터는 값
let variable_name = "data" ;
기본적으로 변경할 수 없음(immutable by default) 따라서 재할당도 불가능
keyword
fn main() {
let mut language = "Rust";
println!("Language: {}", language);
language = "Java";
println!("Language: {}", language);
}
fn main() {
let (course,category) = ("Rust","beginner");
println!("This is a {} course in {}.", category, course);
}
{...}
내부에 선언된 경우 범위는 중괄호 내에서 제한, 그렇지 않은경우 범위는 코드 전체 local varibale (지역변수)
{...}
안에 있는 변수는 지역변수 gllbal variable (전역변수)
note :
const
키워드를 사용해 선언된 변수는
지역변수 뿐만 아니라 전역변수로도 선언될 수 있다.
fn main() {
let outer_variable = 100;
{ // start of code block
let inner_variable = 200;
println!("block variable: {}", inner_variable);
let outer_variable = 300;
println!("block variable outer: {}", outer_variable);
} // end of code block
println!("outer variable: {}", outer_variable);
}
---------------------------------------------------------------
*console
block variable: 200
block variable outer: 300
outer variable: 100
Implicit Definition (암시적 정의)
let variable name = value;
rust는 변수에 할당된 값의 타입으로부터 타입을 추론할 수 있다.
Explicit Definition (명시적 정의)
let variable name : datatype = value;
변수 타입에 대해 명시적으로 작성한다.
+ : plus sign
- : minus sign
isize : i8, i16, i32, i64, i128 - signed Interger
usize : u8, u16, u32, u64, u128 - Unsigned
// type inference
let my_number : u8 = 100;
let my_other_number = 200;
let third_number = my_number + my_other_number; //u8 + i32는 불가능
error : mismatched types
fn main() {
let my_num = 9.5; //f64
let other_number = 9; // i32
println!("{}", my_num as i32 + other_number); // 18
println!("{}", my_num + other_number as f32); // 18.5
}
string = ""
char = ''
------------------------
let first_letter = 'A';
let space = ' ';
let other_language_char = '가';
let cat_face = '😺';
array of size = 4
1, 2, 3, 4 <= value
----------
0, 1, 2, 3 <= index
fn main() {
//define an array of size 4
let arr:[i32;4] = [1, 2, 3, 4];
// initialize an array of size 4 with
let arr1 = [0 ; 4];
print!("{}"arr);
}
note
기본적으로 배열은 변경할 수 없다
[ ]을 사용
fn main() {
let arr:[i32;4] = [1, 2, 3, 4];
println!("The first value of array is {}", arr[0]);
let arr1 = [0; 4];
println!("The first value of array is {}", arr1[1]);
}
let
뒤에 mut
keyword를 사용해서 선언한다.
fn main() {
let mut arr:[i32;4] = [1, 2, 3, 4];
println!("The value of array at index 1: {}", arr[1]);
arr[1] = 9;
println!("The value of array at index 1: {}", arr[1]);
}
use the built-in function len
(내장함수 len
이용)
fn main() {
let arr:[i32;4] = [1, 2, 3, 4];
// print the length of array
println!("Length of array: {}", arr.len());
}
The whole array can be traversed using a loop or the debug trait.
slice는 두 단어로 구성된 객체이며, 첫 번째 단어는 data pinter, 두 번째 단어는 slice length
Tuples are heterogeneous sequences of elements (서로 다른 요소들의 모임)
배열과 마찬가지 튜플의 길이는 고정
syntax 1 (타입지정 x)
syntax 2 (타입 지정 o)
.
(dot operator)을 사용해서 접근 가능fn main() {
let person_data = ("Joe", 25, "75kg", "8ft");
let (a,b,c,d) = person_data;
println!("name : {}", person_data.0);
println!("name : {}", person_data.1);
println!("weight : {}", c);
println!("height : {}", d);
}
mut
keyword로 접근가능fn main() {
let mut person_data = ("Joe", 25, "75kg", "8ft");
println!(index 0 and index 1 are {} {}", person_data.0, person_data.1);
person_data.0 = "John";
println!("index 0 and index 1 are {} {}", person_data.0, person_data.1);
}
fn main() {
//define a tuple
let person_data = ("Joe", 25, "75kg", "8ft");
//print the value of tuple
println!("Tuple - Person Data : {:?}", person_data);
}
const
(keyword) + 변수 이름 + 콜론:
+ 변수의 데이터 타입
- note
모든 문자는 대문자
모든 단어는 underscore_
을 사용해서 구분해야함
const ID_1: i32 = 4; // define a global constant variable
fn main() {
const ID_2: u32 = 3; // define a local constant variable
println!("ID:{}", ID_1); // print the global constant variable
println!("ID:{}", ID_2); // print the local constant variable
}
const
로 선언const
상수는 global 및 local로 선언됨 let
변수는 local로 선언됨 const
는 변경 불가능 let
은 mut
으로 변경 가능const
의 타입 명시는 필수let
필수는 아님 const
는 프로그램 실행전에만 설정가능
let
은 런타임중에도 결과 저장가능
let
과 달리 const
는 숨길 수 없음
좋은 글 감사합니다.