静的型付け言語の潜在開発生産性は今の100倍 ×5at TECH
静的型付け言語の潜在開発生産性は今の100倍 ×5 - 暇つぶし2ch1:デフォルトの名無しさん
13/11/24 15:06:08.63 .net
int a = 1;
a = "a"; ← エラーになる。
型がない言語ではできない芸当です。(爆笑)


人間がやっていたことを、コンピュータにやらせる。
これが生産性を上げる最大の方法。
コンピュータは間違わない、同じ事を何度も高速に行える。

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

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

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

前スレ
静的型付け言語の潜在開発生産性は今の100倍 ×4
スレリンク(tech板)

2:デフォルトの名無しさん
13/11/24 15:09:38.06 .net
静的厨は人間失格w

3:デフォルトの名無しさん
13/11/24 15:11:19.87 .net
ちなみに動的言語でも変数に型とは別に不変条件を設定して、
不正な代入をエラーにする機能は実装可能だよ。

静的厨って空気を吸うように嘘をつくんだね。
静的厨って人間として最低のクズだねw

4:デフォルトの名無しさん
13/11/24 15:12:16.26 .net
>>3
全く同じコードでないと
実装したとはみなしません。

5:デフォルトの名無しさん
13/11/24 15:16:56.54 .net
静 的 型 付 け 言 語 = う そ つ き 言 語

6:デフォルトの名無しさん
13/11/24 15:17:15.03 .net
動的言語ってJavascriptとかでしょ?
じゃあもう結論出てるっしょ。
変なとこクルックしたらおかしくなるページとか普通にあるし。
変なとこクルックするのが悪いとかいうけど、変なとこあったらクルックしたくなるよね。
普通だよね。

7:デフォルトの名無しさん
13/11/24 15:23:46.28 .net
>>6
見たことねえよそんなページ、薄ぼんやりとした脳みそでデマ撒き散らしてんじゃねえぞ。
クッキークリッカーであらゆるものをクリックしまくった俺が言うんだから間違いない。

8:デフォルトの名無しさん
13/11/24 15:24:35.17 .net
>>7
なんでクルックにツッコミ入れないの?
可愛そうだと思わない?

9:デフォルトの名無しさん
13/11/24 15:25:23.33 .net
思いやりのない人なんじゃないの?

10:デフォルトの名無しさん
13/11/24 15:25:49.77 .net
>>5
そうなるな。
NumOrStringの実装出せなかった時点で詐欺確定だわ。
生産性詐欺。

11:デフォルトの名無しさん
13/11/24 15:26:41.67 .net
NumOrStringってなに?

12:デフォルトの名無しさん
13/11/24 15:28:09.65 .net
>>8
そんなとこ指摘してたらきりがない、>>6の文章の瑕疵について指摘しようと思えば
13箇所指摘できる。俺は国語の先生やりたくてここにいるわけじゃない。静的言語厨の
悪辣な生産性詐欺を断罪するためにここにいるんだ。

13:デフォルトの名無しさん
13/11/24 15:28:16.78 .net
数値と文字列の両方が格納できるクラス。
これを静的言語では実装できない。
根拠は実装出せなかったこと。

14:デフォルトの名無しさん
13/11/24 15:28:36.97 .net
初心者ですよろしくおねがいします。

3 件の検索結果 時間指定なし 日本語のみ

NumOrString の検索結果が見つかりませんでした。
num or string の検索結果を表示しています。

検索ではわかりませんでした。

15:デフォルトの名無しさん
13/11/24 15:28:54.11 .net
このあたりに hoge厨が逃げ込んだという目撃情報があります
若干姿を変えていますが挙動不審なため一目で分かりますので
市民の皆様は見かけても決して声をかけたりせず
近くの警察官へお知らせ下さい

16:デフォルトの名無しさん
13/11/24 15:29:09.75 .net
> 数値と文字列の両方が格納できるクラス。

出来そうな気がするけど?
似たようなものに、C#のNullable型ってのがあるよ。
null+特定の型が格納できる型。

17:デフォルトの名無しさん
13/11/24 15:30:14.36 .net
>>11
前スレの静的厨が考えた最強のクラス。
NumOrStringにはsetValueというメソッドがある。
値を代入するにはsetValueを使わなければならない。

18:デフォルトの名無しさん
13/11/24 15:30:38.46 .net
つーか、varに相当するのは
何でも型じゃねーの?

VBでいえばVariant型でしょ?
Object型でもいいけど。

19:デフォルトの名無しさん
13/11/24 15:31:11.50 .net
>>17
ほう。やっぱりできるんだ。

20:デフォルトの名無しさん
13/11/24 15:31:22.37 .net
>>13
あらかじめ使う型がわかっていないのなら型消去の仕組みを使うのがいいだろね。
そうじゃなければ共用体に入れるとかだろね。

なんでそんなことで議論してるの?

21:デフォルトの名無しさん
13/11/24 15:32:08.55 .net
文字列と数値を両方格納できる型を用意するのは簡単だろ

ただ、内部に状態持たせたら副作用が云々言い出すし、
それらのにhidingで書いたもケチつけるし、
何が言いたいのか分からんのが正直な所

22:デフォルトの名無しさん
13/11/24 15:32:41.38 .net
>>20
一人のキチガイが
静的言語では、実現不可能だって言ってるだけ。

みてればわかるよ。まさにキチガイって感じだから。

23:デフォルトの名無しさん
13/11/24 15:33:10.88 .net
>>16
じゃあやってみろよ。

24:デフォルトの名無しさん
13/11/24 15:33:29.28 .net
状態を持たせるのは正しい設計だと思うけど、なんでダメなの?
魔術的なものを期待してるの?

25:デフォルトの名無しさん
13/11/24 15:34:47.55 .net
コンストラクタで値を指定して、
インスタンスを作成した時から変えられないのなら
それは状態じゃないから問題ないんだよ。

26:デフォルトの名無しさん
13/11/24 15:35:15.36 .net
>>19
前スレの奴は結局出せなかった。
NumOrStringを書けって言ったら「俺は興味ない」という
地獄のミサワの真似して逃亡した。

27:デフォルトの名無しさん
13/11/24 15:35:18.86 .net
int a = 1;
a = "a"; ← エラーになる。
型がない言語ではできない芸当です。(爆笑)

28:デフォルトの名無しさん
13/11/24 15:35:24.90 .net
わかった!お話がしたいだけで中身はそんなに関係ないんだ。

29:デフォルトの名無しさん
13/11/24 15:35:46.28 .net
C++で演算子オーバーロードしてintでもStringでも扱えるVariant型ってのを作ったんだ。
そしたらたいして便利でもなく動的言語って意味ないと思った。

30:デフォルトの名無しさん
13/11/24 15:35:51.80 .net
>>26
興味ないって何に対して?

31:デフォルトの名無しさん
13/11/24 15:37:03.09 .net
>>30
キチガイに対してじゃね?

> だけど、ここまでヒント上げて気づかない奴に
> 俺は興味ないかな。じゃあね。

俺もキチガイに興味はないなw

32:デフォルトの名無しさん
13/11/24 15:37:19.66 .net
>>24
じゃあ正しく設計したNumOrStringを書いてみろよ。

33:デフォルトの名無しさん
13/11/24 15:37:39.46 .net
>>25
そういう時は素直にテンプレート使おうよ。

34:デフォルトの名無しさん
13/11/24 15:38:37.11 .net
>>32
まず「正しい」の定義をしてくれ。

35:デフォルトの名無しさん
13/11/24 15:39:40.84 .net
union NumOrString
{
  std::string str;
  int n;
};

36:デフォルトの名無しさん
13/11/24 15:39:40.80 .net
その「正しい定義」って動的型では実装不可能なんだよな。

37:デフォルトの名無しさん
13/11/24 15:42:00.33 .net
>>29
それわかるわ~。
結局なんでも入れられるってめんどくさくなるだけなんだよねえ。
頑張って損した気分になる。

38:デフォルトの名無しさん
13/11/24 15:42:13.05 .net
>>30
知らない。前スレの静的厨が言った言葉だ。
逃げ口上としてもっともらしいことを言おうとしただけで深い意味はないだろ。
彼女いない歴=年齢のやつが「俺女に興味ないから」と言ってるようなもの。
完全に防衛機制における合理化。Dの烙印を押された奴の断末魔。

39:デフォルトの名無しさん
13/11/24 15:44:17.87 .net
>>34
>>24に聞けよw>>24は正しい設計だと思うって言ってんだから
その「正しい」の定義にしたがって実装していただければ幸いでございます。

40:デフォルトの名無しさん
13/11/24 15:46:27.28 .net
NumOrStringってなんですか?

41:デフォルトの名無しさん
13/11/24 15:47:10.07 .net
>>35
そりゃ単に同じメモリ領域にぶちこんでるだけじゃないか

"1"が1と同値になるような実装でないと認めません

42:デフォルトの名無しさん
13/11/24 15:47:24.40 .net
>>13
type NumOrStr=
|Str of string
|Num of int

let s=Str "hoge"
let n=Num 100

n|>function
|Num v->数値処理
|Str v->文字処理

F#だとこんな感じか。
めんどいのでintに限定したけど他の数値型が入るようにも出来る。
上のnとかsを使うところで場合わけで処理分岐可能。上の例は直後で分岐してるので間抜けだけど。

43:デフォルトの名無しさん
13/11/24 15:48:03.29 .net
静的厨は童貞。
静的を性的と脳内変換して悦楽に浸っている現実逃避の変態。
つまり、NumOrStringとは童貞が創りだした最高の女。
ゆえにそれを見せろと言ったら即座に逃亡をはかる。静的厨は卑劣極まりない。

44:デフォルトの名無しさん
13/11/24 15:48:59.31 .net
何でも入れられるといいなと思う時の代表が構文解析とかだろね。
スタックに積む値に意味動作から返される値を含めて積めると便利だから。
次にスタックから取り出されて還元されるときは、それが何であるか
意味動作自体が知っているから値自体に状態が必要ないし。
僕は共用体を良く使うよ。
読み込むBNFに還元されるときの型を書いておくんだ。
頭いいでしょ?
まあ普通にこうするか。
別に頭良くないね。

45:デフォルトの名無しさん
13/11/24 15:50:39.73 .net
>>37
頑張って損というのは、企業への忠誠と努力が無駄だったときくらいだな。

46:デフォルトの名無しさん
13/11/24 15:50:46.67 .net
だからNumOrStringってなんだよ

47:デフォルトの名無しさん
13/11/24 15:51:43.05 .net
>>46
共用体のことらしいよ。

48:デフォルトの名無しさん
13/11/24 15:52:42.13 .net
>>46

943+1 :デフォルトの名無しさん [↓] :2013/11/24(日) 14:38:53.62
 >>942
 Javaで書くならこんな感じかねぇ。

 NumOrString a;
 a.setValue(1);
 a.setValue("a");

 setValueの実装はオーバーロードで。

49:デフォルトの名無しさん
13/11/24 15:53:11.04 .net
>>37
頑張って損したとは思わない。
社長が女たらしで売上げの半分を社長が独占している会社で努力することだろ。

50:デフォルトの名無しさん
13/11/24 15:55:00.51 .net
社名を出せないヘタレがそんなこと書いちゃダメ!

51:デフォルトの名無しさん
13/11/24 16:03:43.15 .net
>>45
ジジイの介護みたいな会社で努力するなら、
ホンモノの高齢者の介護をした方がマダましなんじゃないかって

52:デフォルトの名無しさん
13/11/24 16:05:38.13 .net
爺どもはあと10年でいなくなる、そしたら俺の天下だと思って頑張ってるけど、
そうでもないの?

53:デフォルトの名無しさん
13/11/24 16:06:09.56 .net
動的型使ってる奴がみんな同レベルと思わないでくれ
NumOrStringなんて考えた奴が低能なだけ

54:デフォルトの名無しさん
13/11/24 16:08:27.45 .net
>>52
重役の息子や孫がヘッドハンティングとか言ってコネで入ってきてスピード昇進なんてよくあること。

55:デフォルトの名無しさん
13/11/24 16:12:16.74 .net
コネで入ってきたやつに負ける程度の実力なら、下についたほうがお得な気がするけど、
そうでもないの?

