03. 関数と返り値

関数と返り値の書き方についてまとめます。

tcshには関数がないので除きます。

関数(サブルーチン、メソッド)の例は、

  • 関数の定義の仕方と呼び出し方
  • 引数の渡し方、受け取り方
  • 返り値の書き方、複数返り値の書き方

について例示したいと思います。

関数の定義する位置について、Perlはプログラムの後方に書いても大丈夫ですが、RubyやPythonは手前に書いておかなければなりません。

以下、スクリプト間の違いですが、

  • 関数定義時
    • Perlは引数のありなしを書きません(内部で引数を受け取る記述を書きます)
    • Rubyは引数なしの場合、()を省略できます
    • Pythonは引数なしの場合、()を省略できません

--- Perl

#!/usr/bin/perl
use warnings;
# サブルーチンの呼び方は、「&」をつける
$sum = &test0(1,2);
print "$sum\n";
# 配列の返り値を変数受け(要素数を受け取る)
$a0 = &test1;
# 配列の返り値を配列受け
@a1 = &test1;
print "$a0\n";
foreach $tmp(@a1){
  print "$tmp\n";
}
# 複数の返り値
($b0,$b1) = &test2;
print "b0=$b0, b1=$b1\n";
exit;
### サブルーチン
# 引数2つ受け
sub test0 {
  ($a,$b) = @_;
  return $a+$b;
}
# 返り値が配列
sub test1 {
  @array = (1,2,3,4,5);
  return @array;
}
# 返り値が複数
sub test2 {
  return 6,7;
}

--- Ruby

#!/usr/bin/ruby -w
### メソッド
# 引数2つ受け
def test0(a,b)
  return a+b
end
# 返り値が配列
def test1
  array = [1,2,3,4,5]
  return array
end
# 返り値が複数
def test2
  return 6,7
end
sum = test0(1,2)
puts sum
a0 = test1
a0.each {|num|
  puts num
}
b0,b1 = test2
puts "b0=%d, b1=%d" %[b0,b1]

--- Python

#!/usr/bin/python
def test0(a,b):
    return a+b
def test1():
    array = [1,2,3,4,5]
    return array
def test2():
    return 6,7
sum = test0(1,2)
print sum
a0 = test1()
for num in a0:
    print num
b0,b1 = test2()
print "b0=%d, b1=%d" %(b0,b1)