トップページ⇒tech
1001コメント306KB

静的型付け言語の潜在開発生産性は今の100倍 ×4

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2013/11/04(月) 22:36:14.15
人間がやっていたことを、コンピュータにやらせる。
これが生産性を上げる最大の方法。
コンピュータは間違わない、同じ事を何度も高速に行える。

その為に、コンピュータがコードの意味を正確に
認識できる方法が必要。実行しないとわからないことは
コンピュータは認識できない。

すなわち静的型付け言語であれば、実行しなくてもわかるので
コンピュータが理解できる。そうすれば様々な
コンピュータの高度な情報支援が得られる。

コンピュータのバックアップを受け、人間の生産性は
限りなく向上する。

前スレ
静的型付け言語の潜在開発生産性は今の100倍 ×3
http://toro.2ch.net/test/read.cgi/tech/1382656209/
0232デフォルトの名無しさん2013/11/10(日) 11:09:44.28
>>231
多いと認めるんだろう?
ならお前は同じことを言っている。
0233デフォルトの名無しさん2013/11/10(日) 11:11:03.87
JavaScriptはJavaやC#にようやく追いついた程度
http://www.slideshare.net/dynamis/try-firefox-os/16
まだまだネイティブまでは遠い
0234デフォルトの名無しさん2013/11/10(日) 11:11:04.61
あとクラスメソッドは引数だけでなくstaticなクラス変数やstaticイニシャライザも関係している。
そこの認識も狭い。
0235デフォルトの名無しさん2013/11/10(日) 11:13:27.91
でも大筋ではあってるな。
0236デフォルトの名無しさん2013/11/10(日) 11:16:07.72
あとクラスメソッドとインスタンスメソッドなんて大真面目で長文書くほど大した概念ではないということ。
0237デフォルトの名無しさん2013/11/10(日) 11:16:30.62
asm.jsってGCすら無いのに
それでもCの2倍遅くて、
C#と同じくらいなんだね
0238デフォルトの名無しさん2013/11/10(日) 11:18:36.32
>>235
副作用のとらえかたが間違っている。
0239デフォルトの名無しさん2013/11/10(日) 11:19:18.31
大筋では合ってるだろう。
0240デフォルトの名無しさん2013/11/10(日) 11:19:57.93
副作用を持ち出した時点で大筋でも間違っている。
0241デフォルトの名無しさん2013/11/10(日) 11:21:12.23
asm.jsにもGCは効きます
その関数が終わるまで延期されるのと
生メモリを触ることでGCの影響を受けなくすることもできるというだけです
0242デフォルトの名無しさん2013/11/10(日) 11:24:29.56
>>240
間違ってるというのなら
間違っているという証明をした方がいいね。
0243デフォルトの名無しさん2013/11/10(日) 11:25:30.14
>>241
つまり、その関数がアプリ終了まで
ずっと動いていれば、GCの影響が
全くないってこと?
0244デフォルトの名無しさん2013/11/10(日) 11:25:43.38
意地を張るあまり収集つかなくなる奴って一番嫌いなんだよ。さよなら。
0245デフォルトの名無しさん2013/11/10(日) 11:28:16.12
>>237
次のページ見てもらえれば分かるけど
asm.jsそのものは数割遅い程度でNaClなんかといい勝負
でもasm.jsでは数値計算しか出来ないし
全部をasm.jsで書くのは不可能だからね
だから全体では概ね対応環境で2倍、
直接対応はしてないけどいろいろ頑張ってるChromeで3倍くらいになる
0246デフォルトの名無しさん2013/11/10(日) 11:28:52.69
なんでまたその話を蒸し返してるんだこいつ?
証明できないくせに蒸し返すとか
それ単に悔しかっただけだろw
0247デフォルトの名無しさん2013/11/10(日) 11:32:59.04
>>228
古臭い、ではなく、狭苦しい。
ほとんど全部だよ。

> インスタンスメソッドというのは、インスタンスの内容を変更するもの。
> データが主であり、それを変更するためにメソッドを用意する。
 この見識があまりに狭い。
 オブジェクトというのはある役割を果たすためのものだ。
 データが主?それって目的と手段がごっちゃになってる。