56:デフォルトの名無しさん
13/11/24 16:17:52.12 .net
静的動的の違いより、DFAとNFAの差のほうが気になる。
DFAは実際ほとんど使われていないけど、今後はDFAじゃないとダメなんじゃないのかな?
いまDFAが使われる場所ってコンパイラとかデスクトップで完結してるような
NFAでもいいようなとこだと思うんだ。
NFAってネットワーク越しにやってくる指令の解析にさえ使われていてこれ凄く危険。
そう思わない?

57:デフォルトの名無しさん
13/11/24 16:19:43.29 .net
>>55
日本社会において実力っていう物の5割はコネのことだからな。

58:デフォルトの名無しさん
13/11/24 16:22:19.48 .net
Javaが画期的だったのはDFAであることが保障されてたことじゃないのかなあ。
あんまり話題にならないけど。

59:デフォルトの名無しさん
13/11/24 16:28:27.58 .net
オートマトンなんかどうでもいいよ。そんなところがユーザーが気にすべきところならその言語はお粗末だ。

60:デフォルトの名無しさん
13/11/24 16:32:24.15 .net
決定性がないってことは、外部からの入力に対して計算を実時間内に
終了できることを保証できないってことだよ。
事実上無限ループさせられるってことじゃないの?
30秒で打ち切るとかそういう場当たり的な対策でいいの?
記憶領域をいくらでも使わされるとか。
そんなんでいいの?
これは言語関係ありません。
たぶん。

61:デフォルトの名無しさん
13/11/24 16:34:45.46 .net
58=チューリング完全の意味も知らないバカ

62:デフォルトの名無しさん
13/11/24 16:34:45.74 .net
全然話が見えてないんだけど、DFAとNFAは等価ですよ?

63:デフォルトの名無しさん
13/11/24 16:36:28.47 .net
>>41
> "1"が1と同値になるような実装でないと認めません

いきなり後出し追加要件笑たわ

64:デフォルトの名無しさん
13/11/24 16:37:51.06 .net
静的型付け言語=平気で嘘をつく人格障害者向けの言語

65:デフォルトの名無しさん
13/11/24 16:39:32.26 .net
>>41
そんな仕様の言語は動的型でもゴミの部類ですよ

66:デフォルトの名無しさん
13/11/24 16:41:15.20 .net
>>58
これは恥ずかしい

67:デフォルトの名無しさん
13/11/24 16:46:45.41 .net
さすがに自演だな
こんなバカが1日に2人も来るわけない

68:デフォルトの名無しさん
13/11/24 17:05:12.14 .net
理解できませんでしたか。

69:デフォルトの名無しさん
13/11/24 17:07:57.68 .net
1と"1"が同値かはともかく16と"16"だと基数は何なのよとか"0x10"は受け付けるのか
とか日本語対応で漢数字"十六"にも対応しようぜとかフランス語は16までは単語が
有るけれども17からは"10と7"の合成なんだぜとか生産性のさほど無い話に発展すれば
よいのに。

70:デフォルトの名無しさん
13/11/24 17:10:52.26 .net
いやここ生産性のスレだから。

71:デフォルトの名無しさん
13/11/24 17:14:22.31 .net
>>68
DFAで保証の人?
何を保証してるのか説明plz

72:デフォルトの名無しさん
13/11/24 17:17:20.32 .net
ポアソン分布について話してるとこに足し算の説明求められても
そこは自分でってなるよ。
なるよ。
ならなかったっけ?

そんな感じであります!隊長!

73:デフォルトの名無しさん
13/11/24 17:26:07.95 .net
うそです!
そんな感じじゃないです。
馬鹿にされたからひがんだだけっす!隊長!

74:デフォルトの名無しさん
13/11/24 17:30:53.28 .net
この流れに吹いてしまった俺に一言

75:デフォルトの名無しさん
13/11/24 17:40:44.06 .net
つまりJavaのJVMが行うgcの待ち行列はポアソン分布に従う

76:デフォルトの名無しさん
13/11/24 18:24:40.50 .net
違う!全然違うよ!

77:デフォルトの名無しさん
13/11/24 18:24:51.91 .net
まぁABC予想とともに解決する問題なんだけどね

78:デフォルトの名無しさん
13/11/24 18:52:15.68 .net
JSerが出てこないとヒマだな。

79:デフォルトの名無しさん
13/11/24 18:54:53.09 .net
呼んだ?

80:デフォルトの名無しさん
13/11/24 21:15:38.93 .net
>>79
でてくんなボケ

81:デフォルトの名無しさん
13/11/24 21:33:56.48 .net
じゃあ呼ぶなよ。
めんどくさい奴だな。

82:デフォルトの名無しさん
13/11/24 21:42:39.70 .net
とにかくJSネタに我田引水して「ES7で解決している」と言ってみるとかネタは無くとも
とりあえず「Cの10倍速い」と言うのが訓練されたJSerであって、「呼んだ?」だけでは物足りない。

83:デフォルトの名無しさん
13/11/24 21:50:39.71 .net
定価1万円くらいのJavaの本がブックオフで105円だったので買ってきました。
2011年初版です。
なんでこんなに安くなってたんだろ。
見たところ新品みたいなのに。
これ出した人一度も読んでないよね。
こういうの流行ってるのかな?

84:デフォルトの名無しさん
13/11/24 21:54:31.23 .net
Javaの第二形態がJS。
もちろん進化した分Javaより強い。

85:デフォルトの名無しさん
13/11/24 22:03:24.72 .net
俺JS使いだけど、
JavaScriptは
Cの100倍速いよ

86:デフォルトの名無しさん
13/11/24 22:06:23.81 .net
100倍は無理でしょ。
常識で考えなよ。

87:デフォルトの名無しさん
13/11/24 22:09:11.37 .net
空気戻ってきた。

88:デフォルトの名無しさん
13/11/24 22:57:48.80 .net
>>86
それいったら10倍だって無理だしw

89:デフォルトの名無しさん
13/11/24 23:37:47.79 .net
JavaScript は C の10倍 名前が長い

90:デフォルトの名無しさん
13/11/24 23:40:11.03 .net
S(100);

/* C */
int S(int n){
 int i, sum;
 for( i = 1; i <= n; i++ ){
  sum += i;
 }
 return sum;
}

/* js */
function S(n){ return n * (n+1) / 2; }

そう、JavaScriptはCの100倍速い

91:デフォルトの名無しさん
13/11/24 23:41:01.36 .net
ジャバスクリプトとシーなら4倍だ。10倍って大げさすぎたいしたことない。

92:デフォルトの名無しさん
13/11/24 23:41:34.27 .net
くっそwミスったw

93:デフォルトの名無しさん
13/11/24 23:50:09.92 .net
イーシーエムエースクリプトで6.5倍だ

94:デフォルトの名無しさん
13/11/24 23:51:56.76 .net
>>90
それJavaScriptにおける最適化手法の進化について理解していない。

将来的にはn * (n+1) / 2という式から「あぁ、この人は1からnまでの総和を求めようと
しているんだな・・・」と自動的に解釈してループを使ったコードに書き直してくれる
ようになるらしい。

95:デフォルトの名無しさん
13/11/25 00:09:49.56 .net
3倍なら可能!

96:デフォルトの名無しさん
13/11/25 00:11:41.64 .net
JSはCの二倍速い。

97:デフォルトの名無しさん
13/11/25 00:14:59.65 .net
>>94
いや、それって逆じゃないの…?

98:デフォルトの名無しさん
13/11/25 00:25:42.16 .net
>>97
何のためにSIMD対応を進めているとおもっているのか。
ループに展開してGPUで並列計算するに決まっているじゃ無いか。

99:デフォルトの名無しさん
13/11/25 00:25:52.26 .net
最終的には5050という数字を見つけると、1から100までたしたいんだなと解釈してループコードに書き換えてくれる

100:デフォルトの名無しさん
13/11/25 00:31:22.06 .net
MAPが並列で速くなるのはわかるけど
REDUCEが並列で速くなる…?

101:デフォルトの名無しさん
13/11/25 00:35:55.81 .net
>>100
もちろん、帰納的に100個のルーチンを展開してそれぞれ実行する

102:デフォルトの名無しさん
13/11/25 00:35:59.64 .net
JSなら速くなる。
ES7で実装される予定。

103:デフォルトの名無しさん
13/11/25 00:44:37.69 .net
>>100
隣接する偶数番目と奇数番目でペア作って並列で足し算するに決まっているでしょ。
100までの総和なら最初のイテレーションで50まで要素が減る。
100回ループ回さなくても5~6回のイテレーションで計算できるぞ。

104:デフォルトの名無しさん
13/11/25 00:45:47.45 .net
アホプログラマは5歳のガウス少年よりアホってことが良く分かりますね

105:デフォルトの名無しさん
13/11/25 00:48:33.97 .net
なあに、才能と計算リソースは無駄遣いされるものと相場が決まっている。

106:デフォルトの名無しさん
13/11/25 00:52:26.29 .net
ラズパイにUbuntu入れてJSでソフトを作りました。
結果、オープンハードで2倍、オープンOSで2倍、オープン言語で2倍、合わせて
100倍速くなりました。
これを32台つなげたクラスタは京より少しだけ速くなりました。
次は64台つなげてみたいです。

107:デフォルトの名無しさん
13/11/25 00:57:18.39 .net
おまえら元気だよな。ネカマとJSerになりきるのはよう続かんわ。

108:デフォルトの名無しさん
13/11/25 00:57:32.82 .net
総和ならこれくらいのことはやって欲しい。;p

{Color red. Color green. Color blue} sum "=> Color white "

109:デフォルトの名無しさん
13/11/25 01:00:12.87 .net
ネタ扱いされてるけど、JSがCの二倍速いのはほんとだよ。
やってみた人だけが知ってること。
やってもいないくせにネタ扱いするのやめてくんない?
迷惑。

110:デフォルトの名無しさん
13/11/25 01:05:01.46 .net
>>108
CMYKへの対応はどうするんだとか言うツッコミはともかくHTMLとかのカラーコード表
を取り込めばさっくり実装できそうな気もする。

111:デフォルトの名無しさん
13/11/25 01:21:52.31 .net
ねぇ、動的型つき言語でのテスト方法教えて。

まずさ、クラスAがあるでしょ?
そのクラスAが内部で使ってるクラスBがあるでしょ?

クラスBの単体テストは簡単だよね。
クラスAの単体テストをする時、クラスBの代わりにモックを使うよね?

つまり、クラスA+偽クラスBでテストをしているわけさ。
この時、クラスBの仕様が変わるとするよね?
でも偽クラスBはクラスBのモックというだけで、クラスBとは無関係だよね?
動的型付き言語の場合。

クラスBの仕様が変わってるのに、クラスAはテストに通ってしまう。
こういう場合どうするの?

静的型付け言語ならコンパイルエラーで見つけられるけどさ。

112:デフォルトの名無しさん
13/11/25 01:27:58.30 .net
クラスBの要件についてのテストを書いておけば
テスト通らなくなるだろ

113:デフォルトの名無しさん
13/11/25 01:33:38.72 .net
>>110
メソッド sum の実装はコンテナ(コレクション)クラスに属してて、
{1. 2. 3} sum でも同じメソッドをコールし、演算可能ところがミソかな。
Haskell や Scalaの型クラスとかだと可能なのだろうか?

114:デフォルトの名無しさん
13/11/25 01:35:19.64 .net
>>112
そりゃクラスBの要件のテストを書いておけば、
そのテストは通らなくなるよ。

でも今の問題は、クラスAのテストなんだよね。
クラスBを修正してもクラスBのモックは変わらない。
クラスBのモックを修正することを忘れれば
クラスAはテストに通ってしまう。

115:デフォルトの名無しさん
13/11/25 01:37:37.15 .net
>>114
忘れたお前の責任

116:デフォルトの名無しさん
13/11/25 01:40:28.72 .net
>>114
>そのテストは通らなくなるよ。
>でも今の問題は、クラスAのテストなんだよね。
要件のテスト通らないって事は変更できないってことだ
まさかテストを書き換えるなんて馬鹿なことはしないよな?

117:デフォルトの名無しさん
13/11/25 01:42:13.57 .net
1、テスト志向を徹底するためには、まずデバッガを捨て去らねばならない

