Rust: 표현식 대 문장
TL;DR: Expressions evaluate to a value, they return that value.
Statements do not.
명령문은 어떤 작업을 수행하는 명령이며 값을 반환하지 않습니다.
표현식은 값으로 평가되며 해당 값을 반환합니다.
Rust is an expression-oriented language.
This means that most things are expressions, and evaluate to some kind of value.
However, there are also statements.— (member of the Rust core
team)
변수에 값을 할당하는 것은 명령문이며 아무 것도 반환하지 않습니다.
let num = 5;
표현식은 명령문의 일부일 수 있습니다.
위의 행은 명령문이지만 표현식(값으로 평가되는 것)을 포함합니다.
이 경우 값 자체는 정수
5
입니다.Variable assignment being a statement is the reason you can't assign a value to the result of another assignment.
You can in many other languages, not in Rust.The following snippet would try to assign "nothing" to the
also_num
variable, that's an error!let also_num = (let num = 5); // error!
Statements technically return something. Rust's way to express "nothing here", the empty tuple
()
.
함수 본문은 선택적으로 표현식으로 끝나는 일련의 명령문으로 구성됩니다.
표현식에는 끝 세미콜론이 포함되지 않습니다.
표현식 끝에 세미콜론을 추가하면 값을 반환하지 않는 명령문으로 바뀝니다.
함수가 표현식으로 끝나면 해당 표현식의 값을 반환합니다.
함수 정의는 명령문이며 값을 생성하지 않습니다.
함수 호출은 표현식이며 해당 표현식은 해당 함수 호출이 반환하는 모든 것으로 평가됩니다.
let num = add(4, 1);
fn add(x: i32, y:i32) -> i32 {
x + y
}
add
함수가 정의된 행은 명령문이며 해당 행은 아무 평가도 하지 않습니다.add(4, 1)
를 호출하는 것은 표현식이며 값(정수5
)으로 평가됩니다.함수 내에서 함수 본문의 마지막 줄은 표현식
x + y
입니다.종료 표현식은 값으로 평가되고 함수는 이를 반환합니다.
If that line ended in a semicolon instead (ie.
x + y;
), it would turn the expression into a statement.
That would not return a value, causing the function to not return a value.That would mean we lied when we defined the function, as we stated it would return an integer of type
i32
(with the syntax-> i32
).
The function doesn't do that anymore.
It returns nothing now.This is a bug and the Rust compiler won't let you do this.
평가된 값
add(4, 1)
은 num
라는 변수에 할당됩니다.그 전체 줄(즉,
let num = add(4, 1);
)은 명령문입니다.새 범위를 만드는 코드 블록(예:
{}
)은 표현식입니다(값으로 평가됨).let num = {
let x = 4;
x + 1
};
해당 코드 블록 내에서 변수 선언 문이 발생하고 표현식(
x + 1
)이 뒤따릅니다.마지막 표현식이 평가하는 값은 전체 코드 블록이 평가하는 값이 됩니다.
이 값은 이 예에서
num
변수에 할당됩니다.return
키워드 뒤에 표현식을 사용하여 함수에서 값을 명시적으로 반환할 수 있습니다.관례에 따라 해당 줄은 세미콜론으로 끝납니다.
예상대로 필수 사항이 아니며 컴파일러는 이를 생략해도 불평하지 않습니다.
명시적으로 실행을 종료하고 값을 반환하는
add
함수는 표현식으로 끝나는 위의 add
와 동일합니다.fn add(x: i32, y:i32) -> i32 {
return x + y;
}
이 메커니즘을 사용하여 나중에 채우는 데만 사용되는 변수 선언이 있는 코드를 조금 더 짧게 만들 수 있습니다.
fn main() {
let num = 5;
let mut name = "";
if num > 3 {
name = "Tom";
} else {
name = "Jerry";
}
println!("{}", name);
}
if
는 표현식이며 값을 반환합니다.an
if
이 평가하는 값은 실행한 코드 블록의 값입니다.즉, 위의 예를 다시 작성할 수 있습니다.
이제
name
는 빈 문자열이 아니며 "Tom"
또는 "Jerry"
입니다.fn main() {
let num = 5;
let name = if num > 3 {
"Tom"
} else {
"Jerry"
};
println!("{}", name);
}
이것은
if
문의 모든 부분이 동일한 유형을 반환해야 함을 의미합니다.분기에서 다른 유형을 반환하면 컴파일러는 전체
if
의 결과 유형이 무엇인지 파악할 수 없으며 컴파일 오류를 표시합니다.match
와 같은 표현식인 Rust의 더 많은 프로그래밍 구성을 사용하여 유사한 접근 방식을 취할 수 있습니다.
Reference
이 문제에 관하여(Rust: 표현식 대 문장), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/nickymeuleman/rust-expression-vs-statement-2h7g텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)