> インスタンスの内容を変更しないのであれば、それはインスタンスメソッドにする意味が無い。
> インスタンスメソッドはインスタンスを変更するのが目的であり、それはつまり副作用を目的としている。
 インスタンスの内容に「基づいて」役割を果たせばよいのであって、内容を変更する必要はない。
 >>128-129はオブジェクト自身に対するメソッド発行しか念頭にないんじゃないかと疑う。
0248デフォルトの名無しさん2013/11/10(日) 11:34:04.21
>>243
asm.jsで作った関数はJS層にエクスポートされてるネイティブ関数と同じように振る舞います
JS層からasmネイティブ関数を呼び、その返り値を受け取って
処理を続けるという形になるので、副作用の実質出来ないasm.jsの部分がずっと働くということはありません
また、GCが働かない範囲では数値や元々メモリを確保する役割のバッファへの書き込みしかしないので
いたずらにメモリを消費するということはありません
0249デフォルトの名無しさん2013/11/10(日) 11:38:37.21
オブジェクトって英語で
「物」って意味だけどね。
役割果たすための「物」
さて物ってなに?
物以外ってなに?
0250デフォルトの名無しさん2013/11/10(日) 11:39:43.12
メソッドというのは、物に対するメッセージ。
メッセージを物に対して送るとき、
反応するのは、送り先の物である。
これがオブジェクト指向の原則。
0251デフォルトの名無しさん2013/11/10(日) 11:41:04.98
オブジェクトは物以外に対象とか反論とか言う意味がなかったけ?
あとOOは対象指向と言うと思う。
0252デフォルトの名無しさん2013/11/10(日) 11:42:40.69
Smalltalkを勉強したら本来メソッドというのは
オブジェクトに対するッセージだってことがわかるよ。

なぜそのオブジェクトに対してメッセージを送るのか?
それはそのオブジェクトに送らなければいけない
理由があるから。
0253デフォルトの名無しさん2013/11/10(日) 11:45:36.39
メッセージがオブジェクトの内容を変化させないとしたら、
それはそのオブジェクトに対して
メッセージを送る必要がないということを意味する。

そういうメソッドは違うクラスにあったとしても
問題なく動くだろう。

その場合、クラスは単にメソッドの種類をグループ化する
名前空間として使われているだけにすぎない。
名前空間はクラスではない。
0254デフォルトの名無しさん2013/11/10(日) 11:48:34.10
メソッド内で既定値を外れる入力だと判断したらオブジェクトの内部状態を変化させないだろ?
だからそういう議論は必ずしも成り立たないんだよ。
0255デフォルトの名無しさん2013/11/10(日) 11:53:14.17
別に動作や意味は関係ないと思ってる
オブジェクトから関数が生えてるように見えたらメソッドだ
0256デフォルトの名無しさん2013/11/10(日) 11:53:37.45
>>253
何で変化する必要がある?
オブジェクトは自身の情報を持っている。
その情報に「基づいて」、そのオブジェクトが役割を果たす。

その情報はそのオブジェクトだけが持っているかもしれない。
その場合他のオブジェクトはその役割を担えない。
別に変化する必要はないよね。
0257デフォルトの名無しさん2013/11/10(日) 11:53:56.57
class A{
 static int a=0;
 static int min(int b){
  if(a<b){a=b;}
  return a;
}
}
じゃあめんどくさいけど反証しとく。
staticだからといって内部状態がないわけじゃない
0258デフォルトの名無しさん2013/11/10(日) 11:55:49.87
ちなみに>>257はminではなくmaxとすべきだった。
0259デフォルトの名無しさん2013/11/10(日) 12:07:19.86
>>253
そういうのが「狭い」っていうんだよ。
0260デフォルトの名無しさん2013/11/10(日) 12:08:22.47
オブジェクトにメッセージを送るというのが分からん
関数にこれが対象ですよとオブジェクトを送るんだと思うんだが
0261デフォルトの名無しさん2013/11/10(日) 12:13:39.08
メッセージというのは関数型言語でいうところの関数と何が違うんでしょうか?
0262デフォルトの名無しさん2013/11/10(日) 12:17:27.56
例えるならば、メッセージは愛、関数は力
0263デフォルトの名無しさん2013/11/10(日) 12:22:44.41
>>260
class Postman {
 void sendMail() {
 }
}

Postmanオブジェクトにメイルを送ってというメッセージを送るときは
次のようになる。

Postman p = new Postman();
p.sendMail();