118:デフォルトの名無しさん
13/11/25 01:42:43.12 .net
つまりダックタイピングの限界ってことだね。
本物とモックで同じインターフェースを使っていないから
インターフェースが変わっても気づかない。

119:デフォルトの名無しさん
13/11/25 01:43:38.49 .net
余程のばかじゃない限り気付くだろ

120:デフォルトの名無しさん
13/11/25 01:44:21.22 .net
>>116
いやさ、変更するのはクラスBだよ?

クラスAと(変更前の)クラスBのモックは
変更する必要ないじゃん?

テストを書き換えるなんて馬鹿なことはしないんだからさ。

121:デフォルトの名無しさん
13/11/25 01:45:06.75 .net
>>119
納期が迫っているときは、その馬鹿でも
しないようなことをしてしまうんだよ。
人間はミスをするという前提にたとうぜ?

122:デフォルトの名無しさん
13/11/25 01:45:08.03 .net
Bの要件を満たさないBを作る事がダメだと言ってるんだが
伝わってるか?

123:デフォルトの名無しさん
13/11/25 01:46:07.78 .net
>>120
なら問題ないだろ
変更しても要件のテストに通らなければそれはクラスBではない

124:デフォルトの名無しさん
13/11/25 01:46:40.20 .net
>>122
クラスBとクラスBのモックは
別のものだってわかってる?
今はクラスBの話はしてないの。

クラスAの単体テストの話。
クラスAから使うのはクラスBのモックであり
クラスBはでてこない。

125:デフォルトの名無しさん
13/11/25 01:47:48.10 .net
>>124
クラスBのモックは当然クラスBの要件を満たしているんだろ?
何の問題があるんだよ

126:デフォルトの名無しさん
13/11/25 01:50:23.40 .net
クラスAのテストは通る
クラスBのテストも通る。

だけど、組み合わせた場合
動かないってことがあるわけだよね。

組み合わせた時インターフェースが
一致していないことを
どうやって知ればいいの?

127:デフォルトの名無しさん
13/11/25 01:51:08.32 .net
何を言ってるんだか理解できないんだが・・

128:デフォルトの名無しさん
13/11/25 01:54:39.05 .net
>>125
え? まさか、
クラスBのモックを作ったら、
クラスBのモックもテスト書くの?

いや多分逆だな。
クラスBのテストを書いて、
そのテストを通るようにクラスBのモックを
作るんだね?

クラスBがないからクラスBのモックを書くのに、
クラスAのテストをするために、クラスBのテストを書くんだ。
で、テストを通るようにクラスBのモックを実装するんだ。


動的言語ってすごい二度手間・・・

129:デフォルトの名無しさん
13/11/25 01:54:44.66 .net
まあ静的型でも変更を検出出来るのはメソッドのシグネチャの変更程度であって振る舞いの
変更はやはりモックを見つけ出して振る舞いを書き換える必要はあるかな。

130:デフォルトの名無しさん
13/11/25 02:00:38.57 .net
>>127

>>129のようにわかってる人がいるから十分だよ。
わからない人は脱落してね。

>>129
その通りなんだけどつまりこういうことでしょ?

シグネチャの変更  静的:わかる   動的:分からない
振る舞いの変更   静的:分からない 動的:分からない

明らかにメリットがあるよね。
さらに静的ならコードの参照箇所の追尾もしやすいし。

131:デフォルトの名無しさん
13/11/25 02:00:43.17 .net
>>128
そりゃモックオブジェクトだろうが
クラスBというインターフェースを満たさないなら契約違反だろ
何言ってんだ?

132:デフォルトの名無しさん
13/11/25 02:02:24.81 .net
よくテストがあれば大丈夫というが
テストがあってもダメな例があるということさ

テストに完璧は存在しない。
モアベターなのはなにか?で
考えるべきだ。

133:デフォルトの名無しさん
13/11/25 02:03:51.92 .net
そりゃ型注釈がそのテストの代替だろ
もったいぶってないで最初からそう言えよ

134:デフォルトの名無しさん
13/11/25 02:08:28.63 .net
型注釈ってようするに
静的型のことだから

135:デフォルトの名無しさん
13/11/25 02:09:58.40 .net
動的型でも分かるシグニチャの変更と言ったら、
関数/メソッド名、引数の数、キーワード引数のキーワード、くらいかな?

136:デフォルトの名無しさん
13/11/25 02:11:53.91 .net
テストに完璧は存在しない。
いやあるかも知れないが、それは途方もなく大変なものだ。
テストで重要なのはいかに質を保ったまま
テストの量を減らせるか。
その第一歩が静的型なんだ。

137:デフォルトの名無しさん
13/11/25 02:12:32.36 .net
>>134
だからその静的型の事を言ってんだよ

138:デフォルトの名無しさん
13/11/25 02:15:01.69 .net
JSerはCerの10倍速いから大丈夫

139:デフォルトの名無しさん
13/11/25 02:16:24.81 .net
erつけりゃいいと思ってやがる。日本人ならJS屋、C屋だろが。

140:デフォルトの名無しさん
13/11/25 02:18:50.99 .net
JSドカタ

141:デフォルトの名無しさん
13/11/25 02:22:33.02 .net
それ労働基準法違反だろ

142:デフォルトの名無しさん
13/11/25 02:23:39.69 .net
JSianはCianの10倍速いから大丈夫

143:デフォルトの名無しさん
13/11/25 02:28:54.59 .net
JSの大事な部分に静的ないたずらを

144:デフォルトの名無しさん
13/11/25 02:32:48.69 .net
結局動的でテスト志向に徹するのが最良って結論だったな
いつもこの結論なのに何度も議論する意味あるのか?
無限ループに陥ってる可能性があるな
スレもテストするべきだな

145:デフォルトの名無しさん
13/11/25 02:53:43.18 .net
JSはCの2倍速いこともあるが
まあ、ここは10倍速いといっておこう

146:デフォルトの名無しさん
13/11/25 02:54:18.88 .net
>>144
お前が必死なのがよくわかった。

147:デフォルトの名無しさん
13/11/25 02:57:02.26 .net
>>144
反論してた方がむしろ静的厨というオチだけどな

148:デフォルトの名無しさん
13/11/25 02:58:03.82 .net
(^q^)アウアウアー

149:デフォルトの名無しさん
13/11/25 02:58:05.28 .net
結局テストのことを考えたら静的のほうがいいべ
動的や面倒でたまらん。
そのくせ効果が少ない。

150:デフォルトの名無しさん
13/11/25 03:00:27.73 .net
動的言語だと実装は仕様変更に強いがテストは仕様変更に弱い?

というかテストまで仕様変更に寛容だとテストとしての目的を果たさないと言うことか。

151:デフォルトの名無しさん
13/11/25 03:02:59.94 .net
静的と動的の間の言語が最強

152:デフォルトの名無しさん
13/11/25 03:09:41.81 .net
モックにテストを書こうと思うのですが
どうやって書けばいいのでしょうか?

153:デフォルトの名無しさん
13/11/25 03:10:41.98 .net
動的言語が仕様変更に強いというのは
幻想だと思うよ。

154:デフォルトの名無しさん
13/11/25 03:10:42.26 .net
>>151
オプショナルな型付けで場面に応じて静的型検証を強制できる言語が最強ということだな。

なんだGroovyじゃないか。

155:デフォルトの名無しさん
13/11/25 03:14:18.05 .net
>>152
モックを使ったテストの意味を理解してないなら依存性バリバリでも
愚直にテストコード書いた方がまし

使い方という意味ならいくらでもドキュメント出てくるでしょう

156:デフォルトの名無しさん
13/11/25 03:14:43.77 .net
テスト志向の徹底
これがすべて
まずデバッガを排除するべし
デバッガを見つけたら廃棄
それがソフトであってもハードであっても人間であっても
デバッガと名のつくものはすべて廃棄

157:デフォルトの名無しさん
13/11/25 03:15:45.63 .net
そしてGDBに戦いを挑む>>156だった。

最終話 デバッガには勝てなかったよ

158:デフォルトの名無しさん
13/11/25 03:17:17.14 .net
>>152
モックに対してテストを書くと、

モックのテストと
実物のテストの二つに分かれてしまう。
それは避けないといけない。

だからテストコードにはクラス名を渡せるように作る。

159:デフォルトの名無しさん
13/11/25 03:17:35.61 .net
インド系アメリカ人のデバッガさんはどうしましょう

160:デフォルトの名無しさん
13/11/25 03:18:40.27 .net
第一話 GNU帝国の進撃の巨人

161:デフォルトの名無しさん
13/11/25 03:18:58.41 .net
モックを使ったテストでは
テスト対象コードとそのテストの他に
モックのテストが必要になる。

162:デフォルトの名無しさん
13/11/25 03:19:40.14 .net
>>159
当然廃棄
透明ゴミ袋でお願いします
生ごみだから

163:デフォルトの名無しさん
13/11/25 03:21:14.69 .net
テストはバグを見つけるためのものであり
デバッガとは見つけたバグを修正するもの。

この違いがわかっているのなら、
テストはデバッガの代わりにならないというのもわかるはず。

164:デフォルトの名無しさん
13/11/25 03:22:00.08 .net
やべえ
眠くならない
まじやべえ
月曜日寝ないと一週間眠れないパターンに入る
これはやべえ

165:デフォルトの名無しさん
13/11/25 03:24:19.34 .net
俺は深夜メンテナンスがあるから
逆に起きてないといかんのだよ。
寝れないなら俺に付き合えw

166:デフォルトの名無しさん
13/11/25 03:38:09.75 .net
ウホ?

167:デフォルトの名無しさん
13/11/25 15:10:38.86 .net
動的言語勢としてもJSerは隔離したほうがいいと思った
やつら純粋に頭が悪すぎる

168:デフォルトの名無しさん
13/11/25 15:17:41.51 .net
>>144
> 結局動的でテスト志向に徹するのが最良

どうせテストを書くのなら、最初からコードに一部埋め込んでおけば漏れもないし確実だろうが。
動的言語信者の言い分をつきつめると、結局静的言語に戻ってくる
やつら計算機科学の成果とかまるっきり無視してるからなw

ま、確かにこれからは動的言語だって時代はあったよな。このグラフの2005年くらいまでか?
URLリンク(www.tiobe.com)
特に阿呆なJSerども、俺らイケてるって調子に乗ってな。

でも今は最早そんなトレンドではないのでは明らか。揺り戻しが発生してるでしょ。





失敗したんだよお前ら。

169:デフォルトの名無しさん
13/11/25 19:52:59.61 .net
型は自転車でいえば補助輪のようなもの
プログラム初心者は型がないとプログラムを書けない
一度、型なしでプログラムを書けるようになったら
もう型なんて必要ない

170:デフォルトの名無しさん
13/11/25 20:06:10.43 .net
保育園児VS小学生 ktkr

171:デフォルトの名無しさん
13/11/25 20:34:02.76 .net
>>169
あほ。
型付け制限はどうみても人間以外の機械側の都合。

172:デフォルトの名無しさん
13/11/25 20:37:57.99 .net
171だが。
>>1をいま読んだが。
静的型付け言語でなくともオプション指定で、代入で型が変更された時に警告やエラーを出すようにしたら発見可能だろ。
これは、静的型付け言語かどうかとは関係ないな。

173:デフォルトの名無しさん
13/11/25 20:38:03.76 .net
型はヘルメットとも言い換えられる
自称上級者が「鬱陶しいから」という理由で装備せずに重大な事故を引き起こす

174:デフォルトの名無しさん
13/11/25 21:19:15.41 .net
>>172
int a = 1;
a = foo(); // fooの戻り値は文字列

この場合に警告出してくれる動的型言語を紹介してください

175:デフォルトの名無しさん
13/11/25 21:21:18.17 .net
強い静的型付け

176:デフォルトの名無しさん
13/11/25 22:10:18.58 .net
動的がーとか言ってるやつとブレーキのない俺かっけーと言ってるピスト野郎とかぶるんだが気のせい?

177:デフォルトの名無しさん
13/11/25 22:23:59.92 .net
入学したら補助輪を外すのは世界の常識。
いつまでも補助輪つけてたらみっともないですよ?
ゆうくんも今日からお兄ちゃんなんだから補助輪外さないとね!

