人に教えてわかること

昔の自分は忘れがち
理解できないところにはちゃんと理由があって、きっと自分も通ってきてわかりづらいと思ってたはず。
でも、できちゃうとそれを忘れてしまう。

初心忘れるべからず!

教えてみてなるほどと思ったこと1

stageの端まで行って折り返すactionscript

speedX = -speedX
と
sppedX *=-1
って何が違うの?

これはイメージが違います(笑)
まず考えなければいけないのはActionScript上のオブジェクトが動くということはベクトルであるということ。

細かく説明するとまずspeedX=10の意味を考えてみる
⇒Stage左端をX座標の0として起点にして考えたときに1フレームごとに10ずつ右方向に動くこと

つまりspeedXには二つの意味合いがある!
それを検証する前にspeedXを便宜上下記の通り書き換える

  • speedX = +10;

つまりプラスの方向(右方向)へ10動くベクトルをオブジェクトに定義したことになる。

次に右端までぶつかったときの処理を考えると次にどうしたいのかをオブジェクトに命令しないといけないので
反射の意味を考える
⇒ベクトルの方向を変える。つまりspeedX=-10となればいい。

前者後者ともにここに行きついているのは変わりない。
では、何が違うのか?

まず前者は単純に次のフレームからマイナス方向(左向き)に前と同じ強さで動くベクトルを定義したという形。
つまりは見た目から入るとこちらになる。

で、次は後者
こちらの意味合いは単純にベクトルの方向だけを変えたもの。
つまり、ベクトルの方向は+−であらわされているので、「-1」をかけることでベクトルの方向が変わることを利用した答えとなる。

functionって何?

functionは簡単にいうとブラックボックス
呼び出し元はブラックボックスの中身は意識しなくてよい。帰ってきた値を粛々と処理するのみ。
面倒なんで、テストしてません。しかもhtml打つのも面倒なんでactionscriptで書きます

例)

var a:Number=calc1(2);
var b:Number=calc2(2);

trace(a);
trace(b);

var c:Number=calc1(a);
var d:Number=calc2(b);

trace(c);
trace(d);

function calc1(num){
  return num*2;
}

function calc2(num){
  return Math.pow(num,2);
}

結果

4
4
8
16

つまり何が言いたいかというと。。。
a,bからわかるように同じ解をもってきたとしてもブラックボックスの中で何をしてるかは関係なく同じ値が代入されるだけ。

次にその答えを同じ関数にそれぞれ入れてみると違う答えが返ってくる。
それでもただパラメタに値を入れるだけ。

やっていることは何も変わらないが、値は違う。
これが関数の特徴

呼び出し元はブラックボックス(関数)内で何をしていても気にせず代入!

次に関数内を分析すると
cal1(num)は引数(num)を×2した値を呼び出し元に返している。
cal2(num)は引数を2乗した値を呼び出し元に返している。

だからnum=2の時は2*2も2の2乗も同じであったが、
引数が4になると戻り値が変わった。

結果をまとめると

  • 呼び出し元は関数の中の処理が何やってるかなんて関係ない!
  • 関数はただ入ってきた値に対して毎回同じ処理を繰り返すだけ。呼び出し元がどんな値を入れてくるかなんて関係ない!

つまりはお互い独立しているということ

プログラムを読み解くコツ(最後の手段かもw)

プログラムはあくまでも「言語」である。
つまりは人間にも理解できる⇒日本語にもなる。

ここから言えるのは書いてあるプログラムを日本語に翻訳してしまえば中で何をしているのか一目瞭然!
さきほどやった

var a:Number = 10;
if( a < 10 ){
	trace( "a は10より小さい" );
}else if( a == 10 ){
	trace( "a はずばり10" );
}else{
	trace( "a は10以上" );
}

こちらを読み解いてみよう

  1. aという数字しか受け入れない入れ物に10という数字を入れた
  2. もし(if)a(=10)が10より小さいときは"aは10より小さい"と表示する
  3. 上記以外(else)でもし(if)(合わせて else if)a(=10)が10だった場合、"aはずばり10"と表示する
  4. 上記二つのどちらにも該当しない場合(else)は"aは10以上"と表示する

この日本語をActionScriptにしただけ。
すべては日本語に翻訳できる。
逆にActionScriptを作成する際にはこの日本語を作ってからそれ通りにActionScript用の単語を入れていけば理論上は作成できる!

プログラムはまず自分が読める言葉に置き換えるのが基本です!