メッセージを送ることそれすなわちメソッドを呼ぶことなり。
0264デフォルトの名無しさん2013/11/10(日) 12:25:09.82
>>252
歴史的に先行するものが「本来」だというのは、それこそ狭い見識ですね。
0265デフォルトの名無しさん2013/11/10(日) 12:26:39.64
>>263
それだと単なる見る立ち位置の問題じゃない
もっと深い話ないの?
0266デフォルトの名無しさん2013/11/10(日) 12:28:46.79
>>265
Σd(ゝ∀・) ないよ!
0267デフォルトの名無しさん2013/11/10(日) 12:29:26.40
>>262
なるほど
ラブリーフォースアローみたいなもんですか
0268デフォルトの名無しさん2013/11/10(日) 12:32:00.30
メッセージパッシングの場合メッセージとオブジェクトは互いに独立してるってだけ
どんなメッセージをどんなオブジェクトに送っても構わない
まあオブジェクトにレシーバーがなかったらエラーになるけど
0269デフォルトの名無しさん2013/11/10(日) 12:42:10.16
メソッドはオブジェクトが変化する必要はない。
getter/setterのgetterがそうだろ。

メソッドはオブジェクトを変化されるか、
もしくはオブジェクトの状態を取得するかのどちらか。

さすがにオブジェクトに無関係な処理は
つまり引数と戻り値が全てのメソッドは
メソッドにする意味は無いけどね。
0270デフォルトの名無しさん2013/11/10(日) 12:42:46.07
変数に型がないということの利点について考える - サンプルコードによるPerl入門
http://d.hatena.ne.jp/perlcodesample/20130227/1361928810

お前らこれについてはどう思ってるわけ?その通りだと思う?
0271デフォルトの名無しさん2013/11/10(日) 12:42:54.60
>>259
> そういうのが「狭い」っていうんだよ。

「狭い」というのなら、
お前の「広い」を言えよ。
0272デフォルトの名無しさん2013/11/10(日) 12:43:55.26
>>270

そこのブログに書いてある
反論のつもりだと思ってるよ。
0273デフォルトの名無しさん2013/11/10(日) 12:46:45.87
>>270
それよりmyってなんですか
0274デフォルトの名無しさん2013/11/10(日) 12:52:06.72
>>273
ローカル変数
0275デフォルトの名無しさん2013/11/10(日) 12:55:02.86
宣言文や代入文の先頭にキーワードがない文法に対して
気持ち悪いという感覚を持つべきだ
0276デフォルトの名無しさん2013/11/10(日) 12:59:32.15
>>268
>メッセージパッシングの場合メッセージとオブジェクトは互いに独立してるってだけ
メソッドとオブジェクトが独立してるのもあるぞ
プロトタイプベース言語とか
それと似てるってことか?
0277デフォルトの名無しさん2013/11/10(日) 13:00:58.01
宣言は宣言詞がいるけど代入には要らないのが普通の考えじゃないか??
0278デフォルトの名無しさん2013/11/10(日) 13:04:50.91
完全型推論ってどの辺りまで決め打つのが一般的なの?
数値型の種類とか、オブジェクトのクラスの種類まで決め打たれるの?
0279デフォルトの名無しさん2013/11/10(日) 13:08:26.89
>>270
型は「型にはめる」ことでやりやすくしようって試みだから
型にはめるのを良しとしなければその通り
それから、人間のためと同じかそれ以上にコンパイラのための試みだと思うから
そんなん気にしたくねーよって主張なら型がない方のメリットが上回ってくると思う
この辺は利便性が云々より環境と性格だと思う
0280デフォルトの名無しさん2013/11/10(日) 13:15:09.40
>>276
オブジェクトから独立したメソッドというのがよくわからないけど
プロトタイプベース言語そのものだったりそれに似た機構を持っていることが多いと思う
0281デフォルトの名無しさん2013/11/10(日) 13:15:31.06
>>269
> ソッドはオブジェクトを変化されるか、もしくはオブジェクトの状態を取得するかのどちらか。

オブジェクトの状態を参照して(利用して)何かするんであって、取得する必要は必ずしもない。
getterは本当に必要なのものだけに限定した方がいい。
0282デフォルトの名無しさん2013/11/10(日) 13:20:31.29
>>275
ハス公キモいよねぇ〜
letくらいつけろよ、バカ!
0283デフォルトの名無しさん2013/11/10(日) 13:23:56.10
>>281
なにいってんの?

