関数の定義と使用法

寄稿:東條遼平

自作の関数を使う

Awkでは自作の関数を作成して使うことができます.

{myprint($1,$2)}

function myprint(a,b,   c){
  c = a*b;
  print c;
}

これは第一項目と第二項目を掛けたものを出力しています.ここでmyprintは3つの仮引数があるにも関わらず,実引数は2つしか渡していません.これはAwkが局所変数が使えない為,自作の関数内でローカルに使う変数を扱おうと思って,

{myprint($1,$2)} 

function myprint(a,b){
  c = a*b;
  print c;
}

こうやってしまうと,確かに動くのですが,変数Cはグローバルになりますので,例えば,

{c=$1;myprint($1,$2);print c}

function myprint(a,b){
  c = a*b;
  print c;
}

としたときに呼び出しもとのcの値が変わってしまいます.そのためローカルで使いたい分の変数を余分に仮引数として宣言しておきます.

{c=$1;myprint($1,$2);print c} 

function myprint(a,b,   c){
  c = a*b; 
  print c;
}

こうすれば呼び出し元の値は変わりません.また,仮引数のcの前に沢山のスペースが入っているのは実際に関数を使う際に実引数を与える部分と,ローカルで使う分が分かるようにするためです. C言語同様引数には値渡しとなります.

また値を返したり分岐したり再帰も行えます.

{print fact($1)}

function fact(a){
  if(a==1)return 1;
  return a*fact(a-1);
}

ちゃんと再帰ができています.

Valid XHTML 1.1! home > コンピュータ > プログラミング >
リロード   新規 編集 凍結 差分 添付 複製 改名   トップ 一覧 検索 最終更新 バックアップ   ヘルプ   最終更新のRSS
Modified by 物理のかぎプロジェクト PukiWiki 1.4.5_1 Copyright © 2001-2005 PukiWiki Developers Team. License is GPL.
Based on "PukiWiki" 1.3 by yu-jiPowered by PHP 5.2.17HTML convert time to 0.037 sec.