일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 러스트기초
- ethers type
- Vue.js
- ethers websocket
- chainlink 설명
- 스마트컨트렉트 예약어 함수이름 중복
- 러스트 기초
- ambiguous function description
- nest.js설명
- 프록시배포구조
- 스마트 컨트렉트 함수이름 중복
- 러스트 기초 학습
- Vue
- ethers v6
- git rebase
- SBT표준
- vue기초
- 컨트렉트 배포 자동화
- 오블완
- 스마트컨트렉트 함수이름 중복 호출
- ethers
- 스마트컨트렉트프록시
- 컨트렉트 동일한 함수이름 호출
- ethers typescript
- multicall
- 체인의정석
- rust 기초
- 티스토리챌린지
- 머신러닝기초
- 스마트컨트렉트테스트
- Today
- Total
체인의정석
Rust 기본 프로그래밍 컨셉 (함수) 본문
기본 함수
기본 함수는 다음과 같이 정의한다.
fn main() {
another_function(5);
}
fn another_function(x: i32) {
println!("The value of x is: {x}");
}
이런 식으로 정의를 하게 되면
➜ functions (master) ✗ cargo run
Compiling functions v0.1.0 (/Users/chohk/Desktop/git/rust/functions)
Finished dev [unoptimized + debuginfo] target(s) in 0.84s
Running `target/debug/functions`
The value of x is: 5
이런 결과가 나오게 된다.
여러 변수의 정의는 그냥 일반적인 함수와 똑같이 , 를 넣어주면 된다.
Statements와 Expression
러스트는 expression 기반 언어이기 때문에 exrpession을 잘 이해해야 한다.
statement 는 지시로서 값을 리턴하지 않는 행동을 의미한다.
exrpession은 결과 값을 평가하게 된다.
let 키워드는 statement이다.
fn main() {
let y = 6;
}
함수에 대한 정의 또한 statement이다.
fn main() {
let x = (let y = 6);
}
이러한 선언에 해당하는 부분은 그냥 값을 리턴해주지 않고 선언만 해주는 부분이다.
let y = 6;
위의 값은 statement이다. 값에 대한 리턴이 없으므로 위의 코드를 실행 할 시에 에러가 나게 된다.
이러한 문법은 다른 C나 ruby와 같은 언어와는 다르게 x = y= 6이라고 하면 둘다 6의 값을 가질 수 없게 된다.
5 + 6 과 같은 부분이 expression이다. expression안에는 statements 개념이 포함된다. let y =6에서 6은 statemenet이고
let y =6은 값 6에 대한 평가를 하는 expression이다. 또한 함수를 부르는 부분또한 exrpession이며 macro를 부르는 부분 또한 expression이다. 새로운 대괄호를 여는 부분또한 expression이다.
아래에서 대괄호 안의 부분이 expression이다.
fn main() {
let y = {
let x = 3;
x + 1
};
println!("The value of y is: {y}");
}
여기서 x+1 라인에는 ; 이 들어가 있지 않는데 expression에는 세미콜론을 포함하지 않는다.
만약 exrpession 뒤에 ;를 넣게 되면 statement로 바뀌게 된다. 그러면 결국 값을 리턴하지 않게 된다.
따라서 함수는 값을 먼저 리턴하고 그 다음에 statement를 정의한다는 점을 명심해야 한다.
리턴값이 있는 함수
리턴 값의 경우 화살표로 표현한다. 리턴 값들을 이름붙이는 대신 화살표를 사용하며 러스트에서 리턴 값은 함수의 body에서 마지막 exrpession과 같은 값을 의미한다.
fn five() -> i32 {
5
}
fn main() {
let x = five();
println!("The value of x is: {x}");
}
세미콜론이 없는 5가 마지막 statement 이므로 여기서는 5가 리턴되는 것이다.
let x = five()의 경우 값을 리턴해 준다는 것을 보여주게 된다.
let x = 5; 와 같은 부분이다.
두번째로 five 함수는 입력값 없이 리턴 값만 정의해주고 있다. 하지만 실제 body는 세미콜론이 없는 5 하나뿐이다.
fn main() {
let x = plus_one(5);
println!("The value of x is: {x}");
}
fn plus_one(x: i32) -> i32 {
x + 1
}
이런식으로 사용해 준다면 값이 나오지만
fn main() {
let x = plus_one(5);
println!("The value of x is: {x}");
}
fn plus_one(x: i32) -> i32 {
x + 1;
}
이렇게 세미콜론을 빼면 expression이 아닌 statement가 되므로 에러가 발생하게 된다.
'블록체인 > Rust' 카테고리의 다른 글
Rust Ownership , rust ownership을 이해하기 위한 기초 (heap, stack 알아보기) (0) | 2023.01.16 |
---|---|
Rust 기본 프로그래밍 컨셉 (Control Flow - 조건문, 반복문) (0) | 2023.01.16 |
Rust 기본 프로그래밍 컨셉 (데이터 타입) (0) | 2023.01.16 |
Rust 기본 프로그래밍 컨셉 (변수와 가변성) (2) | 2023.01.16 |
Rust 기본 학습과 설치 및 기본 guessing game 예제 (0) | 2023.01.13 |