--.--.-- *--*
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
新しい記事を書く事で広告が消せます。
| スポンサー広告 |
はじめてのAurigaスクリプト 基本編(19)
2011.11.28 *Mon*
関数について
前回、いきなり関数の定義方法なんかを書きましたが
よく考えてみたら、まだ関数について何も説明してませんでした。
前回、いきなり関数の定義方法なんかを書きましたが
よく考えてみたら、まだ関数について何も説明してませんでした。
「関数」と書くと、難しく考えてしまうかもしれませんが
最初から読んでいる皆さんは「その2」の時に 関数を覚えているはずです。
実はこの2つも立派な関数なのです。
■引数と戻り値
「引数(ひきすう)」とは
関数に受け渡す値のことです。
上の例では、"こんにちは"という文字列を渡しています。
「戻り値(もどりち)」とは
関数から「戻ってくる値」です。
以前使った checkweight関数(アイテムの重量チェック)などは
戻り値として、1:OK または 0:NG を返します。
■関数の種類
関数には以下のように大きく2つの種類があります。
・プロシージャ・・・・・・戻り値が無い呼び出し(命令)
・ファンクション・・・・・戻り値がある呼び出し(関数)
つまり、mes関数はプロシージャになり、checkweight関数はファンクションとなります。
前回書いたユーザー定義関数では説明しませんでしたが
return; と記述するとプロシージャ。
return <戻り値>; と記述するとファンクションになります。
■関数の記述について
Aurigaの関数の記述方法は、Perl風なのでちょっと変わってます。
一般的な、C言語やJavaなどの記述に慣れた方には違和感を抱くかもしれません。
関数(プロシージャ)の引数に関数(ファンクション)を使った例
わかりにくいので図にしてみます。

