2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Rustの返り値について

Posted at

returnがなくてびっくりする

Rustでは以下のようなコードが成立する

fn add(a: u32, b: u32) -> u32{
	a+b
}

Rust初学者からするとこれはびっくりするし、なんだか気持ち悪く感じる
これが成立する理由は、最後の式で評価された値が戻り値になるという言語仕様のためである

式とは

Rustでは、ほとんどのコードが何らかの値を返す式(Expression)であり、式は値を生成するために評価される
式でないすべては、文(Statement)とされる
セミコロン;を付けることで、ExpressionをStatementにすることができる

勘違いポイント

たいていの言語で、例えばifは文である。しかし、Rustではとなる
そのため、以下のようなコードも成り立つ

let a = if a < 0 { 0 } else { a };

ifの結果が値として評価されている、つまり式であるということになる

以下のようなスコープも式となる

{
	a+1;
	a*a
}

セミコロンのついているa+1;は文であり、スコープの最後で現れるのa*aが式である。スコープ全体としても式であり、最後の式の値を表す

関数の戻り値

初めに触れたように、Rustでは最後の式が戻り値になる。そのため関数を以下のように書ける。他の言語と比較して、何が式であるかを意識する必要がある

fn abs(value: i32) -> i32 {
	if (value < 0) {
		-value	
	} else {
		value	
	}
}

参考

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?