--.--.-- *--*
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

はじめてのAurigaスクリプト 基本編(19)

2011.11.28 *Mon*
関数について

前回、いきなり関数の定義方法なんかを書きましたが
よく考えてみたら、まだ関数について何も説明してませんでした。
「関数」と書くと、難しく考えてしまうかもしれませんが
最初から読んでいる皆さんは「その2」の時に 関数を覚えているはずです。

mes "こんにちは";
close;

実はこの2つも立派な関数なのです。

■引数と戻り値

「引数(ひきすう)」とは
関数に受け渡す値のことです。
上の例では、"こんにちは"という文字列を渡しています。

「戻り値(もどりち)」とは
関数から「戻ってくる値」です。
以前使った checkweight関数(アイテムの重量チェック)などは
戻り値として、1:OK または 0:NG を返します。

■関数の種類
関数には以下のように大きく2つの種類があります。
・プロシージャ・・・・・・戻り値が無い呼び出し(命令)
・ファンクション・・・・・戻り値がある呼び出し(関数)

つまり、mes関数はプロシージャになり、checkweight関数はファンクションとなります。
前回書いたユーザー定義関数では説明しませんでしたが

return; と記述するとプロシージャ。
return <戻り値>; と記述するとファンクションになります。

■関数の記述について

Aurigaの関数の記述方法は、Perl風なのでちょっと変わってます。
一般的な、C言語やJavaなどの記述に慣れた方には違和感を抱くかもしれません。

関数(プロシージャ)の引数に関数(ファンクション)を使った例

set getvariableofnpc('abc, "てすとNPC"), checksit();

わかりにくいので図にしてみます。
function.gif

戻り値が無い関数(プロシージャ)の場合は()不要

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
関連記事

COMMENT

目からウロコの記事ばかり!
はじめまして!
「Auriga オリジナルデータ考察」の
管理人 dynamo と申します。

一身上に都合により、頂いたご意見の確認が非常に滞ってしまいました。
ご返事が大変遅くなりまして本当に申し訳ありません。


みのりさんのブログ、非常~~~に参考にさせて頂いております。
スクリプト講座を拝見しなければ、きっとスクリプトには
手を出していなかったことでしょう!
プリントアウトして熟読してたのはナイショでs(笑)

コッソリとツールも使わせてもらってますョ |'ω'|

更新楽しみにしています。
無理のない範囲で頑張ってくださいね!
2011/12/03(土) 04:53:54 | URL | dynamo #c7baSmKQ [Edit
dynamo様
コメントありがとうございます!

「Auriga オリジナルデータ考察」と比べると
絵も少なく、文章下手なので恥ずかしい限りです><

モチベに波があるので更新が続くときと
続かないときの差がありますが
なるべく続けていければと思っています。
今後ともよろしくお願いします!
2011/12/08(木) 12:35:01 | URL | みのり #- [Edit

Comment Form


秘密にする
 


TRACKBACK

TrackBack List



プロフィール

Author:みのり

すごく面倒臭がりで大雑把です。
なので、すぐ楽をしようとして
ツールを作り始めます。
ツールを作る時間と手作業で費やす時間
はたしてどちらが短いのか……


-構築環境-

Auriga0945 MySQL 5.5
with 2011-12-20bRagexeRE

3CeAM rev525
with 2010-07-30aRagexeRE



カテゴリ

未分類 (9)
RagexeRE (9)
eAthena (1)
Auriga (5)
ツール:eAthena用 (4)
ツール:Auriga用 (6)
ツール:その他 (14)
はじめてのAurigaスクリプト (8)
はじめてのAurigaスクリプト基本編 (21)
はじめてのAurigaスクリプト応用編 (7)
Aurigaスクリプト (3)
本鯖 (7)
Aurigaスクリプト:冒険者アカデミー (6)
ドラクエ10 (2)
新生FF14 (3)
EVE Online (2)



最新記事



最新コメント



月別アーカイブ



検索フォーム



リンク

このブログをリンクに追加する



ブロとも申請フォーム

この人とブロともになる



QRコード

QR



12
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
Copyright © Rocco di Forte All Rights Reserved.
テンプレート配布者: サリイ  ・・・  素材: HELIUM  ・・・ 
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。