728x90
1. 함수
fn func_name(param_name: param_type) -> ret_type {
// code
}
- fn 키워드를 사용한다.
- 매개변수를 사용할수 있다.
c와 다르게 함수의 위치를 고려하지 않아도 된다.
- header등에 미리 써넣지 않아도 된다. 파이썬도 함수 선언 순서 상관 없었던것 같다.
2. 표현식, 구문
차이는 명확한데 설명하는게 좀 어렵다.
- c 기준으로 값으로 사용할수 있으면 표현식이고 값으로 사용할수 없어도 실행이 되면 구문이라고 배웠던거같은데.
- 러스트도 비슷하긴한데 조금 다르다. 세미콜론이 붙으면 구문, 붙이지 않아도 사용할 수 있으면 표현식.(제대로된 설명이 맞는진 모르겠다.?)
- 표현식은 결과 값을 평가하고 반환함
- 구문은 동작을 수행하고 값을 반환하지 않음
아래에서 예시를 보자.
let y = 6;
let y = {
let x = 3;
x + 1
};
- 여기서 표현식은 6과 { let x= 3; x+1} 이고 구문은 let y = 6; let y = {~}; 이다
- 표현식 6은 그 자체로 사용할수 있다.
- 표현식 { let x= 3; x+1 } 은 블록 내 구문이 있지만 반환값(코드 블록 마지막에 세미콜론이 없으면 반환값이다)이 있으므로 표현식이 된다. (이게 다른 언어랑 다르다)
3. 주석
// comment
/* comments */
c와 같다. 끝
- doc 을 위한 comment 사용법도 있는데 그건 나중에 사용하게되면 볼 것이다.
4. 제어 흐름문
조건문 if
if condition1 {
// code1
} else if condition2 {
// code2
} else {
// code3
}
- condition에 들어가는 값은 무조건 boolean(true, false)이어야 한다. 0, 1, 2 등과 같이 정수가 들어가면 에러가 발생한다.
- if 값은 표현식으로 쓸 수 있다.
- if 블록, else if 블록, else 블록 등에 반환 값을 넣어준다면 우변에 넣어서 사용할수 있다.(반환 타입은 다 같아야 에러가 나지 않는다)
반복문 loop
- break 뒤에 위치한 값을 반환시킬수 있음
- 라벨(loop 앞에 작은따옴표로 시작)을 사용할수 있음. break으로 라벨이 붙은 loop를 멈출수 있음(break 뒤에 라벨 이름 작성)
- break 뒤에 label이랑 return value 모두 작성해도 되나? 순서가 있겠지?
반복문 while
- loop + if + break
반복문 for
- 배열과 같은 컬렉션의 요소 순회(인덱스를 변수로 사용하지 않아서 안정성 높임)
5. 연습
화씨 온도와 섭씨 온도 간 변환하기
fn main() {
println!("0F = {:.2}C", ftoc(0.0));
println!("100C = {}F", ctof(100.0));
}
fn ftoc(fahrenheit: f32) -> f32 {
let celsius = (fahrenheit - 32.0) * 5.0 / 9.0;
celsius
}
fn ctof(celsius: f32) -> f32 {
celsius * 1.8 + 32.0
}
- 입력받는건 귀찮아서 하지 않았다.
- float로 연산을 하려면 모든 피연산자들도 다 float가 되어야한다. (celsius * 1.8 + 32) 도 에러가 발생한다.
n번째 피보나치 수 생성하기
fn main() {
println!("fibo(10) = {}", fibonacci(10));
}
fn fibonacci(n: u32) -> u32{
if n == 0 || n == 1 {
return n
}
fibonacci(n-2) + fibonacci(n-1)
}
- 재귀함수로 만들었다. dp를 쓰려면 벡터를 배워야하니 패스.
크리스마스 캐롤 ‘The Twelve Days of Christmas’ 노래의 반복성을 활용하여 가사 출력해보기
fn main() {
print_lylics();
}
fn print_lylics() {
let ordinals = ["", "first", "second","third", "fourth","fifth", "sixth", "seventh","eighth","ninth", "tenth", "eleventh","twelfth"];
let gifts = [
"",
"A partridge in a pear tree.",
"Two turtle doves, And",
"Three French hens,",
"Four calling birds,",
"Five gold rings,",
"Six geese a-laying,",
"Seven swans a-swimming,",
"Eight maids a-milking,",
"Nine ladies dancing,",
"Ten lords a-leaping,",
"Eleven pipers piping,",
"Twelve drummers drumming,",
];
for num in 1..=12 {
println!("On the {} day of Christmas,\nMy true love sent to me", ordinals[num]);
let temp_gifts = &gifts[..(num+1)];
for gift in temp_gifts.iter().rev() {
println!("{}",gift);
}
}
}
- 처음 들어보는 캐롤이다.
- 배열과 for를 사용해서 만들었다. 0번째 인덱스는 1~12에 맞게 빈칸으로 만들어놓았는데 한줄 띄우기 용도가 생겨버렸다.
- 배열 슬라이싱과 iter(), rev()을 사용해봤다. (이터레이터 만들기, 이터레이터 반대방향으로 순회하기)
- &는 소유권 관련이라는데 다음장을 빨리 넘어가야겠다.
https://doc.rust-kr.org/ch03-03-how-functions-work.html
https://doc.rust-kr.org/ch03-04-comments.html
https://doc.rust-kr.org/ch03-05-control-flow.html
'STUDY > Rust' 카테고리의 다른 글
Rust - 7. 구조체, 열거형, 패턴 매칭 (1) | 2024.02.17 |
---|---|
Rust - 6. 소유권 (0) | 2024.02.16 |
Rust - 4. 문법/변수, 데이터 타입 (0) | 2024.02.14 |
Rust - 3. 추리게임 만들기 (with python) (0) | 2024.02.14 |
Rust - 2. 프로젝트 생성 (0) | 2024.02.13 |