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)