戻り値が無い関数(プロシージャ)の場合は()不要
※ちなみにこの書き方は、宣言型というらしいです。SQLなどは宣言型プログラミングと呼ばれる。
戻り値がある関数(ファンクション)の場合は()が必要
引数の有無に関わらず、if構文などで戻り値を参照される場合は()が必要。
C言語では戻り値のある関数(ファンクション)を呼び出す場合、戻り値を使用しないなら
などと記述できますが、Aurigaでは
戻り値が必要ない場合でも、必ず戻り値を受け取らないといけません。
以下の場合、変数'@dummy に戻り値を受け取ってエラー回避しています。
※ここではプロシージャを関数の一種と書いていますが、
本来は「関数(function)」は戻り値のある「呼び出し」を指します。
戻り値の無い「呼び出し」は「手続き(procedure)」と言い、
PASCALなどでは区別されますので注意してください。
しかしAurigaに限らず、C言語もperlも明確な区別はしていませんし
日本ではプロシージャを「関数」と呼ぶことが一般化してるので問題ないです。
「こまけぇこたぁいいんだよ!!」です。
興味ある方はこちらの方のページが詳しいので読んでみてね。
http://asp.mi.hama-med.ac.jp/comp-basic/rpc/#id2563392
最初から読んでいる皆さんは「その2」の時に 関数を覚えているはずです。
mes "こんにちは";
close;
実はこの2つも立派な関数なのです。
■引数と戻り値
「引数(ひきすう)」とは
関数に受け渡す値のことです。
上の例では、"こんにちは"という文字列を渡しています。
「戻り値(もどりち)」とは
関数から「戻ってくる値」です。
以前使った checkweight関数(アイテムの重量チェック)などは
戻り値として、1:OK または 0:NG を返します。
■関数の種類
関数には以下のように大きく2つの種類があります。
・プロシージャ・・・・・・戻り値が無い呼び出し(命令)
・ファンクション・・・・・戻り値がある呼び出し(関数)
つまり、mes関数はプロシージャになり、checkweight関数はファンクションとなります。
前回書いたユーザー定義関数では説明しませんでしたが
return; と記述するとプロシージャ。
return <戻り値>; と記述するとファンクションになります。
■関数の記述について
Aurigaの関数の記述方法は、Perl風なのでちょっと変わってます。
一般的な、C言語やJavaなどの記述に慣れた方には違和感を抱くかもしれません。
関数(プロシージャ)の引数に関数(ファンクション)を使った例
set getvariableofnpc('abc, "てすとNPC"), checksit();
わかりにくいので図にしてみます。

戻り値が無い関数(プロシージャ)の場合は()不要
mes "こんなのとか";
setarray '@abc$, "こんなの", "あんなの", "とか";
※ちなみにこの書き方は、宣言型というらしいです。SQLなどは宣言型プログラミングと呼ばれる。
戻り値がある関数(ファンクション)の場合は()が必要
checkweight(510, 10)
strcharinfo(0)
引数の有無に関わらず、if構文などで戻り値を参照される場合は()が必要。
C言語では戻り値のある関数(ファンクション)を呼び出す場合、戻り値を使用しないなら
if(ほにゃらら){
getmapxy(&mapname, &x, &y, 0);
}
などと記述できますが、Aurigaでは
戻り値が必要ない場合でも、必ず戻り値を受け取らないといけません。
以下の場合、変数'@dummy に戻り値を受け取ってエラー回避しています。
if(ほにゃらら){
set '@dummy, getmapxy('@mapname$, '@x, '@y, 0);
}
※ここではプロシージャを関数の一種と書いていますが、
本来は「関数(function)」は戻り値のある「呼び出し」を指します。
戻り値の無い「呼び出し」は「手続き(procedure)」と言い、
PASCALなどでは区別されますので注意してください。
しかしAurigaに限らず、C言語もperlも明確な区別はしていませんし
日本ではプロシージャを「関数」と呼ぶことが一般化してるので問題ないです。
「こまけぇこたぁいいんだよ!!」です。
興味ある方はこちらの方のページが詳しいので読んでみてね。
http://asp.mi.hama-med.ac.jp/comp-basic/rpc/#id2563392
- 関連記事
-
- はじめてのAurigaスクリプト 基本編(17)
- はじめてのAurigaスクリプト 基本編(18)
- はじめてのAurigaスクリプト 基本編(19)
- はじめてのAurigaスクリプト 基本編(20)
- はじめてのAurigaスクリプト 基本編(21)
COMMENT
目からウロコの記事ばかり!
はじめまして!
「Auriga オリジナルデータ考察」の
管理人 dynamo と申します。
一身上に都合により、頂いたご意見の確認が非常に滞ってしまいました。
ご返事が大変遅くなりまして本当に申し訳ありません。
みのりさんのブログ、非常~~~に参考にさせて頂いております。
スクリプト講座を拝見しなければ、きっとスクリプトには
手を出していなかったことでしょう!
プリントアウトして熟読してたのはナイショでs(笑)
コッソリとツールも使わせてもらってますョ |'ω'|
更新楽しみにしています。
無理のない範囲で頑張ってくださいね!
「Auriga オリジナルデータ考察」の
管理人 dynamo と申します。
一身上に都合により、頂いたご意見の確認が非常に滞ってしまいました。
ご返事が大変遅くなりまして本当に申し訳ありません。
みのりさんのブログ、非常~~~に参考にさせて頂いております。
スクリプト講座を拝見しなければ、きっとスクリプトには
手を出していなかったことでしょう!
プリントアウトして熟読してたのはナイショでs(笑)
コッソリとツールも使わせてもらってますョ |'ω'|
更新楽しみにしています。
無理のない範囲で頑張ってくださいね!
2011/12/03(土) 04:53:54 | URL | dynamo #c7baSmKQ [Edit]
dynamo様
コメントありがとうございます!
「Auriga オリジナルデータ考察」と比べると
絵も少なく、文章下手なので恥ずかしい限りです><
モチベに波があるので更新が続くときと
続かないときの差がありますが
なるべく続けていければと思っています。
今後ともよろしくお願いします!
コメントありがとうございます!
「Auriga オリジナルデータ考察」と比べると
絵も少なく、文章下手なので恥ずかしい限りです><
モチベに波があるので更新が続くときと
続かないときの差がありますが
なるべく続けていければと思っています。
今後ともよろしくお願いします!
2011/12/08(木) 12:35:01 | URL | みのり #- [Edit]
Comment Form
TRACKBACK
TrackBack List
* HOME *