Rust、Ruby中的隐式返回


在类 C 语言中,您可以使用 return 关键字返回表达式的值。可能会提前返回,但通常您会在函数的最后执行的语句中返回。

int sum(int p1, int p2) {
    return p1 + p2;
}

但是你不能返回语句,这没有意义。

void printSum(int p1, int p2) {
    return System.out.println(p1 + p2);
}

新观点:

  • 如果函数具有返回return类型,则任何分支中最后执行的行都必须返回该类型的值。
  • return 关键字本身通常是多余的。所以你可以省略return并获得隐式返回。

Ruby的显式返回:

def add_numbers_explicit_return(a, b)
  return a + b
end

Ruby的隐式返回:

def add_numbers_implicit_return(a, b)
  a + b
end

 
当你有分支时,这也有效,每个分支只有隐式返回:
def check_number(number)
  if number > 0
    "Positive"
  elsif number < 0
   
"Negative"
  else
   
"Zero"
  end
end

如果您不习惯这一点,一开始您可能会不喜欢它。你希望事情变得明确,但我认为一旦你习惯了,它就很容易阅读。

除非您需要提前返回,否则您永远不必有明确的返回语句。通常,对于隐式返回,您只需以避免提前返回的风格编写即可。

C语言的显式返回:

const char* check_number(int number) {
    if (number > 0) {
        return "Positive";
    }
    if (number < 0) {
        return
"Negative";
    }
    return
"Zero";
}

变成Rust:

fn check_number(number: i32) -> &'static str {
    if number > 0 {
        "Positive"
    } else if number < 0 {
       
"Negative"
    } else {
       
"Zero"
    }
}

Kotlin:

fun checkNumber(number: Int): String =
  if (number > 0) {
      "Positive"
  } else if (number < 0) {
     
"Negative"
  } else {
     
"Zero"
  }