장점
단점
가장 기본적인 주석
// This is normal comment
Documentation 주석
/// This is normal comment
부분적인 주석
fn main() {
let x/*: i16*/ = 10;
}
integer (정수, 음수 가능)
unsigned integer (부호없는 정수, 음수 불가능)
(i -> integer || u -> unsigned) + bit 수 로 표현
let my_number = 100;
변수 선언 시 let 사용
my_number 는 어떤 타입인지 알 수 없음
-> u8타입을 지정하고 싶다면 다음과 같이 지정 가능
let my_number: u8 = 100;
다음과 같은 코드에서는 컴파일러가 타입을 추론하여 계산함
let my_number: u8 = 100;
let my_other_number = 50; // type 미지정, 기본 : i32(or i64)
let _third_number = my_number + my_other_number;
u8 + i64 연산은 기본적으로 안되지만, my_other_number 에 대해 타입지정을 안했기 때문에 컴파일러가 타입을 추론하여 연산할 수 있음.
다음과 같이 각 변수에 대해 타입이 지정돼있는 변수사이의 연산은 불가능
let my_number: u8 = 100;
let my_other_number: u16 = 50; // u16 지정
let _third_number = my_number + my_other_number;
>> ERROR
println!(String); 의 형태에서는 무조건 큰 따옴표 ("")를 사용하고, Char type 변수를 선언할 때에는 작은 따옴표 ('')를 사용
String : 문자열
Char : 문자
char type은 4bytes 크기
println!("Hello, world!");
let first_letter = 'A';
let space = ' ';
simple type change using 'as'
let my_number: u16 = 8;
let second_number: u8 = 10;
let third_number = my_number + second_number as u16;
Char -> u8 으로 캐스팅 하면 ASCII Code 가 됨
let my_number = 'a' as u8;
println!("Hello, world! My number is {}", my_number);
Char type 의 크기는 4bytes
println!("Size of a char: {}", std::mem::size_of::<char>()); // 4bytes
Sring ("")타입의 크기는 .len()으로 알 수 있음
println!("Size of string containing 'a': {}", "a".len()); // 1 출력 = 1byte
글자수와 비슷하지만, 사실 글자수가 아닌 bytes 수
println!("Size of string containing 'ß': {}", "ß".len()); // 독일어 : 2bytes
println!("Size of string containing '国': {}", "国".len()); // 한자 : 3bytes
println!("Size of string containing '𓅱': {}", "𓅱".len()); // 고대 이집트어 : 4bytes
string의 bytes수가 아닌 글자수를 알려면?
.chars().count() 사용
let slice = "Hello!";
println!("Slice is {} bytes and also {} characters.", slice.len(), slice.chars().count());
// .chars() : "Hello!" -> 'H', 'e', 'l', ... , '!';
숫자형 (u8, u16, ...) 앞에 숫자를 넣어서 변수선언과 타입지정을 한번에 할 수 있음
// 중간에 underscore(_)는 아무리 많이 써도 상관없음
let my_number = 9_u8; // u8 타입의 9값을 가진 변수
let second_number = 1_000_000_000u64;
let third_number = 9_____________1u32;
let float_number = 9.;let f_number = 9.; // f64
let s_number: f64 = 1.1;
let t_number = 8; // i32
println!("{}", f_number + s_number + t_number as f64); // 18.1
-> println meand print line
-> ! means macro
매크로는 super function.
변수 사용({})기호를 사용하고 변수할당을 하지 않으면 에러 발생
let my_name = "David";
println!("My name is {}");
>> ERROR
fn func_name() -> return_type {
}
형식으로 함수 선언 가능
fn give_age() -> i32 {
42 // return 42 라고 하지 않아도 됨!
}
fn main(){
let my_name = "David";
println!("My name is {} and my age is {}", my_name, give_age());
}
{} 안에 변수명을 넣어서 사용 가능!
fn main(){
let my_city = "Seoul";
let year = 2002;
let population = 9_987_987;
println!("The city of {city} in {year} had a population of {population}",
city = my_city,
year = year,
population = population);
}
{} 안에 변수 인덱스를 넣어서 사용 가능!
fn main(){
let my_city = "Seoul";
let year = 2002;
let population = 9_987_987;
println!("The city of {0} in {1} had a population of {2}. I love {0}",
my_city,
year,
population);
}
string interpolation
fn main(){
let city = "Seoul";
let year = 2002;
let population = 9_987_987;
println!("The city of {city} in {year} had a population of {population}. I love {city}");
}
다음과 같이 expression(표현식)은 사용 불가능
fn main(){
let city = "Seoul";
let year = 2002;
let population = 9_987_987;
println!("The city of {city} in {year+2} had a population of {population}. I love {city}");
}
>> year+2 에서 Error
// 8을 반환하는 함수 number()
fn number() -> i32 {
8
}
하지만 8 뒤에 세미콜론을 붙이게 된다면 에러 발생
// 8을 반환하는 함수 number()
fn number() -> i32 {
8;
}
fn main() {
let my_number = number();
}
/*
>> Error : expected i32 but found ()
() 는 Rust 에서 empty tuple, unit type 이라고 부르고 다른 언어에서는 void 라고 부름
*/
fn empty_tuple() {
}
fn main() {
let tuple = empty_tuple();
println!("{}", tuple); // error
println!("{:?}", tuple); // 웬만해서는 출력 가능!
}
앞서 알아본 간단한 함수의 모양은 다음과 같음
fn give_number() -> i32 {
8
}
fn main() {
let my_number = give_number();
}
Parameter 를 받아서 반환하는 형태의 함수는 다음과 같음
fn give_number(one: i32, two: i32) -> i32 {
one * two
}
fn main() {
let my_number = give_number(9,8);
println!("{}", my_number);
}
fn give_number(one: i16, two: i16) -> i16 {
let multiplied_by_ten = {
let f_number = 10;
f_number * one * two
};
multiplied_by_ten
}
fn main() {
let my_number = give_number(9,8);
println!("{}", my_number);
}
강의 링크
https://youtube.com/playlist?list=PLfllocyHVgsSJf1zO6k6o3SX2mbZjAqYE&si=LfVF7DHgzWT7iUrp