オブジェクトの状態を変えないが、
メソッドである必要があるものを言っただけだろ。
0284デフォルトの名無しさん2013/11/10(日) 13:25:49.11
>>281
そうだね
0285デフォルトの名無しさん2013/11/10(日) 13:27:59.59
アクセサってメソッドなのか
0286デフォルトの名無しさん2013/11/10(日) 13:29:01.44
>>269
>引数と戻り値が全てのメソッドはメソッドにする意味は無いけどね。

こういうメソッドは意味無いこともない。
private int min(int a,int b){
 return a<b?a:b;
}
0287デフォルトの名無しさん2013/11/10(日) 13:31:02.25
経験が浅いから議論がスカスカなんだよ。って雑談にイチャモンつけてる俺の方がバカなのかもしれんね。
0288デフォルトの名無しさん2013/11/10(日) 13:31:40.48
>>282
代入がある劣った言語と一緒にされちゃ困る
0289デフォルトの名無しさん2013/11/10(日) 13:32:15.70
>>283

>>269であんたは
>メソッドはオブジェクトを変化されるか、「もしくは」オブジェクトの状態を取得するかのどちらか。

と言っているが、そのどちらでもない、つまりオブジェクトを変化させないしgetterでもない
メソッドもあると言っている。

それがオブジェクトの状態を参照して(利用して)何かするメソッドだということ。
0290デフォルトの名無しさん2013/11/10(日) 13:32:52.46
>>286
それは意味が無い。

まずスコープがprivateである。
これはユニットテストが出来ないことを意味する。

ユニットテストをすることを考えると、
publicにした方がいい。

publicにすることで見えてくるもの。
それはこのクラスにあるべき機能なのかということ。

明らかに特定のクラスに依存したコードでないのだから、
簡単に移動できることがわかる。
つまりそのコードはクラスとは無関係のコードということだ。
0291デフォルトの名無しさん2013/11/10(日) 13:33:12.25
スタティックどころか全部グローバル関数でもええんやで?
0292デフォルトの名無しさん2013/11/10(日) 13:33:24.94
>>286
> private int min(int a,int b){
>  return a<b?a:b;
> }

それはstaticで十分だということじゃね?
0293デフォルトの名無しさん2013/11/10(日) 13:34:13.95
>>289
うん、そして、引数と戻り値だけで完結するものは、
メソッドではないとも言ってる。

クラスは単に名前空間として利用しているだけ。

引数と戻り値だけで完結するものは
素晴らしいよね。
0294デフォルトの名無しさん2013/11/10(日) 13:37:04.76
>>293
JavaScriptのことだなそれ
0295デフォルトの名無しさん2013/11/10(日) 13:41:18.94
>>294
違うけど? どうしてそう思ったの?
0296デフォルトの名無しさん2013/11/10(日) 13:42:02.03
個々の関数もたとえばMathクラスのインスタンスだと捉えればいいのだ。

Math exp([] (double x) { return exp_impl(X);});
double y = exp(1.5);
0297デフォルトの名無しさん2013/11/10(日) 13:43:10.73
(Mathクラスのインスタンスではないが)
Mathクラスのインスタンスだと "捉えれば" いいのだ。

って言ってる時点でな・・・。
0298デフォルトの名無しさん2013/11/10(日) 13:44:51.10
>>293
もしかして、メソッド内で自身の状態を参照することを「オブジェクトの状態を取得」と表現してんの?
「オブジェクトの状態を取得」と言えば、普通外部に公開するgetterのことを想像するが。
0299デフォルトの名無しさん2013/11/10(日) 13:45:42.02
そもそもさ、minって
Intergerクラスのメソッドであるべきじゃないの?

Integer a = 1;
Integer b = 2;

Integer c = a.min(b);

みたいにさ。
0300デフォルトの名無しさん2013/11/10(日) 13:47:47.67
>>297
何が言いたいのか?

