関数/メソッドから複数の値を返すには(多値返却) 2015/02/03
関数は普通は返り値を1つだけ返すか、1つも返さない(C言語のvoid
など)ものが多い中、プログラミング言語によっては複数の値を関数から返すことができる。
返すことができる言語でも、配列で返すというのは個人的にはとても気持ち悪い。 Scalaのタプルで返す仕組みは扱いやすい、と感じるが、静的型付けか動的型付けかの違いか。
C言語 / C++ 2015/01/13
簡単に複数の戻り値を返す方法はなさそう。
値を受け取る専用の変数をポインタで引数として渡して、関数からは結果をポインタの指す先に書き込むことができる。このポインタを複数受け渡しすれば結果的に複数の結果を受け渡すことができる。
Go言語 2016/01/09
普通に関数から多値を返却できる。
package main
import "fmt"
func main() {
i, s := f()
fmt.Printf("%d %s\n", i, s)
// => 1 abc
}
func f() (int, string) {
return 1, "abc"
}
返り値のそれぞれがなんなのかがわかりやすいように返り値に名前を書くことができる。
func f() (i int, s string) {
i = 1
s = "abc"
return i, s
}
i
, s
は返り値の変数としてすでに宣言されているので、関数定義の本体では変数宣言なしに使える。
Java 2014/12/24
簡単に複数の戻り値を返す方法はなさそう。
Scala 2017/06/09
タプルを返せばよい。
例
def f() = {
(1, "abc");
}
val (a, b) = f();
println(a); // => 1
println(b); // => abc
返り値の一部が不要な場合は、アンダースコアを使う。
val (a, _) = f();
PHP 2015/01/13
複数の値を直接返すことはできないが、配列を使って無理やりやろうと思えばできなくもない。
function f(){
return array(1, "abc");
}
list($num, $str) = f();
echo "$num\n"; # => 1
echo "$str\n"; # => abc
返り値 | PHP Manual
http://www.php.net/manual/ja/functions.returning-values.php
Python 2017/06/09
リストまたはタプルを使えば、関数から複数値を返せる。受け取る方は変数名をコンマ区切りで複数書くだけ。
例
def f():
return (1, "abc")
# 以下のようにリストにしても同じ
# return [1, "abc"]
a, b = f()
print(a) # => 1
print(b) # => abc
返り値の一部が不要な場合は、アンダースコアだけの変数名を使って、不要であることを明示するのがよい。
a, _ = f()
Ruby / JRuby 2014/12/24
return
にカンマ区切りで複数の値を書けば、配列を返すことになり、受け取り側は配列の多重代入を使う。
def f
return 1, "abc"
end
num, str = f
p num # => 1
p str # => "abc"
Perl 2015/01/13
関数からはリストを返して、受け取り側は多重代入を使えばよい。
sub f {
return (1, "abc");
}
my ($num, $str) = f;