178:デフォルトの名無しさん
13/11/25 22:54:04.02 .net
>>172
> 静的型付け言語でなくともオプション指定で、代入で型が変更された時に警告やエラーを出すようにしたら発見可能だろ。

エラーだらけになるだろ、バカすぎ。

179:デフォルトの名無しさん
13/11/25 23:09:15.01 .net
デバッガを使う無能が一向に減らないのは静的のせいだったのか。
なるほどなるほど。

180:デフォルトの名無しさん
13/11/25 23:16:35.47 .net
なんでデバッガを嫌うの?

コボラーと同じ臭がするね。

181:デフォルトの名無しさん
13/11/25 23:20:16.00 .net
テストは予防接種
デバッガは応急措置

182:デフォルトの名無しさん
13/11/25 23:22:19.96 .net
インタプリタしか使ったことがなければデバッガが無意味に思えても仕方ない

183:デフォルトの名無しさん
13/11/25 23:25:19.98 .net
>>181
なるほど!

デバッガを嫌っている人は
デバッガを勘違いしているということがわかった。

デバッガはその名の通り、バグを修正するもの。
テストで見つかったバグ。そのバグを直すまでに使う道具だ。

184:デフォルトの名無しさん
13/11/25 23:28:43.02 .net
デバッガで応急処置をするとかよくわからんわw
応急処置をするにしても、テキストエディタでコード書くことで
応急処置するんだろ。デバッガで応急処置?どうやって?w

185:デフォルトの名無しさん
13/11/25 23:35:33.58 .net
予防接種の方はよくわかるのかよw

186:デフォルトの名無しさん
13/11/25 23:57:58.45 .net
ごく小規模なプログラム、個人での開発、保守不要の作り捨てのプログラムの場合は動的な方がよい

187:デフォルトの名無しさん
13/11/26 00:03:17.45 .net
ネットワーク分散処理、アジャイル、ハイパフォーマンスの場合は動的のほうが良い。
初心者の学習用途は静的のほうが簡単。

188:デフォルトの名無しさん
13/11/26 00:06:01.55 .net
>>187のレスには突込みどころがいくつもあるけど突っ込みません

189:デフォルトの名無しさん
13/11/26 00:24:24.78 .net
突っ込みどころが多すぎて突っ込ませない手法は教祖がよくつかう手法。

190:デフォルトの名無しさん
13/11/26 00:44:53.86 .net
突っ込んでくれないならもう書き込みません!

191:デフォルトの名無しさん
13/11/26 00:57:59.17 .net
>>187
JSはCの10倍速くて初心者にも優しいよ

192:デフォルトの名無しさん
13/11/26 01:05:19.80 .net
さすがに10倍はない。
大きすぎてネタとばれるレベルw

193:デフォルトの名無しさん
13/11/26 01:46:37.38 .net
【動的言語の薦め】

Perlが最初MBAの学生によって作られたことはよく知られています。
欧米の金融工学の教科書には問題をPerlで検証しなさいと良く書かれています。
実際、マンハッタンエリートの机には必ずPerlのパッケージが置いてあります。
金融、経営、経済といった分野ではPerlが必要不可欠な個人ツールとなっているのです。

最適化分析ツールとして容易でありながら絶大な威力を持つソルバー、
計算結果を視覚化するグラフツール、これらの操作を簡単に記録して再利用する
マクロの記録など必要なものはすべてそろっています。

彼らはマンハッタンのエリートたちはプログラミングの専門家ではありません。
はたして、静的言語でこのようなことが可能だったでしょうか?
ひとえに動的言語のパウアーによるものだったのです。

194:デフォルトの名無しさん
13/11/26 01:53:31.35 .net
Perlの重要な機能であるウェブクエリも忘れてはいけません。
これは、定期的に更新されるウェブページの表から動的に情報を取得する
容易な方法です。
実際にウェブページを閲覧しながら必要な表を選択するだけで情報を
取り込めるのです。
Perlのシートを開くたびに更新された情報を取得することも可能です。
もちろん、取得した情報の分析や資格化はPerlの得意とするところです。
マンハッタンのエリートたちはこういったツールを使いこなし、経営に
役立てているのです。

繰り返しになりますが、静的言語でこのようなことが実現したでしょうか?

195:デフォルトの名無しさん
13/11/26 01:57:38.03 .net
>>194
俺はjavaでやってるぞw

196:デフォルトの名無しさん
13/11/26 02:08:50.96 .net
日本でも投資顧問会社が「弊社では20世紀より伝わる信頼と実績のPerl
プログラムによってお客様の利益を保証します」ってやってるね。

197:デフォルトの名無しさん
13/11/26 04:26:43.22 .net
そういう特定分野で使われている言語はその分野の実績のあるソフトウェアスタックが揃っていて
ユーザが多くノウハウも蓄積しているから使われているのであって動的静的は案外関係ないと思う。

今仕事でやってるデータインテンシィブな分散処理の分野ではJava強いけど別にこれを「動的言語
でこのようなことが実現したでしょうか? 」とか言う気にはあまりならん。
基本的にはHadoopやLuceneがJavaで書かれているから、その上に乗っかるシステムも素直にJavaで
書かれているという事情が大きい。でも現実問題としてこの点は言語が動的静的云々の差などより
よほど大きいわけで。

「小規模なプログラム、個人での開発、保守不要の作り捨てのプログラムの場合は動的な方がよい」
ということでは無くて、単に効率考えずに言語第一で選択できる場面なんてその程度しか無いだけ。

198:デフォルトの名無しさん
13/11/26 06:09:57.00 .net
>>196
金融商品取引法は、損失負担の約束や利益保証を禁止しており、これらを伴う勧誘も当然に禁止しています。

199:デフォルトの名無しさん
13/11/26 06:19:09.85 .net
>>176
君、よく周囲の人達から「きみ、頭悪いね」と言われてるだろ。

200:デフォルトの名無しさん
13/11/26 06:20:59.47 .net
>>195
劣化コピーでドヤるのって楽しい?

201:デフォルトの名無しさん
13/11/26 06:56:30.22 .net
>>196
これはひどい

202:デフォルトの名無しさん
13/11/26 07:06:42.04 .net
>>196
その利益保証しているという投資顧問の社名を教えてくれ

203:デフォルトの名無しさん
13/11/26 08:51:33.31 .net
ちなみに>>193は全部つくり話ですw

204:デフォルトの名無しさん
13/11/26 09:40:40.95 .net
>>199
具体的な反論なくただ堕とすだけの奴は無能だってじっちゃが言ってた(´・ω・`)

205:デフォルトの名無しさん
13/11/26 10:39:11.85 .net
>>204 つまり、おまえは無能ってことだなw

206:デフォルトの名無しさん
13/11/26 10:50:15.40 .net
>>205
ウンウン、そういう風に具体的なこと言えないで堕とすだけなんだねー。わかります(´・ω・`)

207:デフォルトの名無しさん
13/11/26 11:31:18.48 .net
>>206
205は204に対する具体的な反論になっていることも理解できないのか
なんて可哀想なバカなんだろうw

208:デフォルトの名無しさん
13/11/26 11:32:29.63 .net
>>204
そんな風に、具体的な反論もできずにじっちゃが言ってたとかほざいている
無能な孫をみて、さぞやじっちゃは悲しんでいるだろうよ

どうしてこんなバカな孫ができてしまったのかってねw

209:デフォルトの名無しさん
13/11/26 12:03:36.79 .net
>>207-208
妄想が止まらないJSerか?涙拭けよwww

210:デフォルトの名無しさん
13/11/26 16:23:19.76 .net
>>209 あいかわらず妄想の塊だなw お大事に。ww

211:デフォルトの名無しさん
13/11/26 19:05:03.75 .net
>>203
作り話じゃありません。
ExcelをPerlに変えてみただけです。

212:デフォルトの名無しさん
13/11/26 19:31:05.12 .net
>>210
いやいや妄想力の強さではJSerにはかないませんよw

213:デフォルトの名無しさん
13/11/26 20:33:15.36 .net
負けを認めた瞬間から君は負け犬になったのです。
一生JSにかなわないのです。

214:デフォルトの名無しさん
13/11/26 20:42:13.76 .net
ま、負けましたブヒー

215:デフォルトの名無しさん
13/11/26 21:51:26.20 .net
板住民の総意としてJS最強を認めたいと思います
チャンピオン JSer には地球代表として銀河系遠征へ旅立っていただく予定です

216:デフォルトの名無しさん
13/11/26 23:04:58.95 .net
>>215
おまえがJSのアンチだってことは
皆気づいていると思うよ。
いくら言い訳してもね。

217:デフォルトの名無しさん
13/11/26 23:45:45.86 .net
>>215
あんちだったん?
Cの二倍速いのになんで?

218:デフォルトの名無しさん
13/11/26 23:50:25.33 .net
宇宙人からメッセージが一件とどいてます。

(^q^)アウアウアー

219:デフォルトの名無しさん
13/11/27 00:02:23.10 .net
>>217
2倍速いっていうのはデマだよ。
ごくごく一部の例外的事象を
大げさに言ってるだけ。

220:デフォルトの名無しさん
13/11/27 00:09:42.19 .net
デマじゃないよ。
ほんとに速いよ。
やってみたらすぐわかるのになんでやらないの?

221:デフォルトの名無しさん
13/11/27 00:11:36.30 .net
いや、簡単なサンプル作ったけど
速くならなかった。

速くなるというサンプルを書いてみてくれ。
速くなるという証拠がないんだ。
どうしようもないじゃないか?w

222:デフォルトの名無しさん
13/11/27 00:11:50.78 .net
JSの良いところは速度だけではありません。
その高度に統合された美しい理論体系が優れているのです。
神のデザインとすら言われています。

223:デフォルトの名無しさん
13/11/27 00:17:02.57 .net
そういうのは要らん
速くなるサンプルをくれ

224:デフォルトの名無しさん
13/11/27 00:32:54.01 .net
早いのは単にcのコードが悪くて、
jsの最適化の方が優れてただけだろ?
ブラウザ戦争の産物だな
clangみたいに最適化が進めば差はたいしてなくなる

225:デフォルトの名無しさん
13/11/27 00:36:33.30 .net
JSが美しいとか言うやつの美的感覚ってw
それにJSがCより早いって(爆笑)比較コードさらしてね
まともなコードで比較したらそんなことあり得ないから

226:デフォルトの名無しさん
13/11/27 00:36:36.13 .net
ただの誤訳だって

227:デフォルトの名無しさん
13/11/27 01:53:09.78 .net
【最も美しい言語 - 01スクリプト言語】

・0と1、二つの文字だけで書くことができる新しい種類の言語です
・現在の実装はトランスレータです
・コンパイラ、実行環境はお好きなものを選べます

【現在の実装】
・0と1だけから成り立つ入力文字列より8バイト消費し、それぞれ0のビット
 1のビットとして一バイトにおさめます
・選択されたコンパイラや実行環境の入力としてバイトを送ります
・文字列の終端に達していない場合、最初のステップに戻り、それ以外の場合
 終了します

228:デフォルトの名無しさん
13/11/27 07:00:45.74 .net
wとWで書けるのもあるしな

229:デフォルトの名無しさん
13/11/27 07:04:02.82 .net
(^q^)アウウウアウアアアウアウウア-

230:デフォルトの名無しさん
13/11/27 09:25:08.74 .net
↓美しい言語家

231:デフォルトの名無しさん
13/11/27 10:59:28.39 .net
>>220
そんな素晴らしいものでなんで全てのプラットホームで使えるようになってないのよ。お前ら信者の布教具合がたるんでるんじゃねえの?

232:デフォルトの名無しさん
13/11/27 11:10:22.91 .net
JavaScriptの関数読んだけど難しすぎてわけがわからん。
誰かこの関数の使い方を教えてくれないか?
どういう返り値を期待してどういう引数を渡せばいいのか。
URLリンク(github.com)

233:デフォルトの名無しさん
13/11/27 11:24:57.45 .net
>>232
糞JSerが頑なに正解だと言っていたbulkの再代入が直してあるな
まあ当然だよなあ

234:デフォルトの名無しさん
13/11/27 11:57:12.38 .net
型システムの起源って何の言語?

