電子書籍の厳選無料作品が豊富!

皆様、いつもお世話になります。
今、アクションスクリプトを独学しています。
String.prototypeに関して調べる途中
このサイトで
http://www.actionscript.org/forums/showthread.ph …
以下のようなコードを見ましたが、、、

String.prototype.split2d = function () {
tmpAr = this.split("|");
for (j=0; j<tmpAr.length; j++) {
tmpAr[j] = tmpAr[j].split(",");
}
return tmpAr
};
myString = "1,2,3,4|5,6,7,8|9,10,11,12";
tmp = myString.split2d();
trace(tmpAr[0][0]);

split2dはなんですか?
検索して見ても当たる情報もないし、、何方か教えていただきませんか?
あと、String.prototype.split2d = function はいつよく使われますか?

ぜひ、よろしくお願いいたします。

A 回答 (3件)

ご質問のスクリプトですが,


普通の書き方にすると次のようになります。

-------------------------------
split2d = function (str) {
tmpAr = str.split("|");
for (j=0; j<tmpAr.length; j++) {
tmpAr[j] = tmpAr[j].split(",");
}
return tmpAr;
};

myString = "1,2,3,4|5,6,7,8|9,10,11,12";

tmp = split2d(myString);

trace(tmp[0][0]);
-------------------------------

 ↓型指定を入れた方がわかり易い?↓

-------------------------------
split2d = function (str:String):Array {
var tmpAr:Array = str.split("|");
for (var j:Number=0; j<tmpAr.length; j++) {
tmpAr[j] = tmpAr[j].split(",");
}
return tmpAr;
};

var myString:String = "1,2,3,4|5,6,7,8|9,10,11,12";

var tmp:Array = split2d(myString);

trace(tmp[0][0]);
-------------------------------

上が ActionScript 1.0 風で
下が ActionScript 2.0 風です。


これを
 あえて普通ではない,
 Stringクラスの拡張メソッドもどき的な書き方をすると,
 ご質問のようなう書き方もできますよ。
ということでしょう。

普通は上で書いたようにするので,
ご質問のスクリプト自体には全く有り難みを感じませんが,
ご質問の "スクリプト自体が重要" なのではなく,
 このような書き方をすると何かの時に使えるかもしれませんね。
という "スクリプトの可能性" を書いているのだと思います。


> split2dはなんですか?

作者が勝手に作った(命名した),メソッド名(匿名関数参照の変数名)です。



以下は,#2の方が書かれていらっしゃる内容と同じでが。

・ご質問のスクリプトの訂正

 trace(tmpAr[0][0]);
   ↓訂正↓
 trace(tmp[0][0]);


・補足内容の訂正

> //結果をtmpArにreturn
> return tmpAr
 ↓訂正↓
//できた配列 tmpAr を return(戻り値として返す)
return tmpAr
 
    • good
    • 0
この回答へのお礼

BlurFiltan様、ご回答ありがとうございます!!!
普通の書き方だとこうですか、、、
本当に、勉強になりました。
ありがとうございました!

お礼日時:2010/03/02 10:38

ただの日本語間違い?かと思いますが



結果をtmpArにreturn


というよりは


結果のtmpArをreturn


というべきかと




ところでいま気付いたんですが

trace(tmpAr[0][0]);

ってほんとは

trace(tmp[0][0]);

って書きたかったんじゃないですかね?

でないとなんのためにtmpにsplip2dの
戻り値代入したん?ってカンジです

まあ多分結果はおんなじ?だと思うんですが・・・
    • good
    • 0
この回答へのお礼

H240S18B73様、ご回答ありがとうございます!!
良い、参照になりました。
これからもよろしくお願いします。

お礼日時:2010/03/02 10:39

Stringクラスはdynamicクラスじゃないから


後からプロパティやメソッドを追加できないし
かといってfinalクラスなんでクラスの拡張もできないから
クラスにメソッド追加したかったら
大元の継承元のObject、prototypeに書いちゃおうという話

これでStringクラスに"|"と","で文字列を2次元(2D)配列にしちゃう
split2dメソッドなんて機能追加しちゃうよ、ってカンジですね

この回答への補足

H240S18B73様、ご回答ありがとうございます。
100%理解できたとは断言できませんが、
なるほど、、っていう感じです。
2次元(2D)配列の配列をするから、split2dで、2dがありますね。
ありがとうございました。

一行ずつコード分析すると、、

//メソッド追加
String.prototype.split2d = function () {
//これを|で配列にして、tmpArに代入、tmpArは配列、、
tmpAr = this.split("|");
//配列の要素個数を利用し、2次元配列にする。
for (j=0; j<tmpAr.length; j++) {
tmpAr[j] = tmpAr[j].split(",");
}
//結果をtmpArにreturn
return tmpAr
};
myString = "1,2,3,4|5,6,7,8|9,10,11,12";
tmp = myString.split2d();
trace(tmpAr[0][0]);

間違いところがありましたら、指摘よろしくお願いいたします。

補足日時:2010/02/27 02:18
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!