Webプログラミング研究所〜初心者・中級者Webプログラマ(CGI・Perl・PHP・Javaプログラム言語)のための支援サイト〜 「Webプログラミング研究所」TOPへ 「Webプログラミング研究所」TOPへ
 
「プログラミングサンプル集」TOPへ 「プログラミングサンプル集」TOPへ
 
目次をフレームで表示 目次をフレームで表示
 

関数

 
概要
 
Perl Perlで関数を定義するときは「sub」キーワードを使用します。

●関数の書き方
sub <関数名> {
  my(<引数1>, <引数2>) = @_;
  //処理
  return <戻り値>;
}

●関数の使い方
<戻り値> = &<関数名>(<引数1>, <引数2>);
※自作関数の書き方はいろいろありますが、書き方によって、正常な場合とエラーとなる場合があります。

(例)自作関数myfunctionの使用例
× $ret = myfunction; エラーになります。(自作関数の場合です。localtime関数等、既存のPerl関数の場合はエラーになりません)
$ret = &myfunction; 引数がない場合は&を使用しなければエラー
$ret = myfunction(); &は省略できますが、その場合は関数名の後ろに「()」を記述する必要があります。
$ret = &myfunction();  
$ret = myfunction($param1, $param2, $param3);  
$ret = &myfunction($param1, $param2, $param3);  


サンプルソース
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

TIPS
全ての変数がグローバル変数になることによる変数のバッティングを回避するために、全ての変数を局所変数化してたいという場合があると思います。
その場合は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 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
 
Java ●関数の書き方
<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++でいうメンバ関数)として関数(メソッド)が使用されます。
これについては、また別ページで紹介していきます(作成予定)。
 
NOTE
 
ご意見箱コーナー (管理者宛てメール)
このページは、あなたの参考になりましたか?

参考になった  どちらともいえない  あまり参考にならなかった

ご意見・ご感想・ご要望がありましたら、ご記入いただければ幸いです。
今後のコンテンツ作成、ページ改善等の参考にさせていただきます。

 


Webプログラマになりたい人のためのスクール・講座情報

クリエイターの皆さん!お仕事ありますよ!フェローズに!

パソコンスクールガイド
積極的な情報収集が目標実現の近道です。

就職・起業・SOHO・それとも副業? デジハリがノウハウを伝授!

就転職に強い、資格取得スキルアップ専門校ヒューマンアカデミー

CsideNet レンタルサーバー サブドメイン型 780円/月
CGI/SSI/PHP、データベース(MySQL)が利用できます。1週間の試用期間があるのがGood!!

転職・派遣・就職・アルバイトの求人情報検索支援サイト 〜 14ALL JOB SEARCH 〜
 
 
  「Webプログラミング研究所」TOPへ 「Webプログラミング研究所」TOPへ
 
「プログラミングサンプル集」TOPへ 「プログラミングサンプル集」TOPへ
 
目次をフレームフレームで表示 目次をフレームで表示

Copyright (C) 2004 - 2005 IWAMODE Project All Rights Reserved.