235:デフォルトの名無しさん
13/11/27 12:08:11.75 .net
型システムの定義によって答えは変わる

236:デフォルトの名無しさん
13/11/27 15:37:11.26 .net
だが静的脳の達人は質問者の追加入力を待ってノロノロ答えを計算するなどということはない

237:デフォルトの名無しさん
13/11/27 15:42:48.31 .net
>>234
データ型という概念そのものは、高級言語の登場に伴って自然発生的に生まれた
たとえば Fortran には整数型/実数型といった単純型や配列という複合型がある
また PL/I ではレコードやポインタといったデータ型が追加され、
Pascal でデータ型の体系が整理された後、モジュールや抽象データ型を経て
現在のオブジェクト指向が主流な現在に到る
したがって、型システムの起源として言語を特定する事に意味は無い

この自然発生的な型システムに遅れて、形式的な型システムが誕生した
そしてこれが最初に実装された言語が、ある定理証明器の記述言語として設計された ML になる
MLはその後、汎用的なプログラミング言語として開発が世界中で活発化し、
Standard ML(SML) と Objective-Caml(OCaml) に分かれて現在に到る
また ML は純粋関数型言語である Miranda にも強い影響与え、その後継が現在の Haskell
言い換えると、形式的な型システムの起源は ML と言える
ML については、Wikipedia にも簡単な解説があるので、そちらも参照のこと

238:デフォルトの名無しさん
13/11/27 16:01:41.85 .net
このスレ勉強になるわ

239:デフォルトの名無しさん
13/11/27 16:16:31.63 .net
見事だ

240:デフォルトの名無しさん
13/11/27 16:46:05.27 .net
自演臭すぎる

241:デフォルトの名無しさん
13/11/27 18:36:30.31 .net
JSはCの二倍速い。

242:デフォルトの名無しさん
13/11/27 19:40:41.78 .net
そんなわけあるか。CのがJSの二倍遅い。

243:デフォルトの名無しさん
13/11/27 19:59:49.13 .net
JSも速いけど今の流行はPOMですよ。

244:デフォルトの名無しさん
13/11/28 01:36:51.13 .net
でもさ、やっぱりさ、Java書いた後、PHPでコード書くと
この糞言語って思わない??
少なくともこの比較だったらやっぱりJavaの方が色々楽だよね?

よく使うので言うとMapあるし、型エラー、メソッド有る無しのエラー、
変数定義のエラーなどなどEclipseの恩恵含めていいとこあるし
テストもクラス内の特定メソッド指定して実行できるし、
カバレッジ出るのも早いし、メトリクス測定も早いし

PHPでも出来るもの、代用品はもちろんあるけど面倒いし遅いし
曖昧な関数多いし

PHPでやるメリットってお遊びアプリ作る程度に
留めないと無いような気もしてくる

245:デフォルトの名無しさん
13/11/28 04:24:55.41 .net
JavsScriptで関連クラスやユーティリティ群を束ねたモジュールを書く必要があるので
昨今はどういう体裁で書くのがよいのか調べるも、AMDとかCommonJSとか色々書き方の
流儀があるみたいで唖然とした。ベストな書き方はいったい何なの。

246:デフォルトの名無しさん
13/11/28 04:34:28.76 .net
ベストな書き方は、自分の作ったライブラリ部分と
AMDなどの書き方をするべき所を明確に分離することだ。
そうすれば、簡単なプロキシコードでどのようなものにも対応できる。

247:デフォルトの名無しさん
13/11/28 05:13:04.47 .net
モジュール一つ書くのに色々書き方がある上に要プロキシコードとか生産性以前の問題。
きっとその「簡単なプロキシコードでどのようなものにも対応できる」自分の作った
ライブラリ部分の書き方も色々あるんでしょ。
単純にメンテナンス性が悪くなる。

248:デフォルトの名無しさん
13/11/28 09:14:39.14 .net
>>247
プロキシコードでどんな用も対応できるというのは、
結局のところ、特定の書き方に依存しないってことだ。

特定の書き方に依存させるなというだけの話。
特定の書き方を考慮せずに普通に書けばいい。

だからメンテナンス性は高くなる。

249:デフォルトの名無しさん
13/11/28 16:24:33.10 .net
プロキシーコードが必要な時点で変だと疑わないと。

250:デフォルトの名無しさん
13/11/28 17:36:38.45 .net
プロキシじゃなくてアダプターじゃね?

251:デフォルトの名無しさん
13/11/28 20:17:17.12 .net
JSはどんな書き方してもCの二倍速いよ。

