- ベストアンサー
actionscript3.0 データ型について
本を参考に勉強しているのですが、 メソッドのデータ型は省略可能ですが、省略しない場合には必ずvoidを指定します。 と、あります。 そこで分からないのが下記です。 下記の場合のデータ型はどれを指すのでしょうか? function moveX():void{ my_mc.x = my_mc.x + 200; } moveX(); よろしくお願いいたします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
以前に全く同じ質問をされていますよね? 「actionscript3.0 データ型について」 http://okwave.jp/qa/q6309057.html 元から「何が疑問なのか」がつかみにくいご質問なのですが 上では理解できたようなことを書かれていらっしゃるので さらに「何が疑問なのか」がわかりにくいです。。。 > 下記の場合のデータ型はどれを指すのでしょうか? これに ズバッ と答えるなら void です。 それだけです。 === しかし今回の質問に際して 「何が疑問なのか」をもっと考えてご質問を何度も読ませてもらったところ 私なりに(あくまでも "私なり" に)「疑問の原因」がわかったような気がします。 疑問の発生原因は 引用されている次の文章↓ではないかと思います。 > メソッドのデータ型は省略可能ですが、 > 省略しない場合には必ずvoidを指定します。 良く読むと この文章↑は変です。 誰もがそう書いているのではなく 出所はおそらく1人の方です↓。 Google検索「省略しない場合には必ずvoidを指定」 http://www.google.co.jp/search?hl=ja&q=%22%E7%9C%81%E7%95%A5%E3%81%97%E3%81%AA%E3%81%84%E5%A0%B4%E5%90%88%E3%81%AB%E3%81%AF%E5%BF%85%E3%81%9Avoid%E3%82%92%E6%8C%87%E5%AE%9A%22 出所の著者の方のお名前を出すのは控えますが その方の入力ミスや誤植のようなものだと思います。 つまり,著者の方の理解が不十分なのではなく「単なるミス」でしょう。 私が校正するとしたら次のように書き直します。 「メソッドのデータ型は省略可能ですが、 戻り値が存在しない場合には 必ず void を指定するようにします。」 つまり元の文だと 「データ型を省略しない場合にはどんなときもvoidを指定する」 ととれますがそれは間違いで 「戻り値が存在しない場合にはvoidを指定する」のです。 またこの場合の void がデータ型です。 これで理解できますか? ◎ご質問で書かれている関数(メソッド)の例 function moveX():void{ my_mc.x = my_mc.x + 200; } これには戻り値(return で返される値)が存在しません。 ですから この関数の型は void (英語で「空」「無」) になります。 ◎他の例1 整数とは限らない何かの数を戻り値として返す場合 その関数の型は Number になります。 function moveX():Number { return 200+10.5; } trace("戻り値…" + moveX()); trace("戻り値の型…" + typeof(moveX())); ◎他の例2 true または false のどちらかの値しか返さない場合 その関数の型は Boolean になります。 function moveX():Boolean { return false; } trace("戻り値…" + moveX()); trace("戻り値の型…" + typeof(moveX())); ◎他の例3 次の場合も戻り値を返しませんから型は void です。 function moveX():void { var num:Number = 200+10.5; } trace("戻り値…" + moveX()); trace("戻り値の型…" + typeof(moveX()));
その他の回答 (1)
- DPE
- ベストアンサー率85% (666/776)
ActionScript は仕事を順番に並べて書いた命令書で、上から順に命令が実行されていきます。 式次第(プログラム)に沿って式典が進むことと、似ています。 例えば、100 人の卒業生に卒業証書を渡すとします。 100 人分の仕事を逐一書いたのではスクリプトが長くなり、何より面倒です。 そこで、” function ”という機能が考案されました。 「○○に証書を渡す」と書いた命令の集まりを本来の仕事の流れとは別に用意しておき、いつでも何度でもそこに寄り道できる仕組みです。 また、○○の部分を変えることもできるので、条件を変えながら繰り返しこの寄り道を訪れるだけで済みます。 寄り道での用事が済んだら、本筋に戻らなければなりません。 本筋に戻る際に、何か1つだけ情報を持って帰ることができます。 この時に持ち帰る情報を「戻り値」、情報を持ち帰るように指定されている寄り道は「値を返す」などともいいます。 * * * ActionSctipt で扱う情報には文字列や数値といった種別があり、この種別をデータ型といいます。 ActionScript 2.0 からはいろいろなところでデータ型を明示できるようになりましたが、明示は必須ではありません。 ご質問文にある「省略可能」は、「情報の種別は明示しなくても構わない。明示するならば~」という意味です。 「メソッドのデータ型は省略可能」はメソッドの型がどれ、というのではなく型を明示する文法そのもののことで、メソッドを定義する時、型を明示するなら”戻り値の型”を void に、との意味だと思います。 データ型は、寄り道から戻る時に持ち帰る情報(=戻り値)にも適用されます。 ご提示のスクリプトで :void と書かれているところが、戻り値の種別を表すデータ型です。 例えば数値を持ち帰りたいのなら、void の代わりに Number や int などの数値を表す型の名前を書きます。 持ち帰りたい情報が特になければ、無理に持ち帰る必要はありません。 この場合は「何もないもの= void 型の値を持ち帰る」と考えて、戻り値のデータ型に void を指定します。 - - - - - ところで、” function ”のキーワードで定義するものを、何と呼びますか? 一般には「関数」ですが、「メソッド」と呼ばれることもあります。 同じキーワードで定義する関数とメソッド、違いは何でしょうか。 実は、両者の違いは諸説紛々で、はっきりした答えは出ていません。 どちらも「再利用できる命令の集まり」であって、機能は全く同じです。 有力な説は 1.”クラス”というものの中に組み込まれているものがメソッド、それ以外は関数 2.値を返さないものがメソッド、返すものが関数 どちらの説にももっともな論拠があります。 ご参考になさっている本の著者は、2を支持しているのかもしれません。 ” function で定義するもの”は、正式に全部書くと次のような書き方になります。 function 名前 ( 引数:引数のデータ型 ) :戻り値のデータ型 { 仕事の内容 return 持ち帰る情報; } 引数の話はひとまず置いて、最後の” return ”というキーワードに注目してください。 return は寄り道から本筋に戻る際、情報を持ち帰る(=「戻り値がある」もしくは「値を返す」)場合に使い、何も持ち帰らない時は省略します。 ご提示のスクリプトの moveX には、return のキーワードがありません。 この寄り道は本筋に戻る時、持ち帰る情報がない寄り道であることが分かります。 何も持ち帰らない場合、「戻り値のデータ型」は何もないことを表す void にすると決められています。 逆に return で何かを持ち帰る時は、void 以外のデータ型を指定する決まりになっています。 先述の関数とメソッドの違いで、2の説には「値を返さない(= return がない)ものがメソッド」とありました。 この説に則って考えますと、「メソッドは return がなく値を返さないもののことだから、戻り値のデータ型を明示するなら必ず void 」になります。 関数とメソッドの違いは明確になっていませんから、2の説を支持すると「”メソッド”( return のない function )の戻り値のデータ型は必ず void にする」は間違いではありません。 しかし、function といえば「 function 名前 ( ):void 」と必ず書くものだと、おまじないのように覚えるのは誤りです。 return がある場合は、void ではなく違う型の名前にしなければならないからです。
お礼
非常にご丁寧にご回答頂きましてありがとうございます。 ありがとうございました。
お礼
すいません、前回質問させていただいた時は、なんとなく分かったつもりになっていました。 それにも関わらず非常にご丁寧にご回答頂きましてありがとうございます。 「なんとなく」が「はっきり」分かりました。 すごくすっきりしました。 ようやく気持ちよく次のステップへ進めます。 ありがとうございました。