そりゃ実際の数学では個々の関数はインスタンスと考えられるけど、プログラム言語でも同様に実装しろと?
0301デフォルトの名無しさん2013/11/10(日) 13:52:33.44
>>299
minの意味を考えろ。属するクラスが全然違う。
Intergerクラスのメソッドなんかじゃない。
0302デフォルトの名無しさん2013/11/10(日) 13:55:16.15
JavaScriptだとプロトタイプだけじゃなくて
オブジェクトが直接持ってる
要はobj.method()と出来るものはなんでも
そのオブジェクトのメソッドと呼んだりするな
0303デフォルトの名無しさん2013/11/10(日) 13:58:30.10
>>299
演算子を内部的にメソッドであると解釈する考え方もあるようですが、
もうそろそろ、演算子とメソッドの根本的な違いを
人類が認識するべき時かもしれませんね。


演算子とメソッドは全く違うもの。そしてminは演算子。
a 演算子 b があったとき、これをa.演算子(b) と解釈するのは間違い。

演算子とはaやbのメソッドではなく、aとbを引数にする関数
演算子(a, b) つまり関数(a, b)と解釈するのが正しい。

aとbを対等に扱うものはメソッドではなく関数で実装する。
メソッドは特定のオブジェクトに対して処理をするものでなければならない。

もし無理やりminをメソッドにするならば、a.min(b) はaよりbが小さければ、
aの中身をbに置き換えるものでなければならない。

演算子を関数として解釈するならば、三項演算子
a ? b : c を if(a, b, c) と捉えることも簡単でしょう。
四項演算子、五項演算子ってのも作ろうと思えば作れるでしょうね。

Integer i, String s の演算子+をIntegerのメソッドにするか、Stringのメソッドにするのか
悩む必要もありません。演算子=関数ははクラスとは独立しているので、
関数+(Integer i, String s) を実装すればいいだけです。
0304デフォルトの名無しさん2013/11/10(日) 14:00:40.68
演算子オーバーロードでは
a + b
↓
a.add(b)
とされるし区別ないよ^^;
0305デフォルトの名無しさん2013/11/10(日) 14:01:39.91
>>304
これほんと違和感あるわw

a + b
↓
add (a, b)
と解釈するほうが
よっぽどわかりやすいだろ。
0306デフォルトの名無しさん2013/11/10(日) 14:05:55.97
C++ ではとうの昔から friend 関数にするのが好まれている
0307デフォルトの名無しさん2013/11/10(日) 14:08:27.76
例えばゲームの当たり判定でも、

自機が爆弾に当たれば爆発する、
自機が仲間にあたっても何も起こらない。
自機がパワーアップアイテムに当たればパワーアップする
っていうのを実装するとき、

この処理ををどこに実装するかって問題がある。
自機に実装すればいいと思うが、
そうすると、自機は、爆弾や見方やパワーアップアイテムという
情報を知らないといけない。
つまり外部のクラスに依存してしまうということ。

これを
接触関数(自機、爆弾) {
 自機.爆発();
 爆弾.爆発();
}

接触関数(自機、パワーアップアイテム) {
 自機.パワーアップ();
 パワーアップアイテム.消滅();
}

接触関数(自機、仲間) {
 なにもしない
}

とできれば、シンプルに実装できる。
0308デフォルトの名無しさん2013/11/10(日) 14:16:38.13
>>307
そっかjavascriptってすげーな
0309デフォルトの名無しさん2013/11/10(日) 14:18:38.49
>>305
それは関数のオーバーライドで済まそうっていう考えね
関数のオーバーロードが無い言語もあるし、型が緩い言語とかであっても
もっと広く適応できるメソッド的な仕組みで実現しようという試み

前者はまさに「演算子オーバーロード」だけど
後者は特定のタイプに対する演算子の振る舞いを定義するっていう
ちょっと考え方が違う

例えばaを主体について定義するとこうなる
a + b → a.add(b)
b + a → a.radd(b)
0310デフォルトの名無しさん2013/11/10(日) 14:19:43.71
>>308
見てわかるようにオーバーロードができる言語の話で
できないJavaScriptの話なんかしてないけど、
頭ダイジョーブ?
0311デフォルトの名無しさん2013/11/10(日) 14:21:28.54
例えばaを主体について定義するとこうなる
a + b → a.add(b) ・・・aにbを加算する
b + a → b.add(a) ・・・bにaを加算する

