- ベストアンサー
actinscript3でvoidの意味
actinscript3でvoidの意味がわかりません、値を返さない、戻さないなど書いてありますがさっぱり@@です、超初心者です、よろしくお願いします
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
#3です。 関数を使う前に、その関数がどんな名前で何を受け取りどんな仕事をするものなのかを、Flash に説明しておかなければなりません。 関数を説明する、つまり定義するには、” function ”というキーワードを使います。 (↓各行頭に全角のスペースが入っています。コピーする際はご注意ください) /*******************************************/ function Sum( a:int , b:int ):int { return( a + b ); } /*******************************************/ ↑このスクリプトで、「 int 型の値を2つ受け取り、その和を求めて持ち帰る」という関数” Sum ”が定義されます。 (補足にある関数の名前” add ”は ActionScript の他の関数に使われているので、名前を変更させていただきました) 関数を定義する際、関数の名前に続く ( ) 内に書く引数を”仮引数(かりひきすう)”と言います。 仮引数は文字通り、関数を定義する時にだけ使われる仮の引数のことです。 人に何かを説明する時に、「○○と△△があるとして、○○と△△をああしてこうして・・・」というように、何かがあるものと仮定して説明することがあるかと思います。 仮引数もこれと同じです。関数を定義する時に「関数 Sum が受け取る値を、仮に a と b と呼ぶ」ものとして、関数の内容を説明していくわけです。 上記の関数” Sum ”は、受け取った2つの数値を加算し、その結果を関数の仕事の成果として持ち帰る設計です。 「受け取った2つの値の和を持ち帰る関数」であることを説明するために、定義する時はやはり仮引数を使って return( a + b ); と書きます。 つまり先のスクリプトは、「関数 Sum は2つの数値を受け取る。その数値が仮に a と b だとして、a と b を足したものを仕事の成果として持って帰ってくる」と説明している、という意味です。 この例に出てくる変数 a や b は、あくまでも、関数を定義するために使った”仮の引数”であることに注目してください。 関数は定義しただけでは何の役にも立ちません。関数を役立てるには、関数を呼び出すスクリプトが必要です。 関数を呼び出す時は、その関数で実際に使いたい値を渡します。 関数が実行される時には、定義する時に仮に a や b と呼んでいた部分が、呼び出す際に渡した数値に置き換えられて仕事が行われます。 定義する時に使った a や b という変数がどこかにあって、その値に何かをしたものが返ってくるのではありません。 ----------------------------------------------------------- 関数は事前に”定義して”、実際に”呼び出す”スクリプトを書いて使います。 呼び出して使うものだということは、関数には必ず、”関数を呼び出した者”がいるはずです。 関数から持ち帰った値は、その関数を呼び出した者に渡されます。 受け取った値をどのように使うかは、受け取った者の自由です。不要なら、利用せずに破棄しても構いません。 例えば、次のようなスクリプトを考えてみますと。 (↓各行頭に全角のスペースが入っています。コピーする際は、全て半角のスペースかタブに置き換えてください) /*******************************************/ //////////////////////////////////////// //2つの数値の和を求める関数 // 引 数 a , b :和を求める数値 // 戻り値 2つの和 //////////////////////////////////////// function Sum( a:int , b:int ):int { return( a + b ); } //////////////////////////////////////// //メインの処理 //////////////////////////////////////// //扱う数値を保持する変数 var num1:int = 100; var num2:int = 200; //計算結果を保持する変数 var total:int = 0; //2つの数値の和を求める total = Sum( num1 , num2 ); /*******************************************/ スクリプトの内容ですが。 まず、関数 Sum を定義します。 関数の内容や定義するスクリプトは、冒頭の Sum と同じものです。 「 Sum は2つの数値を受け取り、その和を結果として持って帰る関数」であるということを、仮の引数 a と b を使って定義します。 Sum は定義しただけでは意味がありません。実際に呼び出して使ってみるスクリプトが、メインの処理の部分のスクリプトです。 今回はデータの型にもこだわり、Sum に渡す2つの値をあえて変数 num1 と num2 に入れてから渡しています。 変数 num1 と num2 は int 型の値を扱いますから、文字列などの他の値を入れてはいけません。 なお、ActionScript 3.0 からは数値の扱いが細かくなり、数値の型として Number ・ int ・ uint の3つが用意されています。 この3つは全く同じではありませんが、数値を扱うという点ではどれも同じであるため、例えば int にしなければならないところを誤って Number や uint にしてしまってもエラーにならない場合があります。 関数 Sum を呼び出すスクリプトが、最後の //2つの数値の和を求める total = Sum( num1 , num2 ); ↑この部分です。 定義する時に仮の引数 a と b で書いていた部分が、呼び出す時に渡した実際の値、上記の例では変数 num1 と num2 の値に置き換えられます。 つまり、定義する時に return( a + b ); と書いたところは、実際にこの関数が呼び出されて実行される時には return( num1 + num2 ); と解釈されます。 num1 + num2 の結果は 300 です。 この値を、Sum の仕事の成果として持ち帰ります。 持ち帰った値は、関数を呼び出した者に渡されます。 今回は自分のスクリプトの中で、自分で関数を呼び出したのですから、関数を呼び出した者とは自分のことです。 上記のスクリプトでは、total という別の変数を用意して、関数から持ち帰った値を保存しています。 最後の行に trace( total ); を追加して変数 total の中身を見てみると、Sum から持ってきた値の 300 が入っていることが分かります。 関数から持ってきた値は、どのように使っても構いません。 今回は単に、Sum から持ち帰った値を total という変数に入れただけですが、続けて他の計算に利用したり、どこかに表示したりするなど、様々な使い方があります。 返された値を使うつもりがないのなら、受け取るための変数も不要です。 Sum( num1 , num2 ); とだけ書くと、Sum から持ち帰ってきた値は破棄されます。 関数から持ち帰ることができる値は数値だけではありません。 関数にどのような値を渡し、どんな仕事をして何の値を持ち帰るように設計するのかは、目的や関数を設計する人の考え方によって変わってきます。 #3にも書きました通り、void 型の値=何もない値を持ち帰る関数、要するに何の値も持ち帰ってこない関数にすることもできます。 別のフレームに移動する gotoAndPlay や gotoAndStop を1度は使ったことがあるかと思いますが、これらもれっきとした関数です。 gotoAnd*** は、「移動先を引数として受け取り、指定のフレームに移動する」という作業だけしてくれればいい関数です。 その仕事の成果は画面を見れば歴然で、作業の後で無事に移動したとか失敗しただとかをいちいち報告してもらう必要もありません。 ですから、gotoAndPlay や gotoAndStop は値を持ち帰らない関数でも構わないのです。 *********************************************** 関数は呼び出して使うものなのですから、通常は、関数を呼び出した者とは自分のことです。 しかし、ActionScript には、自分の意思に関係なく自動的に呼び出される関数もあります。 この場合の関数を呼び出した者は自分ではないため、このようにして呼び出された関数から持ち帰る値を受け取ることができません。 呼び出した者が自分ではない関数、というと、何やら特殊なもののように聞こえますが。 ボタンをクリックした時に別のフレームに移動したり、他のページを表示する・マウスを操作した時にムービークリップを動かす・・・など、ActionScript でよく見かける「特定の出来事(イベント)が起きた時に何かをするスクリプト」は全て、関数を呼び出した者が自分ではない例に当てはまります。 解説サイトや入門書で取り上げているスクリプトの多くは、いわゆる”イベント処理”といって、イベントを利用して自動的に関数を呼び出してもらうものです。 イベント処理とは、「○○というイベントが起きたら、この関数を呼び出してほしい」と予め約束しておくスクリプトです。 Flash ではイベントが起きたかどうかを監視している者が裏方で働いており、イベントが起きた時にはその者が指定された関数を呼び出します。 ActionScript の根幹を成すイベント処理ですが、関数は作るものの、その関数を自分で呼び出すのではないところがポイントです。 細かいことはさておき、自分で関数を呼び出さない以上、イベント発生時に実行される関数から持ち帰る値は受け取れません。 ActionScript は、イベントを利用するスクリプトが大部分を占めます。 イベントにより実行される関数から持ち帰る値は受け取れないので、結果的に値を返さない関数を作ることが多くなるために、”値を返す”という話がピンとこないのではないでしょうか。 ActionScript に予め用意されている関数には、値を返すものも返さないものもたくさんあります。 自分では値を返す関数を作る機会が少なくても、知らず知らずのうちに値を返す関数のお世話になっているかもしれません。 変数 = 関数名( 引数 ); というようなスクリプトは、関数から持って帰ってくる値(戻り値)を利用しています。 自分で関数を呼び出していれば、関数を呼び出した者は自分になるので、戻り値を受け取ることができるのです。 関数の活用法はここでは書ききれません。 人それぞれに違う発想があり、どんな関数を作ってどのように活用するかも人によって違います。 いろいろなスクリプトを見たり関数を使うなどして、自分なりの関数の使い方を見付けてみてください。 ちなみに、ヘルプなどの解説に”メソッド”という言葉が出てくることがあります。 メソッドはクラスが持っている関数のことで、使い方や特徴は関数と同じです。
その他の回答 (3)
- DPE
- ベストアンサー率85% (666/776)
void は値の種類を表す型の1つです。 ActionScript で扱う値には、数値や文字列・ true / false (数学の命題でいうところの、真または偽)など、様々な種類があります。 この種類を表す名前が、”データの型”と呼ばれるものです。 データの型は、Number 型(数値)や String 型(文字列)といった分かりやすいものもあれば、Object 型のように分かりにくい型もあります。 void 型も分かりにくい型の1つかもしれません。 void とは英語で”まったくない”という意味ですが、void 型はその名の通り、”何もないことを表す型”という不思議な型です。 データの型の話で分かりやすいのは、変数でしょうか。 変数はしばしば、値を入れる箱や入れ物にたとえられます。 ActionScript 2.0 や 3.0 では変数を作る時に、どんな種類の値を入れる箱にするか、つまり、その変数は何の型の値を扱うのかを決めることができます。 例えば var str:String = "文字列"; と宣言すると、変数 str は String 型(いわゆる文字列)の値を扱う箱になります。 灯油を入れて使っているポリタンクに飲用水を入れたら、大変なことになってしまいますよね。 世の中には、ある種類のものしか入れてはならないとされる容器がたくさんあります。 無視して他のものを入れたら、中身が変質して役に立たなくなったり、爆発するなど恐ろしいことが起こるかもしれません。 ActionScript でもこれと同じく、変数が扱う型とは違う型の値を入れると、何が起こるか分かりません。 先の例では、変数 str には String 型の値を入れる、と決めました。ですから、この変数には文字列しか入れてはいけません。 数値や他の値を入れようとしたらエラーが出るかもしれないし、入れたものが壊れて得体の知れない値になってしまうかもしれません。 ------------------------------------------------------------ データの型は、関数においても大切な注意点です。 関数は大まかに言いますと、関数を呼び出すと元のプログラムから一旦外れ、関数に書かれている仕事をして、関数内の仕事が済むか return 文(”元の場所に戻れ”という意味の命令)があった場合には、関数を終了して元のプログラムに戻っていく・・・という仕組みになっています。 また、関数には、「何かの値を受け取り、仕事をして、用が済んだら元の場所に戻る。戻る際に、何かの値を1つだけ持ち帰ることができる」という機能があります。 関数が受け取る値を”引数(ひきすう)”、関数から戻る時に持ち帰る値を”戻り値”といいます。 引数と戻り値は ActionScript で扱う値ですから、これらにも当然ながら、データの型の区別があります。 先ほど、灯油のポリタンクの話をしましたが。 例えば仮に、「渡された入れ物に、飲用水を入れる」という関数があるとしましょう。関数の中で入れるものが水なので、水を入れられる容器を引数として受け取る設計です。 しかし、この関数を呼び出す際に灯油を入れたポリタンクを渡してしまったら、結果はどうなるか分かりません。 そんなことにならないように、ActionScript 2.0 からは、関数を呼び出す際に渡した値と、関数が受け取ることになっている値のデータの型が一致しているかどうかをチェックしてくれる機能が付きました。 文字列を受け取る関数に数値を引数として渡していたなど、関数を呼び出す時に、その関数が受け取ることになっている型と違う型の値が渡されている場合は、エラーが報告されます。 この機能は、関数を定義する時に引数のデータの型を明示して初めて、有効になります。 ************************************** 戻り値についても、関数を定義する時に型を明示しておけば、戻り値の型を誤って宣言したものと違う型にしていた場合に、エラーとして知らせてもらえます。 例えば、 function Test( str:String ):int { return( true ); } ↑このように、関数を定義したとします。 名前は” Test ”、引数として String 型の値を受け取り、int 型の値を持ち帰る関数です。 return 文を使うと、関数から戻る時に何かの値を持って帰ることができます。 この例では” true ”という値を持ち帰ります。 しかし、これは Boolean という型の値で、冒頭で宣言している戻り値の型である int 型とは異なります。 やってみると分かるのですが、このスクリプトを書いてパブリッシュまたはプレビューしてみると、「 Boolean 型とは何の関係もない int 型に変換された」というエラーが出ます。 さて、戻り値の型を明示する時に、1つ、問題があります。 繰り返しますが、関数は「元のプログラムから一旦外れ、用が済んだら元の場所に戻る。その時に、何かの値を1つだけ持ち帰る」ことができます。この時に持ち帰る値が”戻り値”です。 ですが、関数の内容によっては、持って帰りたい値が特にない場合もあります。 #2の方の2番目の関数の例が、まさにこの話ですね。 このような場合でも、戻り値の型を明示しておかなければ、型をチェックしてもらう機能は使えません。 持ち帰りたい値がない関数で、戻り値の型を明示するには、どうしたらいいでしょうか。 とりあえず int 型の値を持ち帰ると宣言しても、実際には何も持って行かなかったら、「 int 型の値を持ち帰る」と明言した宣言がウソになるので、エラーになります。 String 型などの他の型にしても同様です。宣言した以上は、必ずその型の値を持ち帰らなければなりません。 そこで、void 型の出番になるわけです。 void 型は”何もないことを表す”という、不思議な型のことです。 英語には「ない○○がある」とか「ない○○を持っている」といった表現があり、日本語では「○○がない」との意味になります。 例えば「 I have no brothers 」を直訳すると「私は、ない兄弟を持っている」ですが、日本語に訳すなら「私に兄弟はいない」です。 これと同じ発想で、持ち帰りたい値が特にない関数では戻り値の型を void 型にして、「この関数からは void 型の値を持ち帰る」と宣言します。 すると、これは「この関数からは”何もない値”を持ち帰る」、つまり「この関数から持ち帰ってくる値は何もない」という意味になり、何も持って帰ってこなくても宣言がウソになりません。 逆に、void 型の値を持ち帰る=何の値も持ち帰らないと宣言しておきながら、何かの値を持ち帰ろうとしたら、これはこれでウソになってしまうのでご注意ください。 戻り値を持って帰ってくることを、関数では「値を返す」「値を戻す」と表現します。 戻る時に void 型=”何もない値”を持ち帰ってくるとは、何もない値を返す、つまり値を返さないということです。 従って、戻り値が void 型の関数は「値を返さない関数」と言えます。 ------------------------------------------------------------ 他のプログラミング言語はデータの型に細かくこだわるものがあります(まあ、こだわらなければならない理由があるからですが)が、ActionScript はデータの型にはズボラな言語でした。 ActionScript 2.0 からは何となく意識するようになり、3.0 になって少しだけこだわるようになりました。 これに伴い、2.0 からは、他の言語にある”何もないことを表す void 型”という謎の型が導入されたのです。 しかし、3.0 になっても型の明示は必須ではなく、明示することが推奨されているだけにすぎません。 要するに、面倒なら型の明示などしなければ、void 型なんて知らなくても使わなくても、実は支障は全くないわけです。 その代わり、型の不一致や、不一致のために起こる不具合については自分で責任を持つ必要があります。 3.0 では今のところ、データの型の件はまだ移行期間のようですが、今後の ActionScript ではうるさく言われるように変わるのかもしれません。
補足
とても丁寧なご説明本当にありがとうございます。voidの意味は分かったつもりなんですが、^^; 値を返す、戻すは下の例で言うと、どこのaとbがどこに行く事を言うのでしょうか? function add(a:int, b:int):int { return a+b; } よろしくお願いします
- gau_puzzler
- ベストアンサー率48% (39/81)
関数というのを理解する必要があります 1.計算する関数 function add(a:int, b:int):int { return a+b; } 2.メッセージを表示する関数 function display(msg:String):void { Alert.show(msg); } どうでしょうか? 1の場合は計算結果を返す(返却)する必要があるので、関数の戻り型はintとしてあります それに対し、2はメッセージを表示するだけなので、特に計算結果を返す必要がないので、関数は値を返さない(void)としてあります このように、関数にどんな処理をさせて、どんな結果を返すのかで voidにするか、それ以外にするかを「自分で」決めます この考えはas3だけに限らず、c,c++,javaなど、いろんな言語で共通です
- BlurFiltan
- ベストアンサー率91% (1611/1754)
簡単に区別すると return文 があるかないかということです。 function内に return があれば void ではなく return で返される値のタイプがその関数の型になります。 function内に return がなければ値は返されないので void がその関数の型になります。 void または Void は ActionScript3.0 に限らず 2.0 でも出てきますし JavaScript でも出てきます。 何にしても return を使ったことがなければ理解できないと思います。 return を使って何某かを作成すればすぐに理解できます。 void 以外を知れば void がわかるということです。 void 以外を知らなければ void がわからなくて当然だと思います。 整数しか知らなければ整数とは何かがわからない。 小数を知ったとたん整数とは何かがわかる。 この感覚に似ています。 viod を ActionScript3.0 でわざわざ取り立てて説明する意味がないのかもしれません。 そのためか ActionScript3.0 での説明は良いのが見つかりません。 ActionScript1.0 では return についての説明があります。 (ただしAS1.0には型指定はありません。) FN0110005 - return - Flash テクニカルノート http://www.fumiononaka.com/TechNotes/Flash/FN0110005.html あと過去のこのQ&Aが参考になるかもしれません。 質問番号:4447665 [return]の役割について http://okwave.jp/qa4447665.html
お礼
ありがとうございます^-^まだ良くわかりませんが、もう少しいろいろ勉強したほうが良さそうですね、
お礼
とても丁寧なご説明ありがとうございます、まだ完璧には把握していませんが、だいぶ分かった気がします、もっと勉強すれば分かりそうな気がします、ありがとうございました