配列操作で消去時に気をつけること

はまった、というか割とはまってる人がいると思ったのでメモ。
プログラミングを始めた頃にこういうことがあったと思った懐かしさから書きました。

例えば以下の配列があったとします。

var array = [0,1,2,3,4,5];

さてarray全要素を削除したいというとき、例えば以下のように書いたとします。

//配列の要素を全て削除する
for(element in array) array.remove();

remove()は配列の先頭要素を削除する処理です。

このfor文の結果を表示するとこうなります。

[1,3,5]

...あれ?なんで全部削除できてないの? ちょっと考えてみてください。

理由はこうです。

このfor文は頭の良いループ君で、一回処理が終わると配列の見る位置をずらしてくれます。

[0,1,2,3,4,5]
 ↑    //0をみている

何らかの処理が終わると
[0,1,2,3,4,5]
   ↑   //1をみている

といったような感じです。 ここでループ中に配列要素の削除処理をするとこうなります。

[0,1,2,3,4,5]
 ↑    //0をみている

削除処理をする

[1,2,3,4,5]
 ↑    //0と同じ位置にきた1をみている

処理が一回終わったので戻る
戻った時、見る位置をずらす

[1,2,3,4,5]
   ↑    //2をみている

わかりましたでしょうか。
ずれてしまった!!
ループ中で要素の位置が変わったことで、すべて見ることができなくなってしまいました!

ここで活躍するのは、処理をし続けてくれるwhileマシーンくんです
正しい終了条件さえ設定すれば良いだけの話です。while文で解決します。

while(array.length != 0) array.remove();

配列の長さが0になるまでと設定することで、すべての要素を削除できます。

おわかりいただけたでしょうか
配列の操作には気を付けましょう。

haxe munitでテストするメモ

munitを使ってテストするためのメモ

前提としてhaxeは導入済み


初めての場合


MassiveUnit (github)みること

munitを導入していなかったら、macなのでターミナルで

haxelib install munit

これでmunitが導入される

使うときは、作業ディレクトリで

haxelib run munit config

このままEnter連打する
初期設定みたいな感じとしてやってるけど多分一回やっておけば大丈夫

設定終了


実行方法


ターミナルで作業ディレクトリに行く

haxelib run munit test -xx

xxの部分は出力したいやつ( jsだったりas3だったり )複数でもいいみたい

これだけでテストに必要なものを生成してくれる

テストが足りないと思うので

haxelib run munit create -for xxx.yyy

とかすると、test以下のxxxというパッケージにyyyTestというコードが生成される

これにやるべきテストを書いていけば大丈夫


メモ


コード上のimport文

import massive.unit.Assert

忘れないこと

コードは

public function new()  
{}  
  
@Test("~のテスト")  
public function test****():Void  
{}

って感じで書いていけば大丈夫かな

メモでした

そうだ、ゲームアプリ作ろう[第1回]

課題やったりしていました。 さて、環境をつくる編です

OpenFLの導入 OpenFLのページの手順に従い、インストールしていきます。 環境はMacOS X Yosemiteです。 Haxeはすでに導入しているので書きません


Limeの導入 準備の準備みたいな感じです コンソールを立ち上げ、以下のコマンド
haxelib install lime

ダウンロードが終わるまで待ったら
haxelib run lime setup

しばらくすると
Do you want to install the "lime" command?[y/n/a] ?
と聞かれましたので、とりあえずyでやりました。

自動でインストールしてくれるのでLimeの導入は終わり。


OpenFLの導入
コンソールで
lime install openfl

少し待ちます。
終わりです。

プラットフォームごとにセットアップします。
使いたいのはiOS,Androidくらいなのでページに従ってやります。

  • iOS
    Xcodeをインストールしておけば大丈夫っぽい

  • Android
    自動でインストールしてくれるコマンド
    lime setup android
    しばらくするとインストール先を聞かれました。

Output directory [/opt/android-sdk]:
デフォルトっぽいディレクトリが指定してあったので、新しく作ってsudoで実行してyでオッケー

Android SDK Manager が立ち上がりました

f:id:mt_mukko:20141025002211p:plain

Install 8 packages をクリックし、それぞれに同意をしインストール

ターミナルでDownload and install the Android NDK?
と聞かれるので、これもインストールした (これもディレクトリを作った)

Dowmload and install Apache Ant?
と聞かれるので、インストール。同上。


これで終わり