普通は
a + b ・・・ aとbを加算したものを返す
0312デフォルトの名無しさん2013/11/10(日) 14:23:14.38
足し算に順序なんてありません!
リストは足すものではありません!
みたいな〜
0313デフォルトの名無しさん2013/11/10(日) 14:28:15.11
行いたい処理で交換法則が成り立つとは限らないでしょ
0314デフォルトの名無しさん2013/11/10(日) 14:29:55.13
>>305
動的型付けにはオーバーロードなんてないんですよ!!
0315デフォルトの名無しさん2013/11/10(日) 14:31:20.43
この前から他人の発言を抜き出して騒いでるビックリ君なんなの?
0316デフォルトの名無しさん2013/11/10(日) 14:32:30.24
>>260,261
例として 1 + 2 という式を考えてみる

関数型の場合、(>>260が言うように)関数へ 1 と 2 という
整数オブジェクトを送ることが計算である

オブジェクト指向では、1 という整数オブジェクトへ + 2 という
メッセージを送ることが計算である
ここで、+ 2 の"+" は(演算子ではなく)メッセージの種類を示す
識別子であり、セレクタと呼ばれる
また、+ という関数オブジェクトへ整数対 (1, 2) というメッセージを
送るというスタイルでも計算を表現できる

まとめると、オブジェクト指向の中で、後者の関数オブジェクトへ
引数を送るというスタイルに限定したものを関数型と呼ぶ
言い換えると、オブジェクト指向は関数型を包含した計算モデルである
0317デフォルトの名無しさん2013/11/10(日) 14:32:41.57
関数(写像)と関数の合成の場合は順序が重要だな
0318デフォルトの名無しさん2013/11/10(日) 14:33:38.50
>>314
オーバーロードがなくても型はあるんだから
実行時オーバーロードをスレば良い。

つまり、型みて振り分ければいいだけ。

add(integer a, integer b)で呼ばれたら
add_integer_integer(a, b)に移譲
することだってできるだろう?
0319デフォルトの名無しさん2013/11/10(日) 14:34:38.35
>>316
正解!
0320デフォルトの名無しさん2013/11/10(日) 14:34:55.12
>>316
オブジェクトはメッセージを受け取れない
受け取れるのは関数とはそういった類のもの
わざわざ難しく考えてるようにしか見えない
0321デフォルトの名無しさん2013/11/10(日) 14:37:10.00
>>318
それは変だよ
add_integer_integer(a, b)
という関数書いたら自動で使われるっていうのは
0322デフォルトの名無しさん2013/11/10(日) 14:37:17.20
>>318
できるの?具体的のどの言語のこと言ってるの?
0323デフォルトの名無しさん2013/11/10(日) 14:39:22.51
mpz_add (mpz_t rop, mpz_t op1, mpz_t op2)
こういうのを手続き型っていうんですよね?
0324デフォルトの名無しさん2013/11/10(日) 14:41:07.53
は?

型名を取得する関数はあるんだから
integerという型名がわかったら、
あとはeval('add_' + name_a + '_' name_b + '()')
を実行するだけじゃねーかw
0325デフォルトの名無しさん2013/11/10(日) 14:43:01.33
>>324
めんどっすね。
0326デフォルトの名無しさん2013/11/10(日) 14:46:51.50
>>324
call度にeval介するのか
うんうん、初心者にしては頑張ったな
0327デフォルトの名無しさん2013/11/10(日) 14:47:31.09
>>325
汎用的な関数で処理できるんだから
あとは1行書けば終わりだよ。

function add(a, b) {
  return hogehoge('add', a, b');
}

このhogehoge関数を
作れない人はいないでしょ?


これだけでも出来るかもな
add = function(a, b) { hogehoge('add', a, b') }

さらに
add = createHogeHoge('add');

スタックトレース解析して関数名取得するなら
add = createHogeHoge();
0328デフォルトの名無しさん2013/11/10(日) 14:48:39.62
>>326
> call度にeval介するのか

あのー、動的型付け言語ってのは
そういうものなんですけど?
0329デフォルトの名無しさん2013/11/10(日) 14:50:53.66
一方動的言語の代表JavaScriptはよりまともな方法を選んだ
http://www.slideshare.net/BrendanEich/js-resp/10
0330デフォルトの名無しさん2013/11/10(日) 14:52:56.45
>>327
その名前の関数こしらえなきゃならんのでしょ、めんどっすね。
0331デフォルトの名無しさん2013/11/10(日) 14:54:32.32
>>328
コスト考えましょうね初心者君
■ このスレッドは過去ログ倉庫に格納されています