数値をループさせる
こんな書き方もあるよ、という程度のこと
iをnでループさせたいとする
普通の書き方
剰余を使ったやり方
addEventListener(Event.ENTER_FRAME,frameTick)
var i:int=0
var n:int=10
iをnでループさせたいとする
普通の書き方
function frameTick(e) {
i++;
if (i>n) {
i=0;
}
}
剰余を使ったやり方
function frameTick(e) {
i=(i+1)%n;
}
あとがき初期値設定で値0に備える
引数をオブジェクトで受けて
フィールドに何にも入ってなかった時の
初期値を代入するとき"||"を使って
とかやったとします
すると、xxxが代入値ないときだけ じゃなく
値0のときも180が代入されてしまいます
0にしたいのに………
面倒くさいですが簡易分岐を使って
何にもはいってないのは0とはちがうのでそれでなんとか
なんかもうちょっと賢い書き方がある気がします
フィールドに何にも入ってなかった時の
初期値を代入するとき"||"を使って
function someFunc(paramObj:Object){
paramObj.xxx= paramObj.xxx||180
}
とかやったとします
すると、xxxが代入値ないときだけ じゃなく
値0のときも180が代入されてしまいます
0にしたいのに………
面倒くさいですが簡易分岐を使って
function someFunc(paramObj:Object){
paramObj.xxx= paramObj.xxx||((paramObj.xxx==0)?0:180)
}
何にもはいってないのは0とはちがうのでそれでなんとか
なんかもうちょっと賢い書き方がある気がします
知らないと損する?コーディング小技
■その1 論理演算子を使う
RGBの値を分解する時、例えばGの値をとりたい時
G=Math.floor((0x888888%0x10000)/0x100)
とかやってませんか?
論理積"&"を使いましょう
G=(0x888888&0xFF00)/0x100
■その2 プリミティブな型じゃない引数に初期値を設定する
なにかのクラスのインスタンスとかを引数に求める時は
初期値が設定できないと思ってませんか?
"||"を使えば前者の値が0,null,undefinedなどであれば
後者の値を代入します、これで数値とか文字列じゃない
引数にも初期値を設定できます
function hoge(arg:MyClass=null)
arg= arg ||new MyClass(xxx,xxx,xxx)
}
■その3 簡易分岐
if(frg){
trace("オッケー")
}else{
trace("ダメダメ")
}
こんな程度の分岐なら"~?~:~"を使えばコンパクト
trace(frg?"オッケー":"ダメダメ")
■その4 排他的論理和を使って二つの変数の値を入れ替える
a=a^b
b=a^b
a=a^b
[1,1,0]^[0,1,1]=[1,0,1]
[1,0,1]^[0,1,1]=[1,1,0]
[1,0,1]^[1,1,0]=[0,1,1]
ってことです
ただ、同じ変数同士でやると全部消えます
数値にしか使えません
■その5 フィールド名に値を格納して、同じ値の処理をしないようにする
var tempObj=new Object()
for each(var n in myArr){
if(n in tempObj)return;
tempObj[n]=true
someFunc(n)
}
数値か文字列にしか使えません
インスタンスとかの時は
おとなしくtemp配列つくってindexOfで
配列が希薄(飛び番OK)な言語なら
uint型なら配列のインデックスでもできます
これを利用すれば超高速sortが可能・・・らしい
RGBの値を分解する時、例えばGの値をとりたい時
G=Math.floor((0x888888%0x10000)/0x100)
とかやってませんか?
論理積"&"を使いましょう
G=(0x888888&0xFF00)/0x100
■その2 プリミティブな型じゃない引数に初期値を設定する
なにかのクラスのインスタンスとかを引数に求める時は
初期値が設定できないと思ってませんか?
"||"を使えば前者の値が0,null,undefinedなどであれば
後者の値を代入します、これで数値とか文字列じゃない
引数にも初期値を設定できます
function hoge(arg:MyClass=null)
arg= arg ||new MyClass(xxx,xxx,xxx)
}
■その3 簡易分岐
if(frg){
trace("オッケー")
}else{
trace("ダメダメ")
}
こんな程度の分岐なら"~?~:~"を使えばコンパクト
trace(frg?"オッケー":"ダメダメ")
■その4 排他的論理和を使って二つの変数の値を入れ替える
a=a^b
b=a^b
a=a^b
[1,1,0]^[0,1,1]=[1,0,1]
[1,0,1]^[0,1,1]=[1,1,0]
[1,0,1]^[1,1,0]=[0,1,1]
ってことです
ただ、同じ変数同士でやると全部消えます
数値にしか使えません
■その5 フィールド名に値を格納して、同じ値の処理をしないようにする
var tempObj=new Object()
for each(var n in myArr){
if(n in tempObj)return;
tempObj[n]=true
someFunc(n)
}
数値か文字列にしか使えません
インスタンスとかの時は
おとなしくtemp配列つくってindexOfで
配列が希薄(飛び番OK)な言語なら
uint型なら配列のインデックスでもできます
これを利用すれば超高速sortが可能・・・らしい