252:デフォルトの名無しさん
13/11/28 20:58:35.53 .net
>>251
わーすごいですねー(´・_・`)

253:デフォルトの名無しさん
13/11/28 21:10:24.35 .net
>>252さんが仰るようにJSはすごいんですよ。

254:デフォルトの名無しさん
13/11/28 21:14:09.66 .net
>>252も認めるJSの実力】

剃り残しなし!

255:デフォルトの名無しさん
13/11/28 21:51:50.58 .net
あの、馬鹿にするのやめてもらえますか?
C言語はちゃんと速度出ますよ
JSが速すぎるだけなんです

256:デフォルトの名無しさん
13/11/28 21:54:32.51 .net
確かにCはJavaの100倍速いです。

257:デフォルトの名無しさん
13/11/28 21:59:35.69 .net
ところでApacheってなんであんなに遅いの?

258:デフォルトの名無しさん
13/11/28 22:59:41.26 .net
>>257
遅くねえよ
ちょっと個々の設定ファイルの解析と適用に時間かかったり
アクセス元のホストを逆引きしたり
CGIを丁寧に毎回forkしたりしてるだけだよ

259:デフォルトの名無しさん
13/11/29 01:04:13.53 .net
ApacheはCの100倍遅い。

260:デフォルトの名無しさん
13/11/29 01:33:37.30 .net
JSerがそこらじゅうに転移してるな。まるでヘルペスウイルスだ。

261:デフォルトの名無しさん
13/11/29 08:15:31.77 .net
JavaScriptは用途が広がる一方で仕様拡張が追いついていない印象だな。
モジュールのインポート云々が好例。JSerは手作りできるから言語仕様としては不要と
強弁するけど、普通の開発者は単に当初の想定外の用途故の機能不足と解釈するよな。

262:デフォルトの名無しさん
13/11/29 10:19:17.30 .net
>>1
"人間がやっていたことを、コンピュータにやらせる。"

人間がやらずに済んでいたことをわざわざコンビュータにやらせる。

263:デフォルトの名無しさん
13/11/29 16:23:48.03 .net
やらずに済むと錯覚するのは単に未熟だからです

264:自故レス
13/11/29 17:10:11.89 .net
>>263
誰が偽りの説教をしろと?

265:デフォルトの名無しさん
13/11/29 23:51:28.82 .net
zapzapzap

266:デフォルトの名無しさん
13/11/30 00:29:00.03 .net
>>261
もうすぐES6が出るじゃん

267:デフォルトの名無しさん
13/11/30 01:36:44.94 .net
>>266
ES6でインポート関連機能がサポートされるかよく知らないのだが、IE 含めて普通に
その機能を使えるようになるのっていつ頃?

268:デフォルトの名無しさん
13/11/30 08:34:02.73 .net
>>267
IEは関係ないだろ
バカかこいつ

269:デフォルトの名無しさん
13/11/30 08:57:00.55 .net
実行環境として普通に関係あるでしょ。
Androidの分断化問題と一緒。いくら規格が進んだところでランタイムの更新がある程度
進まないとプロダクションに投入できない。

270:デフォルトの名無しさん
13/11/30 09:16:25.39 .net
>>268
流石にこの発言ないわー

271:デフォルトの名無しさん
13/11/30 09:30:11.13 .net
>>269-270
なんで商用が前提になってんの?

272:デフォルトの名無しさん
13/11/30 09:39:42.32 .net
つまり商用の人はお断りですよと。

商用だろうが非営利だろうが趣味だろうが、ブラウザ上でいろいろな人に使ってもらうので
あればブラウザの対応見込みは気にすると思うけど。

273:デフォルトの名無しさん
13/11/30 09:51:12.92 .net
>>271
趣味の発言前提にしてんの?

274:デフォルトの名無しさん
13/11/30 09:54:10.84 .net
>>272
なんでWebアプリ前提なの?

>>273
「商用では互換性が重要」って知らんがな。

「Javaで互換性重要だから7, 8の機能使いません」

知らんがな

これと同じ

275:デフォルトの名無しさん
13/11/30 10:20:06.04 .net
>>274
>なんでWebアプリ前提なの?

Webアプリを開発したい、する必要があるからだけど?
Webアプリ開発はJavaScriptの利用目的の中でも大きな分野だと思うけど、違うの?

JavaScriptは手段であって目的では無いのだが。
いくら新しい規格が出たところで目的の用途に使えなければ意味ないよ。

276:デフォルトの名無しさん
13/11/30 10:20:52.88 .net
「PerlはCGIで使うものだ」ってのと同じ臭いがする

277:デフォルトの名無しさん
13/11/30 10:36:44.84 .net
CGIをつくることを目的にしている人とっては使いたい機能がPerlにあったところで
CGIで使えなければ意味が無いだろうね。

・・・で使うものだ、という話じゃないよ。
・・・をしたいのだが、どうよ、という話。目的が主。言語は従。

クライアントサイドのUI開発にES6を使うとして、どうよ。いつになったら使えるの?

278:デフォルトの名無しさん
13/11/30 11:06:25.56 .net
ていうか、ブラウザで動くという最大のメリットを除けば
JSなんて他言語に対して何のアドバンテージも無い

279:デフォルトの名無しさん
13/11/30 11:08:04.25 .net
>>278
スレタイ読めますか?
ブラウザで動くという以外の部分で静的型付け言語を上回ってるという話ですが

280:デフォルトの名無しさん
13/11/30 11:13:08.21 .net
どこが?
低能なプログラマの人数?

281:デフォルトの名無しさん
13/11/30 11:48:20.17 .net
使う人の妄想力でしょ。
JSは世界一だ。それを使う俺も世界一だって感じ?

282:デフォルトの名無しさん
13/11/30 11:58:58.78 .net
>>1
「コンピュータは間違わない」と言ったのはコンピュータではない

なぜ、コンピュータが言ってないことを人間が言うのか?

人間が言った方が早いからでしょ
本当は人間の方が効率が良いって知ってるんだろ

283:デフォルトの名無しさん
13/11/30 12:13:24.26 .net
>>282
意味不明。馬鹿なの?

284:デフォルトの名無しさん
13/11/30 12:28:21.89 .net
「神の見えざる手は間違わない」と言ったのは神ではない。
神が言ってないことを、人間が言う。

285:デフォルトの名無しさん
13/11/30 12:32:37.94 .net
>>282 みたいな意味不明な出力は
残念ながら静的型言語をもってしても除去することはできない

286:デフォルトの名無しさん
13/11/30 12:39:25.07 .net
意味不明って偉そうに言う事じゃないでしょ
なんで意味分かってない奴が意味分かってる奴より偉そうなの?反知性主義なの?

287:デフォルトの名無しさん
13/11/30 12:52:43.23 .net
>>282
むしろコンピューターがいったことってなんだよ

288:デフォルトの名無しさん
13/11/30 13:21:04.09 .net
>>287
>>265

289:デフォルトの名無しさん
13/11/30 13:21:50.67 .net
このように自分の誤りに対して寛容すぎる人々によって好まれるのが動的言語です

290:デフォルトの名無しさん
13/11/30 13:25:00.32 .net
>>282
コンピュータは間違わないと人間言った。

うん、そう人間が言ったんだよ。

コンピュータは間違わないで人間よりも早く
同じことを何度もやれる。

と人間が言ったけど

これ間違いじゃないけど、君、反論してないよね?

291:デフォルトの名無しさん
13/11/30 13:26:16.35 .net
>>284
むしろ「神の見えざる手は間違わない」と
神が言ったなんて誰が言ったんだ?

お前馬鹿じゃないのか?

292:デフォルトの名無しさん
13/11/30 13:41:07.23 .net
神が言ったから「神の見えざる手」なんだろ

293: ◆QZaw55cn4c
13/11/30 13:47:52.09 .net
アダム・スミスがいったんじゃなかったっけ

294:デフォルトの名無しさん
13/11/30 13:48:58.00 .net
アダム・スミスが「神の見えざる手」といったのは明らかなのにw
それを聞いて、神が言ったと勘違いするマヌケw

295:デフォルトの名無しさん
13/11/30 14:03:00.52 .net
「見えざる手」の持ち主は明記されていない

296:デフォルトの名無しさん
13/11/30 15:20:58.06 .net
持ち主オブステルスハンド

297:デフォルトの名無しさん
13/11/30 16:17:54.67 .net
静的型付け関数型言語を使ってみたけど
型検査が強力すぎて馴染めなかった

298:デフォルトの名無しさん
13/11/30 16:36:05.43 .net
型検査が強力で嫌な理由って何?

299:デフォルトの名無しさん
13/11/30 17:16:11.20 .net
小ミスで全体が死にしかもどこでコケてるかわからない状態
とエスパーしてみる

300:デフォルトの名無しさん
13/11/30 17:26:24.03 .net
あぁ、型がないとそうだろうね
実行するまで問題に気づかない。

301:デフォルトの名無しさん
13/11/30 17:34:49.02 .net
一行に含まれる情報が多すぎるとむつかしいんよ

302:デフォルトの名無しさん
13/11/30 18:03:21.03 .net
>>298
型検査が強力でも動的言語のインタプリタを実装できるしコンパイルできる
コンパイラは文句を言わない

でも動的言語はだめだと人間が言う
コンパイラが文句を言わなくても人間に認められないとだめだって人間が言うんだよ
誰もコンピュータを信じてない
コンピュータは間違えないなんて言うけど、誰も信じてないんだよ

303:デフォルトの名無しさん
13/11/30 18:06:52.77 .net
>>302
お前の妄想垂れ流すのやめたら?
意味ないしキモいだけだよ。

304:デフォルトの名無しさん
13/11/30 18:36:16.04 .net
>>298
型とか細けぇ事はいいから結果が早く欲しい時くらいかな

305:デフォルトの名無しさん
13/11/30 18:38:41.67 .net
静的言語のメリットとして入力補完などIDEの支援が受けやすいとは昔こそよく言われた
けれども今時のIDEだとその点のメリットは動的言語を扱う場合でも大差ないと思う。
今は動的言語であってもIDEが積極的にコード解析して、レキシカルに特定できる範囲で
正しいプロパティを色分けしたり型コメントを勝手につけたりする。
逆にこういうコード解析が出来ず色分け等されなかった部分は実際大抵ミスっている。

そうしたミスを直して、全体がコード解析されて色とりどりにデコレーションされた
書き上がったコードを見て一人満足するけれども、逆にあれ、こんなふうにコードの
大半が静的に解析してある程度検証できてしまうような場合、動的言語の出番って
何だろうね? とも思ってしまう。適当に型をつければそのまま静的言語でも動くような。

実際書かれているコードの多くは静的でも動的でもあまり大差ないのでは無いのか。
違いは言語の記法や機能、あとは関数型と手続き型というパラダイムの違いであって、
動的静的といった型付けの違いは案外些末なことでごく特定の場面でしか効いてこない
印象。

306:デフォルトの名無しさん
13/11/30 19:01:29.81 .net
> けれども今時のIDEだとその点のメリットは動的言語を扱う場合でも大差ないと思う。

いや、思うじゃなくて、実際に使ってみろって。
動的言語では、その仕組み的に不可能なんだよ。

実行するまで(補完するための情報が)わからない言語で
どうやっって補完するっていうんだ?

307:デフォルトの名無しさん
13/11/30 19:42:36.36 .net
分からない部分も在るが、分かる部分もある
で、意外と分かる部分が多い

308:デフォルトの名無しさん
13/11/30 19:48:19.35 .net
分かる部分=近くのコード
わからない部分=遠くのコード

これが逆ならいいんだけどねぇ。
どれだけ影響範囲が広いか調べる必要があるのに
その遠くのコードがわからないんじゃ意味ないよ。

309:デフォルトの名無しさん
13/11/30 19:52:11.11 .net
影響範囲を調べる必要が生じた時点で動的型を捨てよ

310:デフォルトの名無しさん
13/11/30 19:54:16.61 .net
引数にどんな型が渡されるかわからない言語とか怖くて使えない
C#やJavaで言えば常にObject型の引数が来てリフレクションでメソッド呼び出すようなもんでしょ

311:デフォルトの名無しさん
13/11/30 20:00:26.55 .net
>>308
全然違うよ、馬鹿すぎる

312:デフォルトの名無しさん
13/11/30 20:02:13.99 .net
ぜんぜん違うよ!

(じゃあ何が違うのだろう・・・)

ぜ、ぜんぜん違うんだよ!

(あぁ、答えられないのね)

313:デフォルトの名無しさん
13/11/30 20:14:59.40 .net
型が推論できるかとコードの近さとは関係ないよ
静的型付関数型言語で、遠い場所のコードは推論できないとか聞いた事ある?

314:デフォルトの名無しさん
13/11/30 20:20:38.49 .net
遠い場所のコードの型が推論できないのは
動的型付け言語の話でしょ。
静的なら当然遠くの場所でも型わかるさ。

315:デフォルトの名無しさん
13/11/30 20:22:52.62 .net
動的な機能を使えば遠くても推論できない
使わなければ遠くても推論できる

結論:近さは関係ない

316:デフォルトの名無しさん
13/11/30 20:23:56.27 .net
> 動的な機能を使えば遠くても推論できない

動的な機能を使えば近くても推論できない、の間違い

317:デフォルトの名無しさん
13/11/30 20:24:13.56 .net
> 静的型付関数型言語で、遠い場所のコードは推論できないとか聞いた事ある?

遠い場所が発生しないように、クラスのパブリックメソッドには
きちんと型を書かないといけないって話なら聞いたことあるな。
推論できるのは近くの場所だけだからね。

318:デフォルトの名無しさん
13/11/30 20:24:45.89 .net
A<B> x = y.foo(z.bar());

型情報で候補を絞り込むのは foo と bar だけ
A と B と y と z は型情報を使わずに補完
x は補完できない

319:デフォルトの名無しさん
13/11/30 20:26:08.49 .net
>>317
それってSMLとかOCamlとかHaskellにも当てはまるの?

320:デフォルトの名無しさん
13/11/30 20:26:18.94 .net
型推論って、静的型付け言語ならでわの
機能だって知ってるかな?

型がない言語では、推論したくても推論できない。
推論できるのは、そもそも型が存在するから。

321:デフォルトの名無しさん
13/11/30 20:28:39.63 .net
>>319
> それってSMLとかOCamlとかHaskellにも当てはまるの?
当てはまるんじゃね?

その言語の汎用ライブラリでも調べればわかるでしょ?
使い方を限定することが出来ないライブラリだと
そのシグネチャに型を書いていないと当然推論さえも出来ない。

322:デフォルトの名無しさん
13/11/30 20:29:21.51 .net
今書いた関数をその場で自分で呼び出すなら型は無くても良いよ。
ワンライナーとか掻き捨ての小さなスクリプトとかは断然動的型の方が書きやすい。

ただ他の人も使うものとか、あと今日はともかく明日の自分は他人と思っておいた
方が無難だから、今後再利用する可能性のあるものに関してははドキュメントを
書くし、それには引数の期待する型の情報も含まれるよね。となると、

/**
* @param str {String} an input
* @returns {Number} a nice output
**/
function func(str){ ... }



/**
* @param str an input
* @returns a nice output
**/
int func(String str){ ... }

にどれほどの違いがあるのかと。
逆にどうしても型情報を「つけたくない」(つけるのが面倒、では無く)場面というのは
案外限られるし、そういう場面では静的型でもJavaのObject渡しでリフレクションとか
Cで生ポインタ渡しでキャストとかそれなりに回避策もある。

だから結論としては静的には動的にも書けるGroovyは節操なくて便利だと。

323:デフォルトの名無しさん
13/11/30 20:30:22.11 .net
>>321
残念、当てはまりません

324:デフォルトの名無しさん
13/11/30 20:31:16.84 .net
>>322
いや、動的型付けは小さいものじゃないと
使いものにならないという言い方をしてくれよ。

小さいもので作りやすいとか言われても興味ないんだよね。
小さいものなら適当でも全体見渡せるからいいよ。

でも大きい物はどうなのさ?
こっちのほうが何倍も大変だ。

325:デフォルトの名無しさん
13/11/30 20:31:48.99 .net
>>323
そうか

で、説明はないんだね。

(やっぱりな苦笑)

326:デフォルトの名無しさん
13/11/30 20:32:36.69 .net
動的型で、コードの場所が遠いという理由で推論できない例をあげてみてよ

327:デフォルトの名無しさん
13/11/30 20:33:32.31 .net
>>326
JavaScriptでいえば、

function foo(a) {
  aが持ってるメソッドは? 型推論できない。
}

328:デフォルトの名無しさん
13/11/30 20:34:55.44 .net
>>325
OCamlはシグニチャ付けてコンパイル通るコードは、
シグニチャ無しでも型推論でコンパイル通るって話だよ

329:デフォルトの名無しさん
13/11/30 20:35:58.32 .net
>>328
それはシグニチャなしでも通るだけ。
型推論はしていない。型を捨ててるだけ。

330:デフォルトの名無しさん
13/11/30 20:36:20.71 .net
>>327
そのfooを呼び出してる側のコードも読み込んで
解析するのが普通なので、fooを使ってる側のコードも必要

331:デフォルトの名無しさん
13/11/30 20:36:51.82 .net
>>329
知らないのに絡むヤツだなぁ
OCamlが型捨てる訳ないだろ

332:デフォルトの名無しさん
13/11/30 20:39:39.32 .net
>>330
> fooを使ってる側のコードも必要
ほらな。遠くになったからわからなくなった。
近くじゃないとわからないから
その情報をほしいわけだろ。

333:デフォルトの名無しさん
13/11/30 20:40:02.31 .net
>>324
いや、だからちゃんと結論を読んでくださいって。
結局静的動的関係なく単にGroovy節操なくて良いよと言いたいだけなんでw

という冗談はともかく、結局動的でもメンテナンス可能な大きなものを書くには
型とか含めてゴリゴリドキュメントを書くし、トータルな手間としては結局静的
言語と大差なくなってくる。小さなもの相手には出来た手抜きは通用しない。

ただ動的言語でもきっちり手間をかけて書かれた大きなプロダクトはいくらでも
あると思う。

334:デフォルトの名無しさん
13/11/30 20:40:41.97 .net
>>330
> そのfooを呼び出してる側のコードも読み込んで
> 解析するのが普通なので、fooを使ってる側のコードも必要

fooを使っているかどうかは、
静的型付け言語ならコンピュータが判断してくれるよ?

動的型付けではできないよね。

335:デフォルトの名無しさん
13/11/30 20:42:23.74 .net
>>332
> ほらな。遠くになったからわからなくなった。

なんで遠くにあるコードも解析に使うって話からこの結論になるの?

336:デフォルトの名無しさん
13/11/30 20:43:49.21 .net
>>334
動的型だと、出来る場合と出来ない場合がある

337:デフォルトの名無しさん
13/11/30 20:48:30.69 .net
>>327
Javascriptって、次のような関数がある場合でも

function bar() { foo(1); }

fooの中でaのメソッドを補完できないほど
しょぼいIDEしか無いの?

338:デフォルトの名無しさん
13/11/30 20:54:53.89 .net
>>337
それに加えてfoo("hoge")みたいな呼び出しもあったらどう補完されるの?

339:デフォルトの名無しさん
13/11/30 20:56:40.84 .net
遠くにあるコードを解析する言語は、全体が完成するまで解析できない

つまり、全体が完成する前に実行できる言語があれば
静的に解析するより早い時期にデバッグできるんだよ

340:デフォルトの名無しさん
13/11/30 21:02:09.63 .net
静的な型付けの言語は別に型の推測に遠くのコードを解析する必要なんて無いけど。
そのコードを書いた時点で型が確定しているのだから当然。

341:デフォルトの名無しさん
13/11/30 21:02:55.68 .net
>>338
両方が共通に持ってるメソッドだけ補完するか、
どちらか一方が持ってるメソッドを補完するか、
好きな方を設定で選ぶ

342:デフォルトの名無しさん
13/11/30 21:08:55.09 .net
>>341
JSでそういう上等な補完を行ってくれるIDEってあれば知りたい。

動的言語のIDEの補完は影響範囲がローカルでレキシカルに型を特定できたり
ドキュメントに型情報がある場合はその型を、そうでない場合は諦めモードで
基本クラスやDOMやjQuery等のメジャーなAPIをずらずら並べるのが多い気がする。

343:デフォルトの名無しさん
13/11/30 21:11:09.53 .net
>>339
Haskell等でも、未完成の関数をundefinedにしておいて
未完成の状態で実行したりするらしいよ

344:デフォルトの名無しさん
13/11/30 21:24:41.50 .net
JSとLispの差にくらべてJavaとHaskellの差が大きすぎる
静的型付け言語は多様性が100倍

345:デフォルトの名無しさん
13/11/30 21:30:53.47 .net
JavaとHaskellの差は手続き型か純粋関数型かの違いだと思うけど。
動的静的、関係なくない?

346:デフォルトの名無しさん
13/11/30 21:48:34.09 .net
Javaはオブジェクト指向です

347:デフォルトの名無しさん
13/12/01 00:13:53.45 .net
>>343
するかボケ
評価の順序試す時ぐらいだろ

348:デフォルトの名無しさん
13/12/01 01:11:10.71 .net
>>322みたいにドキュメントを用意して引数の型を丁寧に書くなら型を動的にするメリットがない
じゃあドキュメントを用意しない場合はどうか。

function func(attr){ ... }

int func(File.Attributes attr){ ... }

こんな関数があったら前者は怖くて使えないよね。
何を渡していいのかわからない。何が渡されるのかわからない。
後者なら型情報が全てを物語ってる

349:デフォルトの名無しさん
13/12/01 01:13:33.60 .net
>>348
実装見たらええやん。3行程度だし。

350:デフォルトの名無しさん
13/12/01 01:19:41.54 .net
>>349
補完そのものを全否定かい

351:デフォルトの名無しさん
13/12/01 01:19:44.84 .net
>>349
実装見ても理解できる気がしない
URLリンク(github.com)

352:デフォルトの名無しさん
13/12/01 01:24:07.19 .net
動的型付け言語を好む動的人間と静的型付け言語を好む静的人間とが居るかもしれない。

353:デフォルトの名無しさん
13/12/01 01:25:22.24 .net
>>349
実装見ようとしたのですがファイル名末尾がmin.jsでファイルの中身をのぞいても
全部一行にかたまっていて何が何だがよくわかりません。

354:デフォルトの名無しさん
13/12/01 01:31:46.41 .net
>>352
まあでもどちらも比較的変種で普通種は動的言語も静的言語も両方使うと思う。

355:デフォルトの名無しさん
13/12/01 01:47:08.21 .net
>>348
全くそのとおりだな。

型というのは、コンパイラと人間の両方が
理解して処理可能なコメントだと思えばいい。

短いコードならコメントなしでもいいが
規模が大きくなるにつれて、コメントがあるといいよ。
しかもそれが、早くて正確なコンパイラが理解可能なコメントなら
矛盾を指摘してくれたり、コメントをもとに適切な
アドバイスをしてくれるんだよ。

356:デフォルトの名無しさん
13/12/01 02:05:12.90 .net
型とコメントは別のものだと思うんですよね。

357:デフォルトの名無しさん
13/12/01 02:12:47.43 .net
型に関してもコメントを残すなら書く手間は動的も静的もそう変わらんということ。

358:デフォルトの名無しさん
13/12/01 02:15:02.72 .net
別のものだと思うんですよね。

359:デフォルトの名無しさん
13/12/01 02:18:36.37 .net
別なんじゃない。
静的型付け言語の型情報にはコメント的な御利益もあるというだけであって。

360:デフォルトの名無しさん
13/12/01 02:19:35.15 .net
>>356
コメントがなくてもわかるような
コードを書けってきかない?

型を含めたコード全てが
コメントのように分かりやすくあるべきなんだよ。

コードに必要な情報を埋め込められる言語
ようするに型もその情報の一つなわけだけど、
そういう言語だとコードが分かりやすくなるんだよ。

(コンパイラが理解できない)コメントは
コードに情報を埋められない言語の逃げでしかない。

361:デフォルトの名無しさん
13/12/01 02:22:12.37 .net
コメントにはなぜそうしたのか?という理由を書く
コードにはそうなっているという事実を書く。

型は、そうした理由ではなく事実。
この変数・引数には○○型を採用しているという事実。
事実だからコードで書く。

○○型を採用した理由を書く必要があるならば
それをコメントに書く。

362:デフォルトの名無しさん
13/12/01 02:55:44.19 .net
他の動的言語はともかくJSerはツンデレだからね。

変数スコープがウンコと言われてそんなことないもん! と強がる一方でletを導入したり
辞書型はオブジェクトリテラルで十分なんだからねっ! と言いながらMapを準備したり
functionぐらい面倒くさがらずに書きなさいよ! となじる一方で密かにアロー記号用意したり
型情報なんか必要だなんて思っていないんだからっ! と表向きは突き放しつつ陰ではいそいそ
JSDocに型情報を書いてみたりガードが使えるようになる未来を夢想してこっそりデれたり。
で、そのことを指摘しても「ガードは・・・そういうのとは違うのよっ」と否定してみたり。

363:デフォルトの名無しさん
13/12/01 03:14:17.32 .net
JS利用者が導入したわけじゃないしね。
必要ないのに勝手に誰かが導入しただけだしね。

364:デフォルトの名無しさん
13/12/01 03:22:20.17 .net
>>360
たいていのアルゴリズムはコメントどころか書籍程度の説明が必要。
書籍一冊で理解させるのが困難な場合も多く、直接的な指導が必要な場合も多い。

コメントを書かなくても理解させられるコードというのは、単に手続きを
羅列したものであり、そのような手続きの羅列を強要させられることこそが
糞言語のあかしなのである。
コメントを書く必要がないのではなく、コメントを書かなくていいような
手続きの羅列を書かされている。
こういった認識を持てないのは、糞言語に調教された証左である。
つまり、君は我々人類と対等に話せる場所に既に居ない。
機械に調教された悲しき奴隷、それが今の君の姿なのである。

365:デフォルトの名無しさん
13/12/01 03:25:46.68 .net
コメントを書こう、メモを残そう、テストを完璧に行おう、デバッガを捨てよう。

366:デフォルトの名無しさん
13/12/01 05:11:23.08 .net
>>364
'コメントを書かなくても理解させられるコードというのは、単に手続きを
羅列したものであり、そのような手続きの羅列を強要させられることこそが
糞言語のあかしなのである。'
という宣言が論理式に変換されればよいというだけの話ではないか。
>>364の言っていることは。

367:366
13/12/01 05:12:17.82 .net
>>360の言っていることは。だね。

368:デフォルトの名無しさん
13/12/01 06:02:23.28 .net
>>364
くだらね。極端な例はいらん。

369:デフォルトの名無しさん
13/12/01 06:03:00.15 .net
> 'コメントを書かなくても理解させられるコードというのは、単に手続きを
> 羅列したものであり

間違い。

370:デフォルトの名無しさん
13/12/01 06:52:56.51 .net
間違いもそうだが、そもそもレスが論理的におかしい

自分で「コメントを書かずとも理解させるコード」と、
コメントが理解の助けになる前提で語ってる時点で
最良はコメントのように書いてあるコードしかないだろうに

371:デフォルトの名無しさん
13/12/01 06:54:50.42 .net
そもそも、型情報は
コメントとして書くものではなく
コードで書くものだという話。

372:デフォルトの名無しさん
13/12/01 06:55:33.92 .net
というか>>349実装見たら良いとか>>360コメントいらずのコードとか謎。

使う人が知る必要があるのは仕様。ドキュメントやコメントに書いてあるのは
そういうこと。
コードに書いてあるのは実装。読んで理解すれば時には役にはたつがはじめから
使う人間に実装の中身の理解を求めるのは普通に変。

自動車運転する人にオットーサイクルの理解を求めるの?

373:デフォルトの名無しさん
13/12/01 07:03:35.70 .net
>>372
エンジンを使って何かをつくろうとしてる人なら
理解していたほうが良いだろうね

374:デフォルトの名無しさん
13/12/01 07:19:25.63 .net
>>373
自動車運転する人の話を聞いているんだけど。
GoogleやFBが提供するAPIを使って何かを作る人はそのバックエンド処理の仕組みを知る
必要があるの?
gzipを使う人はgzipのコードを読んでからで無いとダメ?
HTMLにマイクロフォーマットを埋め込む人はRDF Semanticsの仕様を読んで理解してから?
String.indexOfを使う人はそれがどのアルゴリズムで書かれているか知ってからでないと
使っちゃダメかな?

理解「した方がよい」のと使うのにまずコード読んで中身の理解を求めるのは全く別。

375:デフォルトの名無しさん
13/12/01 07:19:29.74 .net
>>372
お前は自分でコード書かないのかよw
関数の中身を書く人、修正する人の話だろ。
プログラム板なんだから。

376:デフォルトの名無しさん
13/12/01 07:30:28.94 .net
>>375
コードは書くし他の人が読んで理解しやすいように書くけどコードを提供する側としては
自分が書いたコードを使うならまず読んで理解しろとは全く考えないね。

自分で書いたコードをいろいろな人に使ってもらった経験って、ある?

377:デフォルトの名無しさん
13/12/01 08:13:20.34 .net
>>360
>>364 >>374
URLリンク(nojiriko.asia)

378:デフォルトの名無しさん
13/12/01 11:42:22.02 .net
型を宣言してもコメントはなくならないし、テストもなくならない
グローバルスタンダードになるつもりは最初からない
ガラパゴスの多様性を擁護する側の勢力がどんな戦い方をするのかという実験なんだよ

379:デフォルトの名無しさん
13/12/01 12:32:35.07 .net
>>374
駄目と入ってないが、どれも知っていたほうが理解が早い
特にWen関連APIなんてそのベンダーの仕様知ってると相当に早い
それにマイクロコードなんてSEO考えてるならまず仕様から入るし
gzやindexOfの実装にしたって
パラメタ指定が速度に関わる系なら知ってて損はない

概要すらいらないなんて考えはさすがに同意しかねるよ

380:デフォルトの名無しさん
13/12/01 13:06:30.06 .net
>>379
知っていた方が理解が早い
で、実装の詳細を知るために要する時間はドキュメントのコメントを読むのに要する時間よりも遥かに長い

# だから経験者の即戦力が求められるってことでもあるんだけどね

381:デフォルトの名無しさん
13/12/01 13:09:32.04 .net
>>376
> 自分が書いたコードを使うならまず読んで理解しろとは全く考えないね。

やっぱりお前アホだ。

誰も「コードを使うならまず読んで理解しろ」なんて一言も言ってない。

お前日本語読めないだろ。

382:デフォルトの名無しさん
13/12/01 13:20:35.67 .net
あれでしょ?なんだかんだ言って
関数を自分で作ったことがない人なんでしょ。
使うだけの人。

プログラマなら普通、自分が書いているコードの
中身の話をするもんだけどねぇ

383:デフォルトの名無しさん
13/12/01 15:44:13.87 .net
コメントやドキュメントに書いてある事だけ知っていれば良かったらどんなに楽だろうか

384:デフォルトの名無しさん
13/12/01 15:45:54.12 .net
>>383
コメントやドキュメントが整備されていれば実装まで調べる必要ないけど

385:デフォルトの名無しさん
13/12/01 15:50:08.51 .net
>>348
それ型が解るだけで結局何する関数なのかさっぱり解らないと思うんだが
その型情報で何を想像するかは人よって見解が分かれそう

386:デフォルトの名無しさん
13/12/01 16:08:55.34 .net
ドキュメントに具体例がないと苦労する
具体例とは、仕様書でもソースコードでもない

387:デフォルトの名無しさん
13/12/01 16:18:54.90 .net
>>386
たしかに例が載ってると助かるよね

388:デフォルトの名無しさん
13/12/01 17:19:30.39 .net
ここでD使いが参上

「Dならunittestのコードを直に埋め込めるし
 ドキュメントに使用例として吐出されるよ」

シュタッミ

389:デフォルトの名無しさん
13/12/01 17:56:08.53 .net
>>384
なんでまだ、使う人の話してるの?

使うコードを書だろ?
そのコードの話をしてるんだが。

コメント見なくてもわかりやく書けよ。
誰もコメントなくなと入ってねーよ。

390:デフォルトの名無しさん
13/12/01 18:02:55.11 .net
>>382
誰かと一緒に作業したり他の人にコードを提供するプログラマなら中身同様にドキュメント
等を含めたコードの外面をとことん気にすると思うけれども、違うの?
ドキュメンテーションをちゃんと行うなら静的も動的も記述量はたいしたことが無いんじゃ
ないのという例を挙げたのは自分だけど、そこからドキュメントを用意しない場合という話
が出てきて実装読めば良いとかコメント無くてもわかるコードという話になったので「謎」
と言ったわけ。

いやそこ頑張るとこじゃ無いというか、頑張っても良いけどまずメソッドのシグネチャや
付随するコメントが十分に説明的になってからでないと単に効率悪いだけだから。
function func(attr)もint func(File.Attributes attr)も中身の書き方云々する前にまず
コメントから書こうよw メソッド名も書き直す。

391:デフォルトの名無しさん
13/12/01 18:13:51.40 .net
>>389
>なんでまだ、使う人の話してるの?

使われるコードを書く人の話をしています。

392:デフォルトの名無しさん
13/12/01 18:23:17.12 .net
>>391
勝手に話をすり替えないように。

393:デフォルトの名無しさん
13/12/01 18:23:48.97 .net
話を戻そうね

360 名前:デフォルトの名無しさん[sage] 投稿日:2013/12/01(日) 02:19:35.15
>>356
コメントがなくてもわかるような
コードを書けってきかない?

型を含めたコード全てが
コメントのように分かりやすくあるべきなんだよ。

コードに必要な情報を埋め込められる言語
ようするに型もその情報の一つなわけだけど、
そういう言語だとコードが分かりやすくなるんだよ。

(コンパイラが理解できない)コメントは
コードに情報を埋められない言語の逃げでしかない。

394:デフォルトの名無しさん
13/12/01 18:28:50.95 .net
使うだけにしても実装を追うにしてもコメントのあるなしで大分違うからまずコメント書けってのには同意だけど
コメントが書いてあれば実装を追わなくても理解できる、とか言われると「はぁ?」って感じ

395:デフォルトの名無しさん
13/12/01 18:32:04.04 .net
経験上、コメントがないとわかりづらい部分とコメントを書きづらい部分というのがかぶっているわけで

396:デフォルトの名無しさん
13/12/01 18:45:11.41 .net
同じ手間でコードでかけることならば、コードで書いていれば良い。
引数の型とかそういうのはコードで書くべき情報。

397:デフォルトの名無しさん
13/12/01 18:49:35.92 .net
服着てる現代人と裸の原始人とどっちが優秀かって問題だと思う。
原始人は体が鍛えられてて個体としては優秀だが、狩猟ができず食える草が生えてない東京で絶望することだろう。

398:デフォルトの名無しさん
13/12/01 18:50:28.76 .net
>>393
自分が好都合なリビジョンに話をロールバックするなw
エラー発生時点まできっちり巻き戻そう。

>>348
>function func(attr){ ... }
>int func(File.Attributes attr){ ... }
>こんな関数があったら前者は怖くて使えないよね。

後者だって怖くて使えね~w
要するに、そういうことだよ。型が合った方が良いという例としてはイマイチ無茶。

仮に実装の中身にしても同様。

int i = 0;
var index = 0 // 0..(users.length -1)

どっちが説明的?

int index = 0; // 0..(users.length -1)

と大差ある?

「コメント無くてもわかるようなコード」というのは型情報だけでは無くメソッド
名や変数名にも配慮して初めて書けるもの。型情報なんてその中の一つに過ぎない。
で、その程度は少しのコメントで補えるもの。この点で動的型が不利とは思わない。

さらに言えば「コメント無くてもわかるようなコード」の書きやすさではJava等
よりもPythonなどを押すかな。これは静的型動的型の違いと言うよりもコード中の
ノイズの多さの違い。

399:デフォルトの名無しさん
13/12/01 18:56:38.16 .net
>>394
コメントが書いてあれば実装を追わなくても理解できる、とまではさすがに求めない。
まずは実装を追わなくても使えるべきで、そのためにコメントやドキュメントは必要と
言っているだけ。

ドキュメントを書いたのにドキュメントだけでは使い方がわからなかったとか言われた
場合はそれなりに悔しいw

400:デフォルトの名無しさん
13/12/01 18:56:46.51 .net
> 後者だって怖くて使えね~w
> 要するに、そういうことだよ。

どういうこと?(笑)

ほらね、理由を全く言ってない。
これなんだよ。卑怯な人はね。

> var index = 0 // 0..(users.length -1)
>
> どっちが説明的?
>
> int index = 0; // 0..(users.length -1)

下じゃねーの?

上に書いてあるint i = 0; がなんのことだかわからんけど、
誤記入だろう? 型がない言語でにはint iなんて物は存在しないからね。

401:デフォルトの名無しさん
13/12/01 18:57:58.20 .net
比べるなら

> var index = 0;
> int index = 0;

この二つで比べるべき話だね。
>>398は変な人だね。

402:デフォルトの名無しさん
13/12/01 18:58:58.72 .net
>>348
型がないとコードを読めない初心者さん、おつかれ。
早く補助輪なしで自転車に乗れるようになれたらいいね。

403:デフォルトの名無しさん
13/12/01 19:01:00.31 .net
>>401
この二つは明らかに下のほうがわかりやすいね。

上はindexって書いているけど、これが何型かわからない。
もしかしたら本の索引って意味かもしれんし。
その場合は、1.1 (一章一節)なんて数値が入るかもしれない。

後者だと整数であることが明確である。

404:デフォルトの名無しさん
13/12/01 19:02:51.27 .net
もっと具体的な型だったら
さらに意味がわかりやすいよね。

BookIndex index = 0;

405:デフォルトの名無しさん
13/12/01 19:03:29.40 .net
>>401
でもHaskellのコードとか、
関数がポイントフリーになっていて引数名すら存在しない、
その関数の引数の型ぐらいしかヒントがない、
なんてことがあるし。

傾向として
静的型プログラマは型に頼って変数名はテキトー、
動的型プログラマは変数名に拘るのが多いんじゃね?

406:デフォルトの名無しさん
13/12/01 19:04:19.46 .net
>>403
おまえは本を0章から書き始めるのか?
RMSみたいな奴だなw

407:デフォルトの名無しさん
13/12/01 19:04:48.65 .net
> 静的型プログラマは型に頼って変数名はテキトー、
> 動的型プログラマは変数名に拘るのが多いんじゃね?

全然違うし。変数名が適当であるという根拠は何一つ出てない。


静的型プログラマは型も変数名にもこだわってる。
動的型プログラマは変数名に拘るが型は適当。

これが事実だろ。

408:デフォルトの名無しさん
13/12/01 19:05:57.33 .net
コメントは基本ドキュメンテーションコメントだけでいいんだよ

409:デフォルトの名無しさん
13/12/01 19:07:28.59 .net
>>407
ハスケラとか1文字変数平気で使うし、
ポイントフリーで0文字なんてのもザラだし、
それどころか0文字変数名を推奨してるしw

Javaのコードだって大抵は変数名はクラス名より短いしw

410:デフォルトの名無しさん
13/12/01 19:07:47.65 .net
>>406
0というのは、どこも指していないって意味ですよw
ほらね。型がないとこういうことになる。

>>407
だな。静的言語のほうが変数名は長くて具体的な傾向がある。

動的言語の場合は、適当に短い名前をつける。
で、これで許されるのは、結局プログラムの規模が小さいから。
プログラムの規模が小さいから、適当な名前でもどうにかなる。

だから大規模になると動的言語は破綻する。
ずっと前から出てる結論じゃないか。

411:デフォルトの名無しさん
13/12/01 19:08:15.68 .net
>>404
BookIndex型に整数代入したらエラーになるんじゃないの?

412:デフォルトの名無しさん
13/12/01 19:08:33.10 .net
というわけで>>407はウソツキであることが確定w

413:デフォルトの名無しさん
13/12/01 19:09:36.58 .net
>>411
動的言語ではエラーになりませんよね。

BookIndexを入れるべき所に0を入れても
変数に型がないのでエラーになりません。

困りますよねw

414:デフォルトの名無しさん
13/12/01 19:10:15.71 .net
>>410
それはお前が今勝手にそういう糞コードにしただけで、
具体的に「index」という変数名で「章番号」を保持していたというコードの実例を出してみろw

415:デフォルトの名無しさん
13/12/01 19:10:24.20 .net
型があるとこういう、明らかにエラーになるべき所を
しっかり教えてくれるんだよね。

416:デフォルトの名無しさん
13/12/01 19:11:25.19 .net
>>400
下の二つのどちらが説明的なのかと
(前者は静的型で変数名に無頓着な例。
 後者は動的型で説明的な変数名にコメントを付記した例)
int i = 0;
var index = 0 // 0..(users.length -1)

下の二つでは大差があるのかと説いたわけで。
var index = 0 // 0..(users.length -1)
int index = 0; // 0..(users.length -1)

要するに動的型でも適切にコメントを付記すれば十分に説明的になる以上、コメント
禁止なんて非現実的な縛りでも無い限り動的型は理解しやすいコードの書きやすさの
点で不利にはならないということ。

コメントが無いコードを書きたいの? それとも理解しやすいコードを書きたいの?

417:デフォルトの名無しさん
13/12/01 19:11:44.25 .net
>>413
バカだなあ。例外というものを知らないらしいw

ねえ、静的型プログラマって、みんな413みたいなキチガイ人間なの?バカなの?糞バグ製造機なの?

418:デフォルトの名無しさん
13/12/01 19:13:16.65 .net
>>415
おまえが出した例はあまりにもアホすぎて
やはり静的型付言語はプログラミング初心者が使うものなんだな
ということをより強く確信しましたww

419:デフォルトの名無しさん
13/12/01 19:13:55.84 .net
>>417
例外は発生させる分コストがかかるじゃん

420:デフォルトの名無しさん
13/12/01 19:13:57.19 .net
>>416
お前さ、比較実験の原則しらねーの?

今比べるべきところは型だろ。
ならば型以外の条件は同じにするのが
原則だ。

int i = 0 // 0..(users.length -1)
var index = 0 // 0..(users.length -1)

どっちが説明的かって?
上に決まってるじゃねーか。

421:デフォルトの名無しさん
13/12/01 19:14:51.71 .net
>>419
(動的に発生する)例外は発生させる分コストがかかるじゃん

それがどうかしましたか?

422:デフォルトの名無しさん
13/12/01 19:15:11.92 .net
そもそも無駄にコメント書くやつがアホ
関数の説明ぐらいでいいんだよ

423:デフォルトの名無しさん
13/12/01 19:18:00.23 .net
>>422
変数全てに、それがどんな型で
どんな値が入るかをコメントで書くべきだ。

型がない言語を使っている人が、
そう言ってるのがわかりませんか?

424:デフォルトの名無しさん
13/12/01 19:18:00.87 .net
>>403
「0」って整数リテラルがかいてあるのに
> もしかしたら本の索引って意味かもしれんし。
> その場合は、1.1 (一章一節)なんて数値が入るかもしれない。
なんてキチガイじみたこと言うなんて、
やっぱり静的型プログラマはバカなんだね。

425:デフォルトの名無しさん
13/12/01 19:19:10.19 .net
>>424
発想力のないやつだね。

0が書いてあればということは、
じゃあ0が書いていなければどうなるのさ?

もしこの値が1だったらどうなる?

0ならわかると言っているならば、
0以外ならわからないとお前は認めてるのも同然なんだよ。

426:デフォルトの名無しさん
13/12/01 19:20:38.91 .net
>>423
「型がない」なんて言ってる時点で、型に関する知識が初心者レベルなのが丸わかりw
静的型言語を使っているからバカになったのか、
それともバカだから静的型言語を使っているのか。
どっちにせよ、静的厨はバカw


次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch