|
|
|
|
Perlで関数を定義するときは「sub」キーワードを使用します。 ●関数の書き方
sub <関数名>
{
my(<引数1>, <引数2>) = @_; //処理 return <戻り値>; } ●関数の使い方
<戻り値> =
&<関数名>(<引数1>, <引数2>);
※自作関数の書き方はいろいろありますが、書き方によって、正常な場合とエラーとなる場合があります。(例)自作関数myfunctionの使用例
1番目と2番目の数値を足し算した値を取得する関数です。
$a = 2;
$b = 3; $c = &add($a, $b); #$aと$bを足した値が$cに代入されます。 print $a . "+" . $b . "=" . $c . "\n"; #足し算をする関数 sub add { ($num1, $num2) = @_; #関数の引数は配列「@_」に代入されます。それを変数$num1,$num2に代入。 $ans = $num1 + $num2; return $ans; #変数$ansを戻り値として返します。 }
2+3=5
Perlで使用する変数は、関数内であっても関数外であっても、全てグローバル変数となります。 よって、次のような現象が発生するため注意が必要です。 ●間違った例
$a
= 2;
$b = 3; $c = &add($a, $b); print $a . "+" . $b . "=" . $c . "\n"; #この行の$aの値はadd()関数内で上書きされた$aの値になります。 #足し算をする関数 sub add { ($num1, $num2) = @_; $a = $num1 + $num2; #ここで、$aの値が上書きされてしまいます。 return $a; }
5+3=5
↑期待する結果「2+3=5」になりません。次のように、myまたはlocalキーワードを使用すると、その変数はブロック({}で囲まれた部分)内のみで有効な局所変数(ローカル変数)となるため、ブロック外(ここでは関数外)の変数に影響しなくなります。 ●正しい例
$a = 2;
$b = 3; $c = &add($a, $b); print $a . "+" . $b . "=" . $c . "\n"; #足し算をする関数 sub add { my($num1, $num2) = @_; my $a = $num1 + $num2; return $a; }
2+3=5
全ての変数がグローバル変数になることによる変数のバッティングを回避するために、全ての変数を局所変数化してたいという場合があると思います。 その場合はstrictプラグマを使用すると良いです。 使い方は、単にプログラムの最初に「use strict;」と書くのみです。 これにより、局所変数化されていない変数が存在する場合は、実行時にエラーメッセージが表示されます。 デバッグに使用するという方法もあるかと思います。ただ、非常にチェックが厳しいので、ある程度Perlプログラムになれた方にオススメします。
use
strict;
my $a = 2; my $b = 3; my $c = &add($a, $b); print $a . "+" . $b . "=" . $c . "\n"; #足し算をする関数 sub add { my($num1, $num2) = @_; my $a = $num1 + $num2; return $a; } なお、strictプラグマを使用時に、グローバル変数を定義したい場合は、varsプラグマを使用します。
use strict; #strictプラグラマを定義しているが・・・
use vars qw($num1 $num2); #varsプログラマの後ろのqw()内に記述された変数は #グローバル変数として使用できます。 |
|
|
PHPで関数を定義するときは「function」キーワードを使用します。 ●関数の書き方
function <関数名>(<引数1>,
<引数2>) {
//処理 return <戻り値>; } ●関数の使い方
<戻り値> =
<関数名>(<引数1>, <引数2>);
1番目と2番目の数値を足し算した値を取得する関数です。
<?php
$a = 2; $b = 3; $c = add($a, $b); print $a . "+" . $b . "=" . $c . "\n"; //足し算をする関数 function add($num1, $num2) { $ans = $num1 + $num2; return $ans; #変数$ansを戻り値として返します。 } ?>
2+3=5
|
|
|
●関数の書き方
<public|protected|private|なし>
<staic|abstract|final等> <戻り値の型> <関数名>(<引数1>,
<引数2>) {
//処理 return <戻り値>; } ●関数の使い方
<戻り値> =
<関数名>(<引数1>, <引数2>);
1番目と2番目の数値を足し算した値を取得する関数です。
public class BasicFunction
{
public static void main(String[] args) { int a = 2; int b = 3; int c = add(a, b); System.out.println(a + "+" + b + "=" + c); } //足し算をする関数 public static int add(int num1, int num2) { int ans = num1 + num2; return ans; //変数ansを戻り値として返します。 } }
2+3=5
この言語はC言語や上記PerlやPHPサンプルと同様の手続き型関数をJavaで行った場合の例です。 Javaはオブジェクト指向言語であり、多くの場合は、クラスメソッド(C++でいうメンバ関数)として関数(メソッド)が使用されます。 これについては、また別ページで紹介していきます(作成予定)。 |
|
|
| ご意見箱コーナー (管理者宛てメール) |
|
このページは、あなたの参考になりましたか? |