やっぱり動的型付け言語は大規模開発で効率が悪い 4

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
大規模と書いてドカタと読む。


やっぱり動的型付け言語は大規模開発で効率が悪い 3
http://hibari.2ch.net/test/read.cgi/tech/1320832914/
2デフォルトの名無しさん:2011/11/21(月) 12:05:12.06
スレタイで興味持った新規さん向けの要約

> 163 :デフォルトの名無しさん:2011/11/12(土) 00:37:41.74
>  つーか日本の標準的な組織でどうかって話じゃないと意味なくね?
>  ファウラーの環境を引用してどうすんの?
>  君らファウラーに匹敵するスキルを持っていて、周りもそういうレベルの奴に囲まれた環境で仕事してんのか?
>
> 165 :デフォルトの名無しさん:2011/11/12(土) 00:42:56.66
>  >>163
>  つまり日本の底辺ドカタに動的型は使いこなせるか?を議論すればいいのか
>  じゃあスレタイも「動的型付け言語ではドカタは大規模開発できない」に変更しなきゃな

仕事で活用できないとあんま意味ないよ派
仕事でプログラミング学んだので他は知らね派
家でも趣味やOSSでプログラミングしてるよ派
仕事なんてしてませんが何か派

ファイッ
3デフォルトの名無しさん:2011/11/21(月) 13:09:41.07
PHPの動的型付け嫌だけどね

$a = "100";
これが文字列ではなく整数とみなされたりね
4デフォルトの名無しさん:2011/11/21(月) 14:55:03.00
整数でいいと思うけど。
5デフォルトの名無しさん:2011/11/21(月) 15:10:16.01
だからPHPは「HTMLを構築して出力する」という特化目的に於いて許容される仕様(とどう煮ても焼いても許されざる仕様)が山ほどあると何度
PHPは汎用プログラミング言語ではない
6デフォルトの名無しさん:2011/11/21(月) 15:12:38.52
"100" + 1 とか 1 + "100" が
エラーにならない言語はウンコ
7デフォルトの名無しさん:2011/11/21(月) 15:27:01.74
あのさ、俺思うんだ。
PHPは知能を持っている。

「10:12」こんなメモを渡されたとする。
これなんだろう?
10対12?10時12分?
これ人間だったら状況に応じて意味をくみ取るわけ。
たとえばさ、秘書に「10:12に集合するよう徹底してください」こんなメモ
渡すでしょ。
ここで秘書が「10対12ってなんですか?ちゃんとわかるように書いてください」
とか言い出したら、この娘アホの子なのか?って思うよね。

結局、JavaとかCってアホの子なんだよね。
っていうか無能なの、知能がないの。
まああたりまえだけど。

でもね、PHPにはこれができる。
やっぱりPHPには知能があるんだよ。
8デフォルトの名無しさん:2011/11/21(月) 16:05:38.03
$a = "百";
と書けばいいだけ
9デフォルトの名無しさん:2011/11/21(月) 16:59:48.04
perlとかDみたいに文字列連結と足し算を区別してないのが問題だな
10デフォルトの名無しさん:2011/11/21(月) 17:35:43.84
awkをdisってんのか?
11デフォルトの名無しさん:2011/11/21(月) 21:03:28.78
JavaとJavascriptも?
12デフォルトの名無しさん:2011/11/21(月) 21:11:07.63
個々の言語仕様ごとに意味が違うのに表層しか見えない >>9 の脳みそが問題
13デフォルトの名無しさん:2011/11/22(火) 07:31:25.34
awkは数の加算と文字列結合は分かれてる
1 1と並べて書けば文字列結合と解釈されて11になるし、1 + 1は2だ
14デフォルトの名無しさん:2011/11/22(火) 08:22:16.32
というか、どの言語もきちんと区別はしている(じゃないと処理できない)
人間が判断する見た目または他の言語と乖離していることがあるというだけに過ぎない
15デフォルトの名無しさん:2011/11/22(火) 10:07:49.97
エラーにもならず、人間が判断する見た目でも区別が付き難かったら
ミスに気付かず意図しないデータ型で動かしてしまう可能性が高まる
処理系が区別してるなんて話はそもそもしてない(んなもん当たり前)
16デフォルトの名無しさん:2011/11/22(火) 10:16:37.50
ポリモーフィズム全否定来ましたw

ハードディスクを交換したらファイル操作のコマンドが全部別のものになるのが正義なんだそうですw
17デフォルトの名無しさん:2011/11/22(火) 10:28:58.94
ポリモーフィズムじゃなくて、オーバーロードや暗黙の型変換の話ですが
18デフォルトの名無しさん:2011/11/22(火) 10:38:31.44
同じ見た目でも、対象によって異なった動作をする、ということが気にくわないのでしょ?
19デフォルトの名無しさん:2011/11/22(火) 10:45:56.78
"1" + "1" => "11" で 1 + 1 => 2 のときに
"1" + 1 => ? をどうするかという問題だから

"1" + 1 => 11 なら数値が文字列に、
"1" + 1 => 2 なら文字列が数値に型変換されてる
こういう暗黙の型変換は分かり難い

"1" + "1" や 1 + 1 は否定してないので、
ポリモーフィズム全否定ではない
20デフォルトの名無しさん:2011/11/22(火) 11:58:28.52
>>18
同じ見た目なら常に同じ動作だ
1+"1"が文脈やランダム性によって2になったり11になったりすることはない
21デフォルトの名無しさん:2011/11/22(火) 12:05:40.48
…まあ、あれだ、 x + 1 が x の「型」によって結果が違う、みたいな話にしないと
リテラルで話をしていても微妙に埒があかない
22デフォルトの名無しさん:2011/11/22(火) 12:41:21.74
なんでいつもの人が反論してるんだろう...と思ったら
Javaも批判の対象だからかwww
23デフォルトの名無しさん:2011/11/22(火) 14:38:27.35
だれがいつもの人なんだろう
24デフォルトの名無しさん:2011/11/23(水) 11:43:45.58
>>17
じゃあ暗黙の型パラメータとか型クラスのメソッドの名前解決とかも全否定ですね。
25デフォルトの名無しさん:2011/11/23(水) 12:02:40.61
あ、それは全否定でいいや
両方持ってるScalaはRuby並みにキタネーし
26デフォルトの名無しさん:2011/11/24(木) 02:01:34.87
>>9
Perlは文字列の連結と足し算を演算子で区別すると思うが…
27デフォルトの名無しさん:2011/11/24(木) 02:15:25.84
型がないと型ごとに演算子が増えるよね。

+ 数値足し算
. 文字連結
== 数値比較
eq 文字比較

みたいに。
28デフォルトの名無しさん:2011/11/24(木) 04:49:21.45
>>27
おまえ正気か?
29デフォルトの名無しさん:2011/11/24(木) 08:27:42.20
変数に型がある/ない
値に型がある/ない

まずこれを区別するところからはじめようか
30デフォルトの名無しさん:2011/11/24(木) 10:58:04.83
その程度も区別できないからこそ
ドカタなわけですよ
31デフォルトの名無しさん:2011/11/24(木) 11:40:22.53
数値の足し算と文字列連結の両方+にしたいと言ってる人は
足し算を意図している所で連結が起こる可能性を無視したバグプログラマと
文字列連結にされたくないってときに必ず
Number(a) + Number(b) とか書くような作業が大好きな人だけだろ
32デフォルトの名無しさん:2011/11/24(木) 11:54:35.31
記号が増え過ぎる、って主張も解らんでもない
Haskell で ++ とか初めて見た時は「…それ、なんか無理してね?」と思ったし
33デフォルトの名無しさん:2011/11/24(木) 12:12:49.04
・内部形式が数値か文字列かによって、足し算か連結か変わるのは良くない
・文字列の内容が数値かによって、足し算か連結か変わるのは良くない
・記号が増えすぎるのは良くない
・既存の記号に違う意味を与えるのは良くない

だれかこの堂堂巡をどうにかしてくれ
34デフォルトの名無しさん:2011/11/24(木) 13:51:35.14
静的型付なら問題にならないでしょ
35デフォルトの名無しさん:2011/11/24(木) 14:20:47.59
暗黙の変換がやたらあるのはよくない
静的なものではC、動的なものではJavaScriptの==演算子
36デフォルトの名無しさん:2011/11/24(木) 14:21:55.79
ていうか、Goを触ってみろ。
Cを作った奴等の次の次の言語、だけあって、Cのいいところを残して、
ダメな所がよく潰されている。
37デフォルトの名無しさん:2011/11/24(木) 17:42:50.34
>>34
静的型で暗黙コアージョンしまくりな言語がいいのか?
38デフォルトの名無しさん:2011/11/24(木) 18:05:37.98
>>36
Dartもそんな感じがするな。JavaScriptのスコープとトホホな点とかは
きっちり潰している。
39デフォルトの名無しさん:2011/11/24(木) 18:22:11.39
stやrubyみたいな規則だとわかりやすい
phpが場当たりなだけ
jsの==はある意味必然だろ
40デフォルトの名無しさん:2011/11/24(木) 18:23:00.97
goいいよね
スクリプト的にも書けるし
ちょい面倒なとこもあるけどさ
41デフォルトの名無しさん:2011/11/26(土) 05:54:58.54
もう結論出てるだろ
大規模開発ドカタは静的型付け言語すらちゃんと使えない

動的型付け云々を言う前に
せめてcaseの網羅性を静的検査可能な形で記述できるようになれ
42デフォルトの名無しさん:2011/11/26(土) 07:26:34.31
パターンマッチの網羅性を検査できる言語はあるが、
だからと言って仕様で定められた分岐を網羅してるか否かまでは検査出来ないぞ
そこは分かって書いてるの?
43デフォルトの名無しさん:2011/11/26(土) 07:35:01.94
仕様で定められた分岐が、可能な状態を網羅しているかどうか検証すればいいだろ
44デフォルトの名無しさん:2011/11/26(土) 07:36:32.28
テストで?
45デフォルトの名無しさん:2011/11/26(土) 09:44:52.79
>>41「必須条件だ」
>>42「十分条件ではない」
46デフォルトの名無しさん:2011/11/26(土) 10:33:27.75
>>41
大規模開発ドカタ限定で答えだすなw


静的型付け言語をちゃんと使えるプログラマ前提の話、
(お前はもちろん使えるんだよな?w)
そういう前提だと、静的型付け言語が優れてるってのは
言うまでもない話だ。

ま、静的言語と静的型付け言語をごっちゃにしているお前の
いうことなんか誰も耳をかさないだろうけどなw
47デフォルトの名無しさん:2011/11/26(土) 14:23:21.11
変数の型と、値の型とを区別出来ない言語を使っていた時は.動的型付けの意味が判っていなかった。
尤も、世間の9割以上は単純な事務処理だから、区別出来なくても当面困る事は無いだろう。
48デフォルトの名無しさん:2011/11/26(土) 14:36:58.85
それはアセンブラでも頑張れば出来る理論だなw
49デフォルトの名無しさん:2011/11/26(土) 14:58:03.44
単純な事務処理なんてドカタ&Javaで十分
ぬるぽはうざいけど、ドカタはJavaくらいしか書けねーしな
50デフォルトの名無しさん:2011/11/26(土) 15:10:30.53
またドカタが口癖にお前かw
51デフォルトの名無しさん:2011/11/26(土) 19:00:44.74
>>33
よし、数値といってもintとかfloatとかがあるから、それぞれの足し算の記号を別のものに……。
52デフォルトの名無しさん:2011/11/26(土) 20:17:04.05
>>46
> ま、静的言語と静的型付け言語をごっちゃにしているお前の
> いうことなんか誰も耳をかさないだろうけどなw

理解できていないのはお前だろw
>>41は「静的型付け言語」「caseの網羅性を静的検査」に言及しているが
静的言語なんて言及してねえぞw

で、caseの網羅性を静的検査する場合、
静的型付けとの関係が深いことは言うまでもないことだよな?な?
53デフォルトの名無しさん:2011/11/26(土) 20:46:53.47
>>52
なんかさ、すべての問題を解決してくれないなら
意味が無いと思ってないか?

ユニットテストは仕様上のバグを解決してくれないから
意味が無いみたいな。

caseだって網羅性とか完璧に解決してくれないなら意味が無いと
言おうとしてるんだろうけど、caseと静的型付けはほとんど関係ないから。

まあ、caseっていうかswitchの引数に指定できない型を検出してくれるという意味で
少しは意味があるけどね。
54デフォルトの名無しさん:2011/11/26(土) 20:55:20.26
C#かJavaか知らないけど、言語によっては、
switchにenum型変数を入れてcaseではそのenum型の
値でしかチェックできないってのもあったはず。
55デフォルトの名無しさん:2011/11/27(日) 00:12:05.11
網羅性の静的検査があると嬉しいのは事実
直和型のパターンマッチとかでは、型さえ仕様と合ってれば
仕様で定められた分岐の網羅性を検査できるわけだし
56デフォルトの名無しさん:2011/11/27(日) 00:18:30.90
>>55
それって動的型付け言語じゃできないものなのかな?

この変数に入る値は○○ですって
あらかじめ定義しておけば、
動的型付け言語でも可能だと思うんだけど。
57デフォルトの名無しさん:2011/11/27(日) 00:22:04.91
>>56
直和型について言えば、定義した型を
実行時に変更できないようにすれば可能かもしれない
58デフォルトの名無しさん:2011/11/27(日) 00:29:38.11
>>57
> 定義した型を実行時に変更できないようにすれば

それって静的型付け言語って言うんじゃ…
59デフォルトの名無しさん:2011/11/27(日) 00:33:57.12
実行時に変更できない時点で動的型付け言語じゃなくなってるけどなw

やっぱり静的に型付けできないと、静的にチェックは難しくなるね。
もし静的型付け言語にコンパイルフェーズってのがあって
その時にコードでいろいろ変更できるようにすれば
動的型付け言語を完全に超えられると思う。
60デフォルトの名無しさん:2011/11/27(日) 01:34:02.46
でもさ、動的型付け言語で優れたIDEが作れる、と言っても
実例としてはSmalltalkにしか存在しないように、
静的型付け言語なら分岐の網羅性を静的検査できる、と言っても
実例としては一部の関数型言語しか存在しないじゃん

このスレにいる静的型付け言語派の人はみな関数型言語使いなの?
61デフォルトの名無しさん:2011/11/27(日) 01:40:21.40
またわけのわからんのが来たよ
62デフォルトの名無しさん:2011/11/27(日) 09:04:58.31
>>59
コンパイル後の変更に対応できないから動的型付け言語を超えられない。
63デフォルトの名無しさん:2011/11/27(日) 09:06:33.68
>>53は型の基本がわかっていない...
64デフォルトの名無しさん:2011/11/27(日) 11:17:35.22
前スレで分かったこと
- 大規模開発にはドカタ動員が必須
- ドカタは静的型チェックやIDEの補完の助けなしではFizzBuzzも書けない。
- 逆にコンパイラとIDEの助けを借りれば、なんとか動くコードは書ける。
- 動的言語には現状まともなIDEがない(Smalltalkerはこっちくるな。Emacs?笑えんな)
- よって大規模開発で動的言語を使うと炎上する
65デフォルトの名無しさん:2011/11/27(日) 11:30:15.45
>>64
> - 逆にコンパイラとIDEの助けを借りれば、なんとか動くコードは書ける。

だうと
66デフォルトの名無しさん:2011/11/27(日) 12:06:17.57
>>62
> コンパイル後の変更に対応できないから動的型付け言語を超えられない。

コンパイル時に変更できれば、あらかたの問題は解決するでしょ?

どうしてもコンパイル時にやらないといけないことってなに?
67デフォルトの名無しさん:2011/11/27(日) 14:48:52.56
>>66
実行時拡張
68デフォルトの名無しさん:2011/11/27(日) 14:58:28.58
>>67
それは言葉を言い換え得ただけ。

どうしても実行時拡張をしないといけないことってなに?
69デフォルトの名無しさん:2011/11/27(日) 15:02:00.86
たいていの問題はコンパイル時拡張が出来れば
実行時拡張を使う必要がない。

俺が作ろうと思っている言語は静的型付け言語だが、
コンパイル時拡張を備えている。
70デフォルトの名無しさん:2011/11/27(日) 15:18:00.17
むしろ実行時拡張しなくてもいいアプリのほうがよほどドカタ・・・
71デフォルトの名無しさん:2011/11/27(日) 15:43:51.99
だから、どんなときに実行時拡張が必須なのか
言えってw
72デフォルトの名無しさん:2011/11/27(日) 15:44:14.59
言えないから、ドカタって煽って逃げてるんだろ・・・

察しろよ!
73デフォルトの名無しさん:2011/11/27(日) 15:44:39.20
あ、なるw あなるww
74デフォルトの名無しさん:2011/11/27(日) 16:22:19.95
Smalltalkは原則として実行時の拡張しかできない。
75デフォルトの名無しさん:2011/11/27(日) 16:24:38.22
実行時拡張というのは、万能関数 eval を使ったメタプログラミングのことだろ?
(他にはリフレクティブプログラミングと呼ぶ事もある)
LISP系言語やRubyでは必須というか、煽るまでもなくごく当たり前に使われているな
76デフォルトの名無しさん:2011/11/27(日) 16:27:26.25
使われてるかどうかじゃなくて、
どういう時に使うのかって話なんだけどなw
77デフォルトの名無しさん:2011/11/27(日) 16:28:06.25
コンパイル時拡張があれば、動的拡張はいらないって話なんで
そこんところを勘違いしないように。
78デフォルトの名無しさん:2011/11/27(日) 16:28:20.79
>>74
Smalltalkの場合、クラスブラウザ上でクラスを新規定義すると、
ブラウザの中の人がClassインスタンスを生成して
それをシステム辞書に登録するんだったよね
79デフォルトの名無しさん:2011/11/27(日) 16:30:35.89
Smalltalkなんかはそうなってるってだけで、
どうしても実行時に拡張しなければいけないことなんてないでしょ。
特にコンパイル時に拡張できればほとんどの問題が解決する。

で残りの問題はあると思うから「ほとんど」と書いたが、俺は思いつかない。
どうしても実行時に拡張しなければならないことなんてあるの?
80デフォルトの名無しさん:2011/11/27(日) 16:33:02.70
とりあえずこれでも読んでみるとか。

「ソフトウェア工学」は矛盾語法か?-アラン・ケイ
http://metatoys.org/oxymoron/oxymoron.html
81デフォルトの名無しさん:2011/11/27(日) 16:37:38.64
>>76
たとえばActiveRecorrdというRubyで書かれたORM(Object-Rerational Mapper)では、
データベースに接続した時にデータベースのスキーマ情報から各テーブルに対応する
クラスが動的に定義される。この時、テーブル内の各フィールドはクラスに所属する
インスタンスメソッドとしてこれまた動的に定義される

JavaやC++のような実行時拡張の欠落した言語には、こんな芸当ができるかな?
82デフォルトの名無しさん:2011/11/27(日) 16:39:19.22
>>80
要約すると、コンパイル時拡張では最初からやり直しになりがちだしデータも作り直しになるから
例えばSmalltalkみたいに30年間動き続けるとか長期運用に耐えるソフトウエアは作れない。
83デフォルトの名無しさん:2011/11/27(日) 16:44:16.01
最初からやり直しになるとかデータも作り直しとか
どこの世界の話だよ
84デフォルトの名無しさん:2011/11/27(日) 16:47:56.37
>>81
でもさ、それって obj.setField(F1, 'abc') こう書くのとなにも変わらないよね?
85デフォルトの名無しさん:2011/11/27(日) 16:49:53.20
>>81
データベースに接続した時点でのクラスが作られるってことは言い換えると、
コードに書いてあるクラスとは違うオブジェクトができてしまうこともあるってことで、
データベース定義が変わってしまうと、コードが動かなくなってしまうってことじゃないの?


それよりか、データベース定義からコンパイル時にクラスを作ってくれたほうがいいんだが。
86デフォルトの名無しさん:2011/11/27(日) 16:53:44.90
> それよりか、データベース定義からコンパイル時にクラスを作ってくれたほうがいいんだが。

ようするに、その言語のクラスの定義の仕方は、

class HOGE {
  public foo()
}
みたいなのだけど、

yamlで書いたテーブル定義からも
クラスを定義できるってこと?
yamlからSQL文も生成できるようにしておけば、
単一の定義からクラスとcreate table文が出来るわけか。

一種のジェネレータみたいだけど、実際にコードを生成しなくても別の定義ファイルから
コンパイル時に直接クラスを作れるわけか、それってかなり良くない?
87デフォルトの名無しさん:2011/11/27(日) 16:56:13.10
コンパイル時拡張が出来れば、コンパイル時に
データベースに接続して、クラス生成なんてことも可能だろうね。

これだと、しっかり型チェックができるから
更に優れているのではないか。
88デフォルトの名無しさん:2011/11/27(日) 16:57:07.93
これからはやるだろうな。コンパイル時拡張。
89デフォルトの名無しさん:2011/11/27(日) 17:01:06.12
>>84
Rubyだと、obj.f1 = 'abc' あるいは obj.f1! abc と書けるよ
JavaよりもRubyのほうが簡潔なコードが書けることは一目瞭然じゃないのかな?
90デフォルトの名無しさん:2011/11/27(日) 17:01:33.50
データベースのフィールドなんか、コード補完できないところだけど、
コンパイル時拡張があれば、コード補完できるようになるかもしれないな。
91デフォルトの名無しさん:2011/11/27(日) 17:04:07.64
>>89
でも、シンタックスシュガーでしかないでしょ?
ちょっと書き方が変わった程度。

C#ならプロパティがあるから、
obj.fields(f1) = 'abc'なんてかけるしね。

もしそれでデータベース定義に従って
コンパイルエラーが出るなら、まだ意味があるけど無理でしょ?

もしコンパイル時拡張があれば、obj.f1 = 'abc'って書いてコンパイルしたら
データベースにそのようなフィールドはありません。ってエラーを出せるようになるかもね。
92デフォルトの名無しさん:2011/11/27(日) 17:14:08.36
>>91
>でも、シンタックスシュガーでしかないでしょ?
>ちょっと書き方が変わった程度。

いや、単なる構文糖とは全然違うよ

JavaやC#じゃ obj.set_f1('abc') あるいは obj.f1 = 'abc' と書けないだろ?
93デフォルトの名無しさん:2011/11/27(日) 17:27:19.47
>>85
>データベース定義が変わってしまうと、コードが動かなくなってしまうってことじゃないの?

それはJavaでも同じだろ?ActiveRecord固有の問題じゃないよ

>>85,86
>それよりか、データベース定義からコンパイル時にクラスを作ってくれたほうがいいんだが。

そういったクラスジェネレータは、ActiveRecordの登場以前にもいくつか存在していた。
その代表例が、AppleのWebObjectsというWebフレームワークの一部である
EnterpriseObjectと呼ばれる技術。WebObjectsでは、Modelerというツールを
利用する事でデータベースのスキーマ情報からクラス定義を自動生成できる。
さらにはModelerは、IDEであるProjectBuilder(今のXCode)と統合されている。
一言で言えば「過去に通った道」だね
94デフォルトの名無しさん:2011/11/27(日) 17:31:07.91
>>86
>yamlで書いたテーブル定義からもクラスを定義できるってこと?

そのアイデアも過去に通った道

・Rubyist Magazine - プログラマーのための YAML 入門 (実践編)
  http://jp.rubyist.net/magazine/?0011-YAML
95デフォルトの名無しさん:2011/11/27(日) 17:35:34.82
ドメインモデル貧血症を地でいく展開だね☆
96デフォルトの名無しさん:2011/11/27(日) 17:43:50.36
むしろRubyの場合、IDE側がRubyそのものを動かせば案外上手く行くんじゃ?
あの言語、実行途中でクラス作成や追加や修正できて
インスタンスも同じく作成追加修正できるし
あるオブジェクトが現在持っているメソッドの一覧とかも出せるんじゃん
97デフォルトの名無しさん:2011/11/27(日) 17:49:22.90
実行時拡張の議論でわかったことは、
ORマッパーやダイナミックローダを使うだけのドカタは、
それらの機構を実現する基礎となっている実行時拡張を不要と言い切る。

天に唾するとは、このことだなw
98デフォルトの名無しさん:2011/11/27(日) 17:57:24.20
だからドカタに動的言語を使わせるのは自殺行為だと何度言えば
99デフォルトの名無しさん:2011/11/27(日) 17:58:29.89
>>95
ドメインモデル貧血症 = トランザクションスクリプトで
特に日本でよく使われる、優れた方法の一つなんだが・・・
100デフォルトの名無しさん:2011/11/27(日) 17:59:21.82
>>97
結局、コンパイル時拡張があれば
実行時拡張は必要ないって結論になってるんだが、
だって過去に通った道というだけで反論は一つもない。
101デフォルトの名無しさん:2011/11/27(日) 18:00:08.33
>>98
またお前か。Javaは動的言語だって。
動的型付け言語と動的言語をごっちゃ混ぜにしているお前は
馬鹿としか見られてないぞw
102デフォルトの名無しさん:2011/11/27(日) 18:00:34.53
>>97
まあ、静的型付け言語でもソフトウェアアーキテクチャとかフレームワーク設計に
関わっていれば常識なんだけど、それをドカタに想像(イメージ)させようとすること
そのものに無理があったんじゃないかと思われ....
103デフォルトの名無しさん:2011/11/27(日) 18:02:56.23
まあさ、コンパイル時拡張があれば
実行時拡張が不要って結論は出てるからね。
104デフォルトの名無しさん:2011/11/27(日) 18:03:25.79
えと、結局どういう時に実行時拡張がいるんだっけ?
105デフォルトの名無しさん:2011/11/27(日) 18:03:41.44
あ、全部それコンパイル時拡張でできることじゃん。
106デフォルトの名無しさん:2011/11/27(日) 18:04:18.59
実行時拡張で何が出来るのかといえば、
結局シンタックスシューレベルの事しか出なかったね。
107デフォルトの名無しさん:2011/11/27(日) 18:10:50.20
>>104
ここにもドカタが一人www
108デフォルトの名無しさん:2011/11/27(日) 18:16:07.19
実行時拡張の例がハッシュのキーの
代わりってんだから笑うしかないだろ。
109デフォルトの名無しさん:2011/11/27(日) 18:30:13.41
>>101
お前ぜんぜん分かってねーな。真の動的言語はSmalltalkだけ!
110デフォルトの名無しさん:2011/11/27(日) 18:33:24.34
もはや、どうやってドカタが想像可能なレベルまで落とし込んだ
具体例を出せるかってゲームになりつあるな。
111デフォルトの名無しさん:2011/11/27(日) 18:33:31.83
>>103
日本語お上手ですね。何日前から習い始めましたか?
112デフォルトの名無しさん:2011/11/27(日) 18:47:26.86
>>110
具体例出せないんだw
113デフォルトの名無しさん:2011/11/27(日) 19:01:02.65
>>108
逆だよん

・LISP/Smalltalk/Rubyといった実行時拡張の可能な言語
  ・ テーブルの各フィールドをメソッドとして「直感的」かつ「簡潔」に書ける
  ・もちろんハッシュとしてアクセスすることも可能

     例:obj.f1 = 'abc' あるいは obj.f1! 'abc'

・Java/C#のような実行時拡張の欠落した言語
  --> テーブルの各フィールドはハッシュへ与えるキーとして
   「間接的」かつ「冗長」にしか書けない

     例:obj.fields('f1', 'abc') あるいは obj.fields('f1') = 'abc'

ここまで手取り足取り説明しないと分からんものかね?

もうドカタの相手は疲れたよ.... >>パトラッシュ
114デフォルトの名無しさん:2011/11/27(日) 19:11:24.83
  --> テーブルの各フィールドはハッシュへ与えるキーとして
   「間接的」かつ「冗長」に書ける

なにも問題ないんじゃね?
115デフォルトの名無しさん:2011/11/27(日) 19:12:27.09
ほらね。冗長かどうかって話に持っていっちゃうから、
シンタックスシュガーだねっで終わっちゃう。
116デフォルトの名無しさん:2011/11/27(日) 19:24:35.06
冗長かどうか気にする感性があったら
Javaドカタやってないって話だよ
117デフォルトの名無しさん:2011/11/27(日) 19:34:00.40
>>116
バランスの問題だよ。

冗長だとなにが悪い? コードを書くのが面倒?

でもな冗長である代わりに、逆にコードを書くのが楽になってる面もある。
118デフォルトの名無しさん:2011/11/27(日) 19:41:13.69
>>114
Java/C#で、プログラマがハッシュキーを('f1'ではなく)誤って'fq' と
書いてしまったケースを想像してごらん

Java/C#では、アクセス結果として(おそらく)Nullが返るから、
その誤った行(コード)を素通りして、予測の付かない箇所で「実行時に例外が発生」する

もしもJava/C#で obj.set_fq('abc') あるいは obj.fq = 'abc' と書くことが可能であったなら、
未定義メソッドエラーとして「コンパイル時に検査」できるんだよ

それに対してRubyであれば、同じ誤りの検出が(実行時ではあるけれど)
その誤りを含む行(コード)に対する具体的な method missing 例外として誤りを検出できる

分かるかい?

このケースでは、静的型付け論者が主張する「コンパイル時に型検査ができる」という
利点が失われているばかりか、実行時検査でもRubyにすら劣った結果になっているんだ
これは大きな矛盾ではないのかな?

>>115
これでいいかな?
119デフォルトの名無しさん:2011/11/27(日) 19:57:11.15
>>115
個別のメソッドとして実装することと
共通メソッドにハッシュキーを渡してアクセスすることが
単なるシンタックスシュガーに見えるのか・・・

ドカタって、どうやってプログラム書いてるの?
120デフォルトの名無しさん:2011/11/27(日) 20:01:19.26
>>118
> Java/C#で、プログラマがハッシュキーを('f1'ではなく)誤って'fq' と
> 書いてしまったケースを想像してごらん
>
> Java/C#では、アクセス結果として(おそらく)Nullが返るから、
> その誤った行(コード)を素通りして、予測の付かない箇所で「実行時に例外が発生」する

お前は馬鹿なのか? 大笑いするほどの馬鹿だぞ。

間違っているのなら、その場で例外を出せばいい。
fqというキーがなければ、例外を出せばいいだけじゃないか。

素通りするしてしまう? それは動的型付け言語で
ハッシュのキーが無かった場合に起こる問題だね。
ああそうか、お前は動的型付け言語の問題の話をしちゃってるんだ。
121デフォルトの名無しさん:2011/11/27(日) 20:03:14.29
>>118
> その誤った行(コード)を素通りして、予測の付かない箇所で「実行時に例外が発生」する

そう見えるとしたら、それはお前がJavaのコードすら満足に書けないからだよ
122デフォルトの名無しさん:2011/11/27(日) 20:05:30.29
そもそも「実行時に検出できるからいい」って言う奴は、大規模開発したことない奴だろ。
123デフォルトの名無しさん:2011/11/27(日) 20:31:34.00
>>120,121
そういった実行時検査もプログラマがコードとして実装すれば可能だね
ただRubyのような動的型付け言語では単なる method missing だから、そんな手間は不要だけど...
まあ「手間」という言葉を持ち出してもドカタ発想では無問題らしいから、
この点については取り下げよう

では、>>118で挙げた本題の矛盾についてはどう考えているのかな?繰り返すと、

 Java/C#のような実行時拡張の欠落した静的型付け言語では、
 データベースへアクセスするコードの誤りをコンパイル時に(静的に)検査できない

という矛盾だ
124デフォルトの名無しさん:2011/11/27(日) 20:35:48.03
>>123
> プログラマがコードとして実装すれば可能だね

実装の必要ないから。
動的型付けスレでJava詳しくなくても不思議はないが、
大上段に構えたいならAPIを100回位読み直してきた方がいいぞ。見てて恥ずかしい
125デフォルトの名無しさん:2011/11/27(日) 20:41:37.74
>>118
は設計思想の違いだろ。静的型付け言語で

> 「コンパイル時に型検査ができる」という利点が失われ

るよーな書き方を態々する必要がない。当然誰もそんな変態コードを書かん。
インターフェイス切るなりするだけだ。

安全性と引き換えに記述量が増えてるだけ。それを面倒と感じお前が好まないのは分かるが、世の中おまえと同じ考えだけで出来てるわけじゃない。
所詮道具だから適材適所すればいいだけ。

126デフォルトの名無しさん:2011/11/27(日) 20:43:32.08
>>124
単に実行時検査付きのハッシュクラスを選ぶだけの事で、
自慢できるような話じゃないし...

キーに一致する項目が無ければNullを返してもらいたいケースも存在する訳で....
127デフォルトの名無しさん:2011/11/27(日) 20:45:22.66
>>126
だから理解不足を露呈してくだけだから脊髄反射を一旦とめて、読み直して来い。
インターフェイスのAPIを、ね。
128デフォルトの名無しさん:2011/11/27(日) 20:46:07.67
本当に実行時に変えたいって要望は殆ど無いからね。
ほとんどの問題は最初から変わっていれば問題ないはず。
ソースコードを修正することで解決出来る問題ばかり。

ただ実際のファイルを修正するのははばかられる。
そういったときに実行時に変更するしかできないから
妥協してそうしているだけ。

本当に欲しいものは、動的型付けではなく、
オリジナルのファイルを書き換えることなく、コンパイル時に
メモリ上でファイル(正確にはパースした結果のオブジェクト)を変更して
そこからコンパイルを行う、コンパイル時拡張だということに
人々が気づくのはいつだろうね。
129デフォルトの名無しさん:2011/11/27(日) 20:47:43.83
>>126
> キーに一致する項目が無ければNullを返してもらいたいケースも存在する訳で....

そういうケースの時に、 method missing が出てもらったら困るんですけどwww
130デフォルトの名無しさん:2011/11/27(日) 21:01:30.21
>>129
Rubyではそうゆうケースの時は method missing は起きないけど何か?

それともJavaではそうゆうケースの時にも method missing が起きるのか?
not exist みたいな具体的な(適切な)例外が発生するんじゃないのか?
131デフォルトの名無しさん:2011/11/27(日) 21:02:33.51
動的型付け言語の機能は、冗長にはなるが
本質的には静的型付け言語でできないことはない。

だが、逆に静的型付け言語でできる、静的検査は
動的型付け言語ではどうしてもできない事がある。
132デフォルトの名無しさん:2011/11/27(日) 21:03:38.71
>>130
RubyではNullが返ってきて関係ない所でエラーになるんだよなw
133デフォルトの名無しさん:2011/11/27(日) 21:05:31.24
>>128
そういった仮説を前提にした主張は、実験的でもいいから
具体的な言語処理系が登場しない限り、誰も耳を貸さないだろうな

未来を語るだけなら、三歳児のようなお子ちゃまにもできる訳で....

もしも>>128が三歳児なら、「ヨシヨシ、イーコチャンデスネー」って
頭をナデナデしてあげるよw
134デフォルトの名無しさん:2011/11/27(日) 21:07:53.21
>>133
おまわりさん こいつです
135デフォルトの名無しさん:2011/11/27(日) 21:18:55.05
>>125
おお、ついにドカタが開き直ったかw

都合のいい時だけ静的型付け言語のコンパイル時型検査という利点を主張して、
都合が悪くなれば、それを「設計思想の違い」という言葉で濁すのか?
それを矛盾であると突いているんだけどな....

まるで国会答弁の政治家だし、それでもそれがドカタの生き方ならしかたないよね
136デフォルトの名無しさん:2011/11/27(日) 21:20:16.93
>>135
まるで理解出来てない輩がここに
137デフォルトの名無しさん:2011/11/27(日) 21:20:56.96
>>135
意味がわからん。

動的にしかわかりようがないものは、
動的にやるってだけだろ。

両方できるんだよ。静的型付け言語は。

選択肢が複数あって優れた方を使う。
どうしても出来なければ、もう一つの方を使う。
これでなにも失っているものはない。
138デフォルトの名無しさん:2011/11/27(日) 21:21:11.72
>>132
標準のHashクラスであれば、そうだね
139デフォルトの名無しさん:2011/11/27(日) 21:25:27.69
Javaの標準Hashクラスを設計した奴は頭オカシイ
nullを値として突っ込めるのにキーに対応する値が無いときもnull返すとか
気が狂ってるとしか思えん。何のメリットがあるんだよ
140デフォルトの名無しさん:2011/11/27(日) 21:27:25.39
F#3.0のType Providerってまったく知らんけど今このスレで語られてるような機能なんじゃね?
141デフォルトの名無しさん:2011/11/27(日) 21:28:16.77
>>137
だから何度も繰り返すけど、もしもJavaやC#でも obj.set_f1('abc') あるいは obj.f1 = 'abc'
のようなコードが書ければ、静的なコンパイル時型検査ができる訳だ

そして、もしそうなら「やっぱり静的型付け言語のほうがイイネ!!」という
誰もが納得する結論になるんだよ
142デフォルトの名無しさん:2011/11/27(日) 21:34:07.73
>>139
それで、あんたはどの言語のハッシュが理想だと言ってるの?
143デフォルトの名無しさん:2011/11/27(日) 21:35:07.14
>>141
だから、それをやりたければ、コンパイル時拡張があればできるよね。
って話になったんだろ。
144デフォルトの名無しさん:2011/11/27(日) 21:35:49.48
別に例外を投げるのでも良いし、option型でも良いし
Maybeモナドでも良いんじゃない?
でもnull返すのはねーよ
145デフォルトの名無しさん:2011/11/27(日) 21:36:26.39
>>141

> そして、もしそうなら「やっぱり静的型付け言語のほうがイイネ!!」という
> 誰もが納得する結論になるんだよ

やっぱり自覚はしてるんだ。 
静的なコンパイル時検査ができたほうが優れていると。

いかなる場合でも、できない言語と比べて、
出来る言語のほうが優れてるよね。
146デフォルトの名無しさん:2011/11/27(日) 21:37:23.27
>>144
だから、”標準のハッシュ” がnullを返さない言語はなにか聞いてるんだけど。
147デフォルトの名無しさん:2011/11/27(日) 21:37:26.56
>>142
まずは自分がどのハッシュで満足してるか言えよw
148デフォルトの名無しさん:2011/11/27(日) 21:38:03.16
>>147
いう相手が間違ってるw

そういうことは満足してないやつに聞けよ。
149デフォルトの名無しさん:2011/11/27(日) 21:39:29.94
>>146
Java以外は大抵例外が発生するか、デフォルト値を指定できるか、Maybe的なやつを使うだろ。
むしろJava以外でnullが言語を知りたいわw
150デフォルトの名無しさん:2011/11/27(日) 21:40:02.28
>>148
Javaで満足しているという返事と解釈した。w
151デフォルトの名無しさん:2011/11/27(日) 21:42:21.80
>>143
だから、コンパイル時拡張は「絵に書いた餅ダネ」って話になったんだろ
152デフォルトの名無しさん:2011/11/27(日) 21:43:22.37
>>149
perl
153デフォルトの名無しさん:2011/11/27(日) 21:45:20.85
>>149
ruby

http://www.rubylife.jp/ini/hash/index4.html

ハッシュオブジェクトに対して存在していないキーを指定して値を取得しようとした場合、
デフォルトでは「nil」が返されます。このデフォルトの値を「nil」から別の値に設定することが出来ます。
154デフォルトの名無しさん:2011/11/27(日) 21:46:29.61
>>149
JavaScript
155デフォルトの名無しさん:2011/11/27(日) 21:47:33.17
>>153
だから、デフォルト値を設定できるならいいだろwww
156デフォルトの名無しさん:2011/11/27(日) 21:48:36.56
null返すのはjavaとjsとperlか。ドカタ三種の神器w
157デフォルトの名無しさん:2011/11/27(日) 21:51:58.80
>>155
デフォルト値を返すハッシュを作るのは簡単だよ。
tryしてみてね。
158デフォルトの名無しさん:2011/11/27(日) 21:54:56.48
やっぱJavaにはドカチンを惹きつける何かがあるんだなw

ちなみに、Javaでnull以外を返す連想配列を実装するのは簡単だが、
Mapインターフェイスをジェネリクスで使っているかぎり
結局は同じ問題に突き当たるという罠w
159デフォルトの名無しさん:2011/11/27(日) 21:58:46.06
デフォルト値を設定できれば問題ない理屈がわかんね
有用な場合もあるけど無理なパターンもあるだろ
160デフォルトの名無しさん:2011/11/27(日) 21:58:54.10
ジェネリクスはどこから出てきたんだ?
161デフォルトの名無しさん:2011/11/27(日) 22:51:55.87
> Mapインターフェイスをジェネリクスで使っているかぎり
> 結局は同じ問題に突き当たるという罠w
ならないんだが?
162デフォルトの名無しさん:2011/11/27(日) 23:11:08.76
apache commons collections使えば良いだけのような。
163デフォルトの名無しさん:2011/11/28(月) 00:22:46.76
ガチで速度の必要な下から中位のトコは静的な言語
中から高位の層は動的な言語
使い捨てプログラムなんかも動的な言語
164デフォルトの名無しさん:2011/11/28(月) 00:31:08.44
そういやRubyが遅いという理由で
TwitterはScalaに変更したらしいね。
JVM上で動く静的型付け言語
165デフォルトの名無しさん:2011/11/28(月) 00:37:45.94
>>131
動的型付き言語に静的型チェックを入れれば出来ることを
「どうしてもできない事」とはこれいかに。

動的型付きを狭義にして限定するなら分かるけど
それは静的型付きを狭義に限定する、つまり実行時型チェックを一切認めない
というのと同じくらいナンセンスなので却下。

とすれば、静的型付きっていうのは動的型付きに制約を設けたものに過ぎなくて、
プロトタイプベースに対するクラスベースみたいなもの。

制約を付けない物にできることが制約のある物にできないことはあっても、逆はない。
166デフォルトの名無しさん:2011/11/28(月) 00:40:18.37
>>164
だからRubyがクソ遅いのは
実装者が二人揃ってタコだからで動的型付けだからじゃないと何度言えば。
167デフォルトの名無しさん:2011/11/28(月) 00:41:20.46
> 動的型付き言語に静的型チェックを入れれば出来ることを
> 「どうしてもできない事」とはこれいかに。

それやってしまったら、静的型付け言語になるんだよ。
168デフォルトの名無しさん:2011/11/28(月) 00:47:02.33
>>167
実行時には型情報を無視してても?
169デフォルトの名無しさん:2011/11/28(月) 00:49:37.62
つまりあれか、ここでは型付けの静的、動的ではなくて、
静的(コンパイル時)型チェック機構の有無だけを問うているのか?
170デフォルトの名無しさん:2011/11/28(月) 01:08:43.08
オプショナルな静的型チェック機構を持つObjective-CとかStrongtalkとかDartとかは
どっちに入るの? これらは静的型付きか動的型付きかって言ったら後者なんだけれども。
171デフォルトの名無しさん:2011/11/28(月) 01:20:29.25
>>168
実行時に型情報を無視するといえばC++がそうだ。
RTTIを有効にしなければ、型情報そのものが存在しないからな。

それでも静的型付け言語だろう。
172デフォルトの名無しさん:2011/11/28(月) 01:29:17.87
>>145
>やっぱり自覚はしてるんだ。 
>静的なコンパイル時検査ができたほうが優れていると。

もちろん、そうだよ
だから、今回の件と以前に議論になったcaseの網羅性も含めて、
Java/C#というのは「静的型付け言語としてはダメダメ言語である」と見なしている
まっとうな静的型付け言語であれば、動的結合時の型検査やcaseの網羅性検査は、
コンパイル時に(静的に)実行されるのが当たり前
もしもそういった当たり前の静的型付け言語が存在するのであれば、
(動的型付け言語の柔軟性という利点を引き換えにしても、)賞賛に値すると考える
残念ながらお前等の自慢するJava/C#はそうじゃない、欠陥言語だ

また、そういった欠点/問題点を率直に認めることから、正しい解決方法への道が開ける
だから>>125のような開き直った態度は、他人様から与えられた物に
何ら疑問を持てない思考停止状態であると見なす
そして、そんな技術的向上心を持たず知的好奇心の無いお前等をドカタと呼ぶ

OOPを自慢する若手ジャバラが古参コボラを揶揄するのと同じ構図
そんなジャバラやコボラもドングリの背比べ、同じドカタ同士の低次元な争い
173デフォルトの名無しさん:2011/11/28(月) 01:38:12.77
動的型付け言語の柔軟性の利点なんて
動的型付けのデメリットから比べれば
ミジンコみたいなもんだから
174デフォルトの名無しさん:2011/11/28(月) 01:41:59.06
> まっとうな静的型付け言語であれば、動的結合時の型検査やcaseの網羅性検査は、
> コンパイル時に(静的に)実行されるのが当たり前

まっとうな静的型付け言語の例をあげてください。
175デフォルトの名無しさん:2011/11/28(月) 01:50:47.66
静的型チェックを導入することで諦めなければならないことが無い問題領域なら
静的型チェック機構があれば便利なのは自明じゃないの?
176デフォルトの名無しさん:2011/11/28(月) 01:52:51.47
>>174
既存の静的型チェック機構は大なり小なりなんらかの問題を抱えているもんなんじゃないの?
177デフォルトの名無しさん:2011/11/28(月) 01:56:44.95
ML系の型チェックはJavaなんかよりはマシだよね。そのぶん制約も増えるけど。
178デフォルトの名無しさん:2011/11/28(月) 02:09:51.04
JavaでもEnum値で分岐するswitch文は網羅性を検証できるよ。

言語仕様としてEnum値を網羅していない場合をエラーとしていないだけであって
(網羅していないswitch文を書いたっていいじゃん)、検証自体は文法的に、静的に
出来るし、そういうツールだって書ける。実際Eclipseでオプション一つ変更すれば
Enum値を網羅していない場合をコンパイル時にエラーとしてはじけるわけで。

じゃあ何故Enumを使った場合は自動的に網羅性を検証するよう言語仕様そのもの
を変えないのかと問われれば、これは歴史的な経緯としか言えん。
もともとJavaのEnumは後付けでswitchは整数型で分岐するものだったから網羅性
のチェックといってもコンパイルの手間を考えるとdefaultの有無を確認する程度
しか現実的な解は無かった。
その後Enumでも分岐できるようになったものの、整数型の場合の動作と揃えて
網羅していない場合もエラーにならない、そういう判断になっただけの話。
179デフォルトの名無しさん:2011/11/28(月) 02:18:06.48
まとめ
- 大事なのは、静的型付きであることより静的型チェック機構の有無。
- ドカタに任せられるレベルのコードでは動的型付きのメリットは皆無。というか変に使われると逆に困る
- したがって、静的型チェック機構による制約も気にならないしメリットのほうがはるかに大きい。
- 制約を増やせばより確実な型チェックが可能になるが、その分ルールや出来ない事や場合によっては記述も増える。
- 出来ない事や記述の増加は問題ないが、ルールが増えてしまうと当然ドカタは使えなくなるから本末転倒。
- だからドカタ向けにはJavaやC#程度の型チェックでおk。
180デフォルトの名無しさん:2011/11/28(月) 02:25:35.33
>>178
せっかくenum使ったswitchの網羅性をチェックしても、
enum型変数の値をnullにするだけで
ぬるぽ発生してどの分岐も通らないJavaは素晴らしい
181デフォルトの名無しさん:2011/11/28(月) 02:33:12.34
そりゃ非nullを静的に検証する問題だから直交した話だわな。
182デフォルトの名無しさん:2011/11/28(月) 05:46:05.30
>>180
nullケースも必須にすればいいだけ。
183デフォルトの名無しさん:2011/11/28(月) 05:50:01.13
>>161
ああドカタ君にはまだ解らないか…
難しいこと言って、ゴメンね♪
184デフォルトの名無しさん:2011/11/28(月) 06:57:12.81
>>183
「同じ問題」の例示を求む。
185デフォルトの名無しさん:2011/11/28(月) 07:16:41.29
>>181
非nullを静的に検証することができるの?
186デフォルトの名無しさん:2011/11/28(月) 07:34:40.18
出来ないが。だから何を言いたいんだ?
187デフォルトの名無しさん:2011/11/28(月) 08:46:24.18
>>51
VB6は引数にかかわらず、浮動小数割り算が/で整数割り算が%だったなw
188デフォルトの名無しさん:2011/11/28(月) 16:25:16.15
>>178
>JavaでもEnum値で分岐するswitch文は網羅性を検証できるよ。

ほー、Javaでも静的に検査できるんだぁ....と思わせておいて、

>その後Enumでも分岐できるようになったものの、整数型の場合の動作と揃えて
>網羅していない場合もエラーにならない、そういう判断になっただけの話

これが結論か?できるのか/できないのか、どっちかはっきりしろよwww

まるで、こんな天気予報と同じだぞ

 明日は晴れでしょう。しかし曇ることもあります。地域によっては雨かもしれません。
189デフォルトの名無しさん:2011/11/28(月) 17:13:56.43
>>184
静的型付けではMap<K,V>のV型の値しかデフォルト値として与えられないから
マップを引けたかどうかを返り値のみから確定させる一般的方法がない。

動的型付け言語ならば、他から参照されない軽量なインスタンスを新しく生成して
それをデフォルト値に指定するだけ。Object型とか。
静的型付け言語では、V型が新インスタンス生成可能とは限らないし、
インスタンス生成が重いと使えない。

だからJavaでは返り値のみで判定するなと警告されている。
190デフォルトの名無しさん:2011/11/28(月) 19:31:19.96
書かれた動的型付けの解決策にしても全然「一般的方法」ではないのだが。

軽いクラスのインスタンスとしてデフォルト値を用意する方法にしても、
それはそう実装できるというだけの話であって、APIで強制できる一般的方法
ではない。このmapはkeyが無い場合はこの値を返しますよ。単なるダミーの
値ですから信用して使ったりしないで下さいね云々と個別に規約を文書化する
必要がある。規約を知らないと判別出来ない。知らずにデフォルト値をいじる
バカも出る。これのどこが「一般的」?

良いところ「個別の解決策」止まりだし、似たような方法は別にJavaのMap
でもMap<K, Object>とでもすれば出来る。ただvalueについて静的型付けの
恩恵を受けられなくなるから、普通はやらない。

一般的な方法というのは言語の組み込み定数としてnullとは別にundefinedを
持っているとか、keyを与えるとkeyとvalueのペアを返す関数が用意されて
いるとか、keyが無いと例外を投げるとか、どういうmapであっても常に返値
だけで判別出来る方法。
「返り値のみから確定させる一般的方法」の有無というのは要するにこう
いった定数や関数が用意されているか否かの問題であって、型付けが動的
静的云々は全く関係が無い。

Javaだったらgetが例外を投げるようにするとかキーバリューのエントリー
を引っ張って返すようなメソッドを用意するとかすれば良いし、そういう
デコレーターを書くのも簡単。
でもJava Collections Frameworkはこれらを持っていない。書こうとすれば
書けるものを何故用意しなかったか理由は知らないけれども、単に需要が
薄いと判断された事は大いに想像できる。他の言語でも持っていない例は
多いところから見ても、需要は薄そうだ。
191デフォルトの名無しさん:2011/11/28(月) 19:32:44.98
>>190
一般というのは、任意の型Vについて適用可能な手法だということ。
広く用いられているという意味ではない。
192デフォルトの名無しさん:2011/11/28(月) 19:35:48.82
>>190
> 似たような方法は別にJavaのMap
> でもMap<K, Object>とでもすれば出来る。

すまんが、正直、馬鹿すぎて笑えた。
193デフォルトの名無しさん:2011/11/28(月) 20:12:17.30
・Java Collections FrameworkというAPI自体は任意のVについて返り値のみ
 からkeyの有無を確定させる「一般的方法」を持たない。
 持たない理由の推測は>>190に書いたとおり。

・ただそれを言えば動的型付けの言語だってAPIとして「一般的方法」を持た
 ない言語は多い。そういう場合は手作りをする必要がある。

・Javaの場合は「APIを拡張」することで任意のVについて「一般的方法」を
 導入できる。どんなアプローチがあるのかも>>190に書いたとおり。

・動的言語の場合は加えて「Vの値域を拡張」することで「一般的方法」を
 導入することも出来る。具体的にはデフォルト値の導入。

・APIを拡張せずに「一般的方法」を導入出来る点は確かに動的型付け言語
 のメリットかもしれない。ただAPIはそのままの代償として規約を新たに
 導入する必要がある。バカ避けとしては、どうなんだろうね?

・Map<K,Object>は馬鹿で結構。馬鹿だから普通はやらない。
194デフォルトの名無しさん:2011/11/28(月) 20:16:30.98
JavaもC++みたいにmap<K,V>の総称型Vのデフォルトコンストラクタを使って
インスタンス生成してデフォルト値として返せたら良かったね
195デフォルトの名無しさん:2011/11/28(月) 20:26:35.68
>>192
ジェネリクス導入前のJavaみたいなコードになりそうだな
その頃から使ってるから書けるけども、静的型には程遠かったなあ…
196デフォルトの名無しさん:2011/11/28(月) 20:36:52.78
>>194
Apache Commons Collectionsで出来る話とは違う話かな?
デフォルト値の指定自体はDefaultedMapで、デフォルト値を生成する
コンストラクタの指定はLazyMapで出来る。
197デフォルトの名無しさん:2011/11/28(月) 20:58:29.27
>>196
new V()が出来ればfactoryオブジェクトを用意する手間が要らなくて
良かったねってこと
198デフォルトの名無しさん:2011/11/28(月) 21:20:15.92
そういうのは、自作ユーティリティライブラリを
作ればいいだけだから、すごく小さな問題でしかないな。
199デフォルトの名無しさん:2011/11/28(月) 21:26:47.02
さすが冗長言語Javaのドカタやってるだけあるなw
良く訓練されてやがるww
200デフォルトの名無しさん:2011/11/28(月) 21:27:57.07
>>197
う〜ん、確かにそれは出来ないなぁ。
替わりの策としてはファクトリを用意せずにClass<V>を渡すバージョンは
作ることが出来そうだけれども、デフォルトコンストラクタの存在確認が
実行時になってしまうのがいやんなかんじ。
201デフォルトの名無しさん:2011/11/28(月) 21:29:03.30
せめてlambdaがあれば……
202デフォルトの名無しさん:2011/11/28(月) 22:04:08.80
Scala対する動的型付け言語の有利な点って何かあるの?
203デフォルトの名無しさん:2011/11/28(月) 22:31:06.15
204デフォルトの名無しさん:2011/11/28(月) 23:16:44.91
>>203
やっぱり、Javaの方がいいのか。
205デフォルトの名無しさん:2011/11/28(月) 23:17:23.35
> Javaが次のリリースでモジュールとラムダを導入しようと、
> そしてそのリリースがさらに1年遅れようと、Scalaが安定するよりも早く
> 多くのJava開発者に関数型プログラミングをもたらすだろう。
> Javaに追い抜かれる前にScalaが体勢を立て直すのはもう遅すぎるかもしれない。
206デフォルトの名無しさん:2011/11/29(火) 00:27:34.40
nilポ
207デフォルトの名無しさん:2011/11/29(火) 03:47:46.34
>>188
出来る。Eclipseなどの外部ツールを使えば出来る。
明日の天気は雨ですが内陸部では晴れるでしょう。そんな感じ。

言語としてJavaはswitch文でのenumの網羅性は要求していない。
しかしコーディングの規約として網羅性を強制したいのであれば、それをツールで
支援することは何も妨げられないということ。
Cでもgccはswitch文でのenumの網羅性を検証するオプションがある。
208デフォルトの名無しさん:2011/11/29(火) 05:01:39.17
switch文の網羅性をチェックしたところで、
ドカタは空のdefault枝を書いて /* おまじない */とかコメントつけるだけ。
209デフォルトの名無しさん:2011/11/29(火) 19:52:15.88
>>208
そういうプログラマ個人に依存した話は却下します。
どんな言語を使おうが、その人がやるなら同じ事ですから。
210デフォルトの名無しさん:2011/11/29(火) 23:00:34.42
しかし水は低きに流れる
土カッチにもマトモなのもいれば
果てしなく杜撰とか低レベルなのも
211デフォルトの名無しさん:2011/11/29(火) 23:38:56.00
>>210
頭大丈夫?
212デフォルトの名無しさん:2011/11/30(水) 00:00:03.75
>>208
>ドカタは空のdefault枝を書いて /* おまじない */とかコメントつけるだけ。

それこそツールではじけばいいだけやん。
213デフォルトの名無しさん:2011/11/30(水) 02:24:01.08
悪貨は良貨を駆逐する。
214デフォルトの名無しさん:2011/11/30(水) 02:25:14.82
今のお金は、悪貨だとでもいうのか?
実際は悪貨のほうが駆逐されてるだろ。
現実見ろよ。
215デフォルトの名無しさん:2011/11/30(水) 04:58:11.20
>>212
本当にデフォルトは処理無しな場合とどう区別する?
216デフォルトの名無しさん:2011/11/30(水) 07:11:35.21
>>214
金貨銀貨は既に過去のもの
つまり駆逐済み
217デフォルトの名無しさん:2011/11/30(水) 09:45:24.91
ふう 馬鹿だな。 http://www.proverb.jp/proverb247.html
こんなリンクを貼らないといけないなんて中学生じゃあるまいし。
218デフォルトの名無しさん:2011/11/30(水) 10:05:30.62
いやそんなのは分かってる上だろ、どう見ても。
理論が飛躍して言葉遊びの域に達してるだけで。

>>214は新言語が旧言語の悪いところを潰していってるのではないかと言い、
>>216は正直良く分からんが、
これまでの通貨の歴史を紐解けば今の言語が悪貨であることが示唆されると言ってるんじゃないのか。
219デフォルトの名無しさん:2011/11/30(水) 16:51:37.54
まあ含みの多い言葉だしな
dos/windows,x86,真性ドカタと本物グラマ、
php等例には事欠かない
逆は真ではないけど
220デフォルトの名無しさん:2011/11/30(水) 17:20:05.85
221デフォルトの名無しさん:2011/11/30(水) 20:30:19.95
>>218
概ねそのとおり。

悪貨は良貨を駆逐するなんてのはただのことわざで、根拠はない。
逆に良貨が悪貨を駆逐することもある。

ことわざってのは定理なんかではなく、そういうこともあるよね〜レベル。
逆の意味を持ったことわざだってある。絶対正しいことを言っているわけじゃない。

だから、「悪貨は良貨を駆逐する。」なんてことをいう人は、
正しいか間違ってるかを考えずに、思考停止しているだけの馬鹿と俺は判断する。
222デフォルトの名無しさん:2011/11/30(水) 20:33:42.90
思考停止というよりか、悔しさが含まれてるように見えるな。

勝利したものに対して「勝ったほうが負けなんだ!」って言ってるみたいな感じw
223デフォルトの名無しさん:2011/11/30(水) 20:37:02.90
そもそもJavaは良貨だよ
ドカタの脳みそに入る言語の中では
224デフォルトの名無しさん:2011/11/30(水) 20:47:41.84
また、勝った方が負けなんだって言ってるように聞こえたw
225デフォルトの名無しさん:2011/11/30(水) 20:51:47.34
動的も静的も違わないだろ。
なぜならば機械的に動的 ⇒ 静的の変換が可能だからだ。
型が無限にあれば静的にできない可能性があるが、実用上ではありえない。
226デフォルトの名無しさん:2011/11/30(水) 20:52:11.30
まあ、ドカタという言葉を使ってる時点で
勝ち組に対する僻みだからねw
227デフォルトの名無しさん:2011/11/30(水) 20:54:46.53
問題があるとしたら自動で型を推定、識別する部分だが、そしたら明示的に型を教えられる仕組みを組み込んでおけばいい。
228デフォルトの名無しさん:2011/11/30(水) 21:15:47.32
型を教えられる仕組み

・関数の引数に型が明記されている。
・変数に型が明記されている。
・オブジェクトの生成から、型をチェックしたい箇所のコードすべてで型が明記されている。

この3つがないと、型チェックはできないからね。
コードのどこかで型情報がなくなったりしたら
意味なくなっちゃうし。

結局、プロジェクトの全部の箇所にちゃんと型を明記しないといけなくなるんだけど。
229デフォルトの名無しさん:2011/11/30(水) 21:56:52.54
>>225
動的に型を定義可能な言語の場合は?
230デフォルトの名無しさん:2011/11/30(水) 23:56:08.45
頭悪くてよく分からん。
動的な型付けでしかできないメリットをコードで見せて。
231デフォルトの名無しさん:2011/12/01(木) 02:00:48.14
ここにはきっと、スパゲッティー屋さんがいる。
232デフォルトの名無しさん:2011/12/01(木) 02:07:05.00
自分はタコス屋さんだけど、何か?
233デフォルトの名無しさん:2011/12/01(木) 02:24:05.21
"1" + 1 は "2" でないと違和感がある。
"11" や 2 だとおかしい。
234デフォルトの名無しさん:2011/12/01(木) 05:48:37.92
>>230
eval
235デフォルトの名無しさん:2011/12/01(木) 06:58:10.57
動的な言語のスパゲティは
静的な言語よりキツいのは確か
236デフォルトの名無しさん:2011/12/01(木) 07:18:28.53
>>228
> この3つがないと、型チェックはできないからね。

できます。
237デフォルトの名無しさん:2011/12/01(木) 08:14:36.46
まあ、>>228は型推論を知らない、知りたくない、
見ない、見たくない、聞こえない、聞きたくない.... ヤシなんだろw
238デフォルトの名無しさん:2011/12/01(木) 08:39:19.24
ドカタの脳みそに入る言語のリストに型推論のある言語は入ってない
239デフォルトの名無しさん:2011/12/01(木) 09:53:38.42
>>118
ハッシュキーに 'f1' と文字列を書くことはない。
最低限定数として定義するし Java なら列挙型を使う。

>>139
キーに対する値に生の null を使う設計が脆弱。null object pattern を使う。

>>189
軽量なデフォルトコンストラクタを持たない V をリファクタリングするには
(1) V からインタフェース I を抽出する
(2) V の利用を I に置き換える
(3) I を実装するデフォルト値用のクラス N を実装する
240デフォルトの名無しさん:2011/12/01(木) 10:04:09.76
>>238 静的型付きでなければ(キリッ
ていうからなにかと思えば、Javaのことだった、ってのが
お約束パターン過ぎてあきれるよね。
241デフォルトの名無しさん:2011/12/01(木) 11:25:03.25
>>240
次の二つの階級の話が混じってるから同じパターンのループになってしまう。

無差別級:全ての言語で比較
ドカタ級:ドカタが使える言語で比較


だからドカタでも使える言語を明らかにした方が良い。
Javaは鉄板として、あと何があるのか。
242デフォルトの名無しさん:2011/12/01(木) 11:30:10.70
COBOL
243デフォルトの名無しさん:2011/12/01(木) 12:04:50.87
.netより前のVB
244デフォルトの名無しさん:2011/12/01(木) 12:29:44.44
ドカタの定義はどこだよ。
今の流れだと「使える」のレベルによってドカタかそうでないかが分類されるってより、
言語自体とドカタを結びつけようとしていて危険だろ。
245デフォルトの名無しさん:2011/12/01(木) 12:39:13.51
ドカタってのは、技術に投資せず今日の収入のためだけにプログラマやってる奴のことだろ

求人市場に案件のある言語は全部ドカタ言語だよ
246デフォルトの名無しさん:2011/12/01(木) 12:40:04.30
ああ、だから今マイナーな言語でも流行って使われるようになればドカタ言語になる
技術の問題じゃない。金の問題。
247デフォルトの名無しさん:2011/12/01(木) 12:42:53.72
ドカタの自覚症状がある人達が
自分の使える言語を書いていけば良いんじゃないの?
248デフォルトの名無しさん:2011/12/01(木) 12:45:11.19
一方、研究者は人と同じことやってたら食えないから
常に新しいパラダイムを提唱してくる。使える使えないは二の次。
使える使えないが真の意味で実証されるのはドカタが使うようになった時で、
その時には当の研究者はとっくにトンズラして新しい研究を始めてる。
これのループ。
249デフォルトの名無しさん:2011/12/01(木) 12:57:08.65
Javaドカタ「今マイナーな言語も流行ればドカタ言語になる(キリッ」
250デフォルトの名無しさん:2011/12/01(木) 13:01:51.34
まあOakはドカタ言語じゃなかったし
251デフォルトの名無しさん:2011/12/01(木) 17:02:29.83
同じことができる代わりがいくらでもいるような人達の事じゃないの?
仮にその人がいなくなっても、代わりはすぐに補充できる。

でも、代わりが利かない人ってヘッドハンティングなどで抜けたら、
代わりの補充が利かないよね。

年齢以外の要素で違いが見いだせない人がJavaには多そうってことなんだろ?
252デフォルトの名無しさん:2011/12/01(木) 17:17:19.05
ここの人にBig-Oって何って聞いたらなんて返ってくるだろう?
253デフォルトの名無しさん:2011/12/01(木) 18:54:07.42
空気読めてないって答えが返ってくると思う。
254デフォルトの名無しさん:2011/12/01(木) 18:54:25.15
がんばって検索したらビッグオー記法とかいうのがでてきたよ

最初に思いついたのはショータイム
255デフォルトの名無しさん:2011/12/01(木) 22:39:39.44
>>233
エラーだろjk
256デフォルトの名無しさん:2011/12/01(木) 23:05:18.58
>>234
evalは目的じゃなくて手段でしょ?

なんのためにevalを使うの?
Perlで例外をトラップするために使うは答えになってないよ。
257デフォルトの名無しさん:2011/12/01(木) 23:10:54.65
>>241
> だからドカタでも使える言語を明らかにした方が良い。
> Javaは鉄板として、あと何があるのか。

意味がわからん。
動的型付け言語と静的型付け言語の話だろ?

Java以外というのは静的型付け言語を言えばいいのか?
よく使われてる言語だと、C、C++、C#、VB.NET、Scala、 Objective-Cあたりだね。

動的型付け言語はよく使われてるといえるのは、Ruby、Perl、PHP、JavaScript、Pythonぐらいか?
258デフォルトの名無しさん:2011/12/01(木) 23:47:16.22
ScalaやC#やC++11には(OCaml程ではなくても)型推論があるから
それらを知ってれば>>228のようなことは書かないと思うけど。

>>228が特別に無知だったでFA?
259デフォルトの名無しさん:2011/12/02(金) 00:00:39.44
>>258
お前型推論を誤解してないか?

型推論ってのは、型書くのを省略出来るだけで、
型を書いてるのと全く一緒なんだが。
260デフォルトの名無しさん:2011/12/02(金) 00:01:37.04
型を推論できるのは、
どこかに型の情報があるから。
261デフォルトの名無しさん:2011/12/02(金) 00:05:36.47
省略できるんだから明記しなくても良いってことだろ
それとも明記って日本語を理解してないのか?

> ・関数の引数に型が明記されている。
> ・変数に型が明記されている。
> ・オブジェクトの生成から、型をチェックしたい箇所のコードすべてで型が明記されている。

全部間違い
262デフォルトの名無しさん:2011/12/02(金) 00:12:12.07
>>261
> 省略できるんだから明記しなくても良いってことだろ

よく見ると省略されてない。

一見省略されているように見えるが、遠くで明記されている。
それを見て推論しているだけ。

どこにも明記されていなければ、絶対にわかりません。
263デフォルトの名無しさん:2011/12/02(金) 00:15:40.14
まあ、Javaには以下のようなゴミみたいな型推論しかないからねぇ。
知らないのも無理は無いよ。

Map<String, List<String>> anagrams = new HashMap<>(); // 右のダイヤモンドオペレータ内を省略可
264デフォルトの名無しさん:2011/12/02(金) 00:17:01.41
反論するなら、どこでも明記されてない状態でも
推論する方法があるとか言うべきだろ。

反論の仕方がおかしい。
265デフォルトの名無しさん:2011/12/02(金) 00:21:32.82
MLのHindley/Milner型推論では、一切の型注釈無しに、完全かつ健全に、
関数の「もっとも一般的な型」を推論できる事が保証されている
266デフォルトの名無しさん:2011/12/02(金) 00:26:25.16
それは型が自由に作れない言語だから・・・
267デフォルトの名無しさん:2011/12/02(金) 00:26:43.88
全ての関数や変数に型を明記する必要がある
→ プログラムのどこかで型を明記する必要がある
→ どこにも明記してなくても明記してるのと同じ ← いまここ
268デフォルトの名無しさん:2011/12/02(金) 00:50:51.61
> どこにも明記してなくても明記してるのと同じ

だれがそんな事言ったんだ?
269デフォルトの名無しさん:2011/12/02(金) 00:58:39.39
>>266
MLは型は自由に作れる
MLで厳格な型推論が可能なのは、演算子多重定義やメインストリームのOO言語における
ポリモーフィズムやディスパッチの類が存在しないからだろ

端的に言うと+がintにしか定義されていないので
x + yという式を見たらMLのコンパイラはxとyがintだと推論できる
270デフォルトの名無しさん:2011/12/02(金) 01:11:19.88
>>269
一応OCamlにはクラスやオブジェクトもあって、オブジェクトを引数に取る関数が書けるけど、
構造的部分型を採用してるから型注釈は必須じゃない(列多相が型推論される)
271デフォルトの名無しさん:2011/12/02(金) 06:34:08.19
型推論ってのは、型を書かなくてもいいってことじゃなくて、
型の中にパラメトリックな多相があっても、
矛盾のないように型パラメータを具体化して
型の整合性を検証できるということ。

型宣言がめんどくさいから使うんじゃなくて、
より抽象度が高いコードを書くために使うんだよ。

やっぱドカタに静的型付けを使わせるのは壮大なムダでしかないなw
272デフォルトの名無しさん:2011/12/02(金) 06:56:25.48
いつから、めんどくさいから使うって流れに勘違いしてた?
273デフォルトの名無しさん:2011/12/02(金) 07:05:58.09
ずっと型注釈無しで型推論が可能かどうかを議論してたのにね
無知を晒したから話を変えようとしてるのかな?
274デフォルトの名無しさん:2011/12/02(金) 07:47:09.28
>>271
×)ドカタに静的型付けを使わせるのは壮大なムダ
○)ドカタにJava以外を使わせるのは壮大なムダ
275デフォルトの名無しさん:2011/12/02(金) 08:41:13.23
とまあ、またつまらないドカタ罵倒の流れにするしか脳がないわけだ。
276デフォルトの名無しさん:2011/12/02(金) 08:57:49.43
本当だよな
多少は真面目な流れだったのにドカタとか言い出した>>271は反省しろ
277デフォルトの名無しさん:2011/12/02(金) 09:10:21.78
>>272-273 だーかーらー、
省略じゃなくて抽象なんだって指摘されてることに気付けよw

ほんとドカチンは頭が悪いな
278デフォルトの名無しさん:2011/12/02(金) 10:25:30.03
>>275-276
これから現場ですか?これからドカタ仕事が増えますね!お疲れ様です!
279デフォルトの名無しさん:2011/12/02(金) 10:29:17.03
型推論をする目的はひとまず置いといて、
とりあえず型推論するのに変数や関数の型宣言は必要無いってことでFAでいいな?
280デフォルトの名無しさん:2011/12/02(金) 11:41:41.95
>>279
リテラルやコンストラクタやコンスタントの型付けは自明である、という前提ならYES
281デフォルトの名無しさん:2011/12/02(金) 12:15:05.41
型クラスがあるか無いかで違うかな
282デフォルトの名無しさん:2011/12/02(金) 22:14:02.81
明日はドカタは無意味なオープンソースカンファレンスなんかにいって
一日無駄に過ごすんだろうなw
283デフォルトの名無しさん:2011/12/03(土) 08:51:02.93
え?Javaとオープンソースカンファレンスに何の関係が?
284デフォルトの名無しさん:2011/12/03(土) 12:50:27.33
>>234
それのメリットって何ですか?
285デフォルトの名無しさん:2011/12/03(土) 15:14:54.07
>>282 自身が、自分の住んでる世界以外を全く把握できない、という典型的なドカタ病である件
286デフォルトの名無しさん:2011/12/03(土) 17:19:23.19
動的型付け言語は、evalや実行時型拡張を制限して
型推論を付ければ静的型付け言語にできる。
もちろん制限付きであってもJavaよりずっと簡潔なコードになる。

一方Javaには >>263 みたいな型推論しか無いんだから、
Javaのドカタが型推論を憎む気持ちは分かるよ。
すっぱい葡萄ってやつだね。
287デフォルトの名無しさん:2011/12/03(土) 17:54:26.78
まあ、動的型付け言語プログラマはテストを書けば
安全なプログラムを作れるのを知ってるので、
そういう制限付きの言語処理系に対する需要は少ないけどな
288デフォルトの名無しさん:2011/12/03(土) 18:54:27.27
eval される文字列内部のカバレッジって測定できるの?
289デフォルトの名無しさん:2011/12/03(土) 21:11:00.71
>>283
https://www.ospn.jp/osc2011-fukuoka/modules/eventrsv/?id=1&noform=1
>
> JavaOne 2011 サンフランシスコの最新レポートについて
>
> 担当:日本オラクル株式会社
>
> 講師:寺田 佳央(日本オラクル シニア Java エバンジェリスト )

OpenJDKって知ってるか?
290デフォルトの名無しさん:2011/12/03(土) 21:12:30.21
>>286
動的にし型がわからないという大きな問題が
解決できない限り、動的型付け言語に未来はないよ。
291デフォルトの名無しさん:2011/12/04(日) 06:18:07.12
実行前から型を決めてしまうという大きな問題が
解決できない限り、静的型付け言語に未来はないよ。

292デフォルトの名無しさん:2011/12/04(日) 06:49:14.57
静的型言語にも動的型言語にも未来はあるよ
得手不得手があるからね

Javaには未来はないけど
293デフォルトの名無しさん:2011/12/04(日) 07:39:56.66
Java以上に現在がある言語もそう無いと思うけど。
294デフォルトの名無しさん:2011/12/04(日) 08:06:33.19
>>289
今回はJava関連の特別なイベントがあるのかと思った
いくら暇でもそんな下らないセッション聴きに福岡まで行かないだろ
295デフォルトの名無しさん:2011/12/04(日) 10:08:46.95
>>293
完全に下降線だが?
296デフォルトの名無しさん:2011/12/04(日) 10:13:45.32
まあ行くならJavaOne Tokyo 2012だよな。
日時は2012年の4月4日(水)〜4月5(木)の2日間だ

やっぱりなにげにJavaが一番堅牢な気がするよ。
動的型付け言語とか、Javaに比べてコミュニティが小さいから
適当な意思決定によって機能が決まってる気がする。

Javaの場合はコミュニティがでかい。機能を決める際も
過去との互換性などを十分に考慮して決められる。
で言語仕様だけではなく周辺技術(ライブラリ・フレームワークなど)も
巻き込んで大プロジェクトって感じ。

動的型付け言語はね。大きいといってもやっぱり個人レベルの話。
297デフォルトの名無しさん:2011/12/04(日) 10:15:42.01
いまだにJavaにしがみつくドカタか…
可哀想だが、自己責任だよな…
298デフォルトの名無しさん:2011/12/04(日) 10:20:32.60
>>295
認識が甘いよ。
他の動的型付け言語で、

デスクトップアプリ作れますか?
3Dバリバリのアプリ作れますか?
組み込みアプリ作れますか?
API仕様は決まっていますか?(規格がありますか?)
そのAPI仕様に従った実装がいくつもありますか?(競争がありますか?)
ライブラリは個人が作って放置されてるようなものではなく、ちゃんと大きな所でメンテナンスされてますか?
299デフォルトの名無しさん:2011/12/04(日) 10:21:51.54
glassfishってなに?
300デフォルトの名無しさん:2011/12/04(日) 10:22:04.33
>>298
自分の無知を晒すのって、楽しい?
301デフォルトの名無しさん:2011/12/04(日) 10:23:18.64
Rubyとか一発屋で終わったしな。
ではじめの伸びが高かっただけで
現実はこんなもんよ。

http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html
Position
Nov 2011 Position
Nov 2010 Delta in Position Programming Language Ratings
Nov 2011 Delta
Nov 2010 Status
1 1 Java 17.874% -0.63% A
2 2 C 17.322% +0.61% A
3 3 C++ 8.084% -1.41% A
4 5 C# 7.319% +1.61% A
5 4 PHP 6.096% -1.72% A
6 8 Objective-C 5.983% +2.79% A
7 7 (Visual) Basic 5.041% -0.43% A
8 6 Python 3.617% -2.06% A
9 11 JavaScript 2.565% +0.90% A
10 9 Perl 2.078% -0.39% A
11 10 Ruby 1.502% -0.40% A
12 20 PL/SQL 1.438% +0.78% A
13 13 Lisp 1.182% +0.09% A
14 15 Pascal 0.991% +0.21% A
15 21 MATLAB 0.955% +0.32% A--
16 12 Delphi/Object Pascal 0.872% -0.77% A
17 23 ABAP 0.847% +0.25% A--
18 22 Lua 0.635% +0.02% A-
19 16 Ada 0.622% -0.07% B
20 19 RPG (OS/400) 0.620% -0.04% B
302デフォルトの名無しさん:2011/12/04(日) 10:23:48.60
>>300
えと、頑張れば出来ますって話をしたいのかな?
303デフォルトの名無しさん:2011/12/04(日) 10:25:13.18
tiobeって、コピペドカタランキングだろw
304デフォルトの名無しさん:2011/12/04(日) 10:25:15.10
>301
ここってなんでいつも C と C++ を分けて集計してるんだろうね
305デフォルトの名無しさん:2011/12/04(日) 10:26:41.75
>>304
C/C++なものを両方にカウントするためだろ?
306デフォルトの名無しさん:2011/12/04(日) 10:27:26.40
えっ?
307デフォルトの名無しさん:2011/12/04(日) 10:30:43.97
>>298
>デスクトップアプリ作れますか?
>3Dバリバリのアプリ作れますか?
>組み込みアプリ作れますか?
>API仕様は決まっていますか?(規格がありますか?)
>そのAPI仕様に従った実装がいくつもありますか?(競争がありますか?)
>ライブラリは個人が作って放置されてるようなものではなく、ちゃんと大きな所でメンテナンスされてますか?

という質問よりも「1ヶ月でリリースできますか?」という質問に重きがおかれる時代だということでは。
もちろん用途によるわけだが、「何よりも開発期間の短さ」が求められる仕事の割合は高まっていると感じる。
308デフォルトの名無しさん:2011/12/04(日) 10:31:06.19
>>301
そこに静的型付け言語と、動的型付け言語のシェアのグラフがでてるけど、
静的型付け言語の方が、2倍以上使われてるのは当たり前として、

railsが登場した2004年に一気に動的型付け言語が普及したけど、
2008年ぐらいを境に静的型付け言語に戻ってきてるんだよな。

その理由は動的型付け言語が素晴らしかったのではなく、
フレームワークがシンプルだったのと、冗長ではない書き方ができただけで
それらが、静的型付け言語にも搭載されるようになったから
なんだ、静的型付け言語でいいんじゃねと見直されるようになったからだろう。

あと動的型付け言語がやっぱりそこまでのメリットがないよねって
気付き始めたんだろう。
309デフォルトの名無しさん:2011/12/04(日) 10:32:28.42
検索ベースのランキングだから、「C/C++について」と書いてあるページはCとC++の両方にカウントされるだろうな。
310デフォルトの名無しさん:2011/12/04(日) 10:33:32.17
>>307
railsならブログが10分でできます。

ただし、3分クッキングよろしく
予め用意されたものを、なんども練習して
できます。

え? オリジナルのもの?
そんなものが10分なんかで出来るわけがないじゃないですかw
動的型付け言語を使ったって、短期間でリリースできることはないんだよ。
311デフォルトの名無しさん:2011/12/04(日) 10:34:27.58
そこのグラフ、JavaとC++に統計的に有為なレベルで下降トレンドがあって笑えない
312デフォルトの名無しさん:2011/12/04(日) 10:35:00.32
TIOBEが言語の将来性をあらわすなんていう馬鹿な解釈している阿呆なんて
この世に存在しているのか!?
313デフォルトの名無しさん:2011/12/04(日) 10:36:55.98
>>311
動的型付け言語のエース
PHPのおかげですね。
314デフォルトの名無しさん:2011/12/04(日) 10:37:28.75
>>312
現在のデータを出してるだけなのに、
なんで将来の予測だと思っちゃったの?w
315デフォルトの名無しさん:2011/12/04(日) 10:37:47.78


データはデータとして
ちゃんと受け止めなきゃあかんよ


316デフォルトの名無しさん:2011/12/04(日) 10:38:47.38
Rubyのこの下降ぶりは笑うしかないwww
http://www.tiobe.com/index.php/paperinfo/tpci/Ruby.html
317デフォルトの名無しさん:2011/12/04(日) 10:40:08.94
C#とObjective-Cが順調に伸びてるよね。このどっちも静的型付け言語
http://www.tiobe.com/content/paperinfo/tpci/C_.html
http://www.tiobe.com/content/paperinfo/tpci/Objective-C.html
318デフォルトの名無しさん:2011/12/04(日) 10:48:11.71
Objective-CはC互換の部分は静的型付けだけど、
オブジェクトシステムは動的型付けですよ
319デフォルトの名無しさん:2011/12/04(日) 10:50:09.56
>>317
C# は Windows アプリ開発という一定のパイの中で移行しているだけ。
Objective-C は iphone アプリ開発のため。

そのケースはどちらも、ターゲットによって開発言語がほぼ決まってしまう例。
言語の長所短所は二の次だと思う。
320デフォルトの名無しさん:2011/12/04(日) 10:52:13.44
> そのケースはどちらも、ターゲットによって開発言語がほぼ決まってしまう例。
> 言語の長所短所は二の次だと思う。

その理屈で言えばJavaScriptも同じかな。
動的型付け言語げ唯一伸びてる言語
321デフォルトの名無しさん:2011/12/04(日) 10:54:21.39
なるほど。モバイルとウェブの普及により
使える言語が限定されて、その結果他の言語のシャアが下がっただけで、
やっぱりJavaは安定していると見なせるな。

極端に下がったものは、下がったと判断するべきだろうけど。
Rubyとかw
322デフォルトの名無しさん:2011/12/04(日) 10:58:41.17
その理屈ならCも下がってないとおかしい
323デフォルトの名無しさん:2011/12/04(日) 11:04:36.46
>>322
C言語は組み込みに強いからモバイルとかにも搭載されてるよ。
324デフォルトの名無しさん:2011/12/04(日) 11:16:57.88
Oracleが買収で手に入れたプロダクト = オワコン
325デフォルトの名無しさん:2011/12/04(日) 11:19:59.01
OpenJDKはオープンソース。
OpenJDKはOracleが買ってない。
OracleはJava SE 7をOpenJDKをベースに切り替えた

ここらへんは常識なんで知っといてね。
326デフォルトの名無しさん:2011/12/04(日) 11:36:05.48
>>316
Railsバブルがあって
やっとそれがはじけて
元の状態に落ち着いた感じ屋根
327デフォルトの名無しさん:2011/12/04(日) 11:39:34.94
ORACLEの新しいCMのコピー思いついた

オラクルおわってる
328デフォルトの名無しさん:2011/12/04(日) 11:54:02.34
OpenOfficeとLibreOfficeの一件はマジ終わってるとオモタ
何がしたいのかと
329デフォルトの名無しさん:2011/12/04(日) 11:57:34.36
OpenOffice → LiberaOfficeにフォーク
Java → OpenJDKメインに変更
MySQL → ?
VirtualBox → ?
GlassFish → ?
NetBeans → ?
330デフォルトの名無しさん:2011/12/04(日) 12:00:10.15
>>322
C言語は動的型付け言語でライブラリを作ったが遅いから、
C言語で書きなおすかって用途に使われてるんだよw
331デフォルトの名無しさん:2011/12/04(日) 12:05:02.36
まあ C で書いて各言語のバインディングを提供するというのは定石ですね。
332デフォルトの名無しさん:2011/12/04(日) 12:21:24.13
>>329
こうしてみるとオラクルが片っ端からOSS敵対買収しまくってるのがわかるな
333デフォルトの名無しさん:2011/12/04(日) 12:27:53.03
ドカタにとって動的言語=ルビーwってのはよくわかった
334デフォルトの名無しさん:2011/12/04(日) 13:46:01.06
×動的言語
○動的型付け言語

なんで、馬鹿は 間違えるんだろうな?

動的型付け言語と言えばPHPなのかな。
あれも馬鹿用言語らしいが。
335デフォルトの名無しさん:2011/12/04(日) 14:18:16.83
こいつが一番間違えてるな
336デフォルトの名無しさん:2011/12/04(日) 14:23:30.85
ほほうそれで?
337デフォルトの名無しさん:2011/12/04(日) 14:50:55.07
>>334
動的言語しらないの?
動的型付き言語とは別の概念だよ?
338デフォルトの名無しさん:2011/12/04(日) 14:55:22.71
>>337
ヒント:スレッドタイトル
339デフォルトの名無しさん:2011/12/04(日) 14:56:38.92
>>337
今あるほとんどの言語(例 Java)は
動的言語だよ。
340デフォルトの名無しさん:2011/12/04(日) 14:57:26.25
で?動的言語と動的型の関係も解らないかほどのドカチンなのか?
341デフォルトの名無しさん:2011/12/04(日) 14:58:57.97
まさか、リフレクションがあれば動的言語だと思ってる?
ぷ…
342デフォルトの名無しさん:2011/12/04(日) 15:02:01.28
>>341
は? インターフェースとかの話だろ。
インターフェースを使っていると
どの具象クラスのメソッドが呼び出されるかは、
実行時にならないと決まらない。
343デフォルトの名無しさん:2011/12/04(日) 15:12:31.99
>>342
ぷ…
344デフォルトの名無しさん:2011/12/04(日) 15:14:09.14
その理屈だとC言語すら動的言語だwww
関数へのポインタがあるからな
345デフォルトの名無しさん:2011/12/04(日) 15:23:32.74
>>344
そのとおりだけど?

静的言語っていうのはFortranやBASICやCOBOLみたいなもの。
346デフォルトの名無しさん:2011/12/04(日) 15:25:59.88
クスクス…
347デフォルトの名無しさん:2011/12/04(日) 15:27:57.40
まさかBASICに動的性がないと思ってる素人がいるとは...
348デフォルトの名無しさん:2011/12/04(日) 15:30:49.48
349デフォルトの名無しさん:2011/12/04(日) 15:31:59.31
このあなりで多義語ないしはコンテキスト依存だと気づけるよね
それに気づかず議論したがる奴はバカなの?死ぬの?
350デフォルトの名無しさん:2011/12/04(日) 15:32:09.59
どんな言語にも静的性はあるし
どんな言語にも動的性もある
その上でその言語が何を指向しているかが問題だろうに

Cを動的言語だとか、なんだよその中二病はw
351デフォルトの名無しさん:2011/12/04(日) 15:45:07.41
動的言語と動的型付け言語の違いは何ですか?
352デフォルトの名無しさん:2011/12/04(日) 15:53:14.40
2ch に書き込む前に、直訳でいいから "dynamic language" で検索して
検索結果のトップに出てくる wikipedia を見るくらいしないのかね。
そうすれば、寄付金募集のすぐ下にデカデカと注意喚起があって
http://en.wikipedia.org/wiki/Talk:Dynamic_programming_language
このくらい議論の余地のある言葉なんだなあと、すぐに分かると思うのだが。
2ch での議論もいいと思うが、2ch しか見ないようじゃ終わってるぞ。
353デフォルトの名無しさん:2011/12/04(日) 16:24:44.60
初っぱなから>>345説が完全否定されてるwww
354デフォルトの名無しさん:2011/12/04(日) 18:47:46.36
あれでしょ・・・・ 俺が動的言語と決めれば 動的なのだ
俺が静的言語と決めれば、静的なのだ
という井の中の蛙君くらいしかここにいないってことなんだろ?
355デフォルトの名無しさん:2011/12/04(日) 18:53:12.86
>>354
まるで鏡に映した自分を見るようだと。納得。
これがリフレクションか(失敬)。
356デフォルトの名無しさん:2011/12/04(日) 19:03:59.40
そんなことはどうでもいい。
動的言語と動的型付け言語の違いが分かってれば。
357デフォルトの名無しさん:2011/12/04(日) 19:09:38.47
動的言語がどんなもんかもわからんといってるのに、違いがわかるって...。

論理的思考力のない人なのか?
358デフォルトの名無しさん:2011/12/04(日) 19:24:01.30
動的言語がどんなもんかもわからんのは誰?
359デフォルトの名無しさん:2011/12/04(日) 19:35:51.98
君がわかっているというなら、説明してくれ。
360デフォルトの名無しさん:2011/12/04(日) 19:52:05.21
monoってかなりLinuxで使われてるよな。
ソニーもゲーム機にC#使うし。
361デフォルトの名無しさん:2011/12/04(日) 20:04:29.51
国語審議会の議事録見ると動的言語の範疇にVBA、VBSは入るのにVB.NETは
入っていないんだよね。
ってことは言語の特性だけで決まらないってことじゃないかな。
362デフォルトの名無しさん:2011/12/04(日) 20:18:15.54
国語審議会の議事録でVBAとか出たらしいぜwwww
頭大丈夫か?
363デフォルトの名無しさん:2011/12/04(日) 20:21:59.62
動的言語かはおいといて、VBSには型がないから
動的型付け言語っていうのは正しいな。
364デフォルトの名無しさん:2011/12/04(日) 20:22:57.82
どこの国の話ともわからないのに
人格攻撃にもっていくのはイクナイ
365デフォルトの名無しさん:2011/12/04(日) 20:24:49.34
そりゃ書いてないのだからわからないわなw

じゃあ書けと。
366デフォルトの名無しさん:2011/12/04(日) 21:50:15.63
>>364
アナタハニホンゴノフジユウナハントウシュッシンシャデスカ?
367デフォルトの名無しさん:2011/12/04(日) 22:05:12.45
>>363
変数にゃ型ないけど、値にはあるよ
まあ本当の意味で型がない言語って汗(とマシン語)くらいのものだとは思うけど
368デフォルトの名無しさん:2011/12/04(日) 22:09:27.09
>>367
> 変数にゃ型ないけど、値にはあるよ

それを動的型付け言語っていうんだが。
動的に型が決まるんだよ。値によって。

369デフォルトの名無しさん:2011/12/04(日) 22:21:22.56
|....,,__
|_::;; ~"'ヽ
| //^''ヽ,,)
|  i⌒"
| ∀`) < 誰もいない きのこるならいまのうち
|⊂
| ノ
      _,,,......,,__
  /_~ ,,...:::_::;; ~"'ヽ
 (,, '"ヾヽ  i|i //^''ヽ,,)
   ^ :'⌒i    i⌒"
      |( ´∀`) < きのこ のこーのこ げんきのこ ♪
      |(ノ   |つ
      |     |
     ⊂ _ ノ
       ""U
      _,,,......,,__
  /_~ ,,...:::_::;; ~"'ヽ
 (,, '"ヾヽ  i|i //^''ヽ,,)
   ^ :'⌒i    i⌒"
     (´∀` )| < エリンギ まいたけ ブナシメジ ♪
    ⊂|  (ノ |
      |     |
      ヽ _ ⊃
      .U""
|
| ミ
| ミ  サッ!
| ミ
|
370デフォルトの名無しさん:2011/12/05(月) 01:01:57.00
昔は自己書き換えで動く
アセンブラプログラムや
BASICもあったからな
不正にシステムすら書き換え可能なwinは
超動的システムだ
371デフォルトの名無しさん:2011/12/05(月) 02:45:11.46
動的型付け言語で3Dバリバリならこれ。
http://www.teleplace.com/
372デフォルトの名無しさん:2011/12/05(月) 07:46:44.60
>>367
アセンブリ言語にも型はあるぞ。
レジスタも直値もアドレッシングも間接アドレッシングも型だらけだ。
373デフォルトの名無しさん:2011/12/05(月) 08:40:09.34
本当の型なしなんて、
素朴集合論とか型なしラムダ計算とかチューリングマシンみたいに
抽象度が高いものだろうな。
抽象度が低いものほど型が必要になる。
374デフォルトの名無しさん:2011/12/06(火) 12:55:00.52
リストで違いを示すと:
静的型付け言語: リスト内には事前に決めた型のものだけしか扱えない。
動的型付け言語: リスト内にはどんな型のものでも扱える。

[1,"22",3 ...] というのは、動的ならエラーもでないが、静的はデータ型が
Unionで数字と文字を扱う型を指定してない限りエラーがでる。

リストの扱いも違って来る。
動的の場合は、

define foo list :
  if isList(list,String) == True : ...
     else  isList(list,Integer) == True : ...

みたいな分け方だけど、事前に決まってるから、関数での型チェックを必要と
しない。(ただし、ユニオンで型を決めたときは動的と同じ事をするはめにな
る。)
簡単に言えば、型チェックは静的の場合コンパイル時のエラーで任せられるけ
ど、動的は型チェックを行う場所(関数)を熟考して決めていく必要がある。
(すべての関数で型チェックをする必要も無いので。)当然、最適化も手動に
なってくるから、こちらも静的よりは頭を使う。(頭を使う箇所が違うと言ったほ
うが適切かも。)

大規模で使えないとしたら、ある一定の頭が必要になってくるということからかも

375デフォルトの名無しさん:2011/12/06(火) 12:57:51.93
型チェックが関数で行うから面倒だ感じるかもしれないけど、
奇数と偶数を分けて考える程度の面倒さだからさほど問題はない。
型チェックもデータの奇数偶数も データの仕分けという意味では同じなので。
376デフォルトの名無しさん:2011/12/06(火) 12:58:44.23
>>374 訂正
事前に決まってるから→静的は事前に決まってるから
377デフォルトの名無しさん:2011/12/06(火) 14:02:10.24
>>374
下手くそが書く動的型付け言語のコードは酷い、
と言うことだな。

つうかお前さ、動的型付け言語まともに使ったことないだろ…
型で分岐せずに済ませるのが動的型付けのコードだよ。
378デフォルトの名無しさん:2011/12/06(火) 14:11:26.61
>>377
そうかなあ
(define (tree-map f tree)
  (cond ((null? tree) tree)
        ((not (pair? tree)) (f tree))
        (else (cons (tree-map f (car tree)) (tree-map f (cdr tree))))))
こんな感じで分岐させるのが普通なイメージだけど
Pythonの標準ライブラリのディレクトリでgrep -r isinstaceしてごらんよ

Haskellあたりだとパターンマッチだから同じ分岐でもcondよりは綺麗
379デフォルトの名無しさん:2011/12/06(火) 14:15:06.01
多分>>377はダックタイピングだとかメタプログラミング的に書くのが云々と
エヘン顔で言いたかったのではないかと予想。
380デフォルトの名無しさん:2011/12/06(火) 14:18:21.13
>>378
それ、型で分岐してねえしw
381デフォルトの名無しさん:2011/12/06(火) 14:20:29.69
>>380
え?してるでしょ
pair? が何だと思ってるの
382デフォルトの名無しさん:2011/12/06(火) 14:20:52.06
>>378
isinstanceで分岐するコードよりも
多態なメソッド叩いてるコードのほうが
圧倒的多数だなあ♪
383デフォルトの名無しさん:2011/12/06(火) 14:22:12.69
現実には型で分岐するコードも*大量に*ある以上>>377は勇み足
384デフォルトの名無しさん:2011/12/06(火) 14:23:29.19
>>381
nullチェックと変わらんな
おまえ、nullチェックを型で分岐とか呼ぶのか?
385デフォルトの名無しさん:2011/12/06(火) 14:23:52.81
「多態なメソッド」という言い方からして、たぶんOOP言語しか知らないのだろう
386デフォルトの名無しさん:2011/12/06(火) 14:24:03.49
動的言語で型で分岐がたくさんあるって言うとjQueryのコードが思い浮かぶなー
387デフォルトの名無しさん:2011/12/06(火) 14:24:23.10
つーか、どんな型のものでも入れられるリストとか実際何に使うんだよ
388デフォルトの名無しさん:2011/12/06(火) 14:24:37.28
>>384
リストかどうかという型チェックをnullチェックと変わらんな、ですか
Scheme読めないんならそう言えばいいのに
389デフォルトの名無しさん:2011/12/06(火) 14:24:57.61
>>383
大量と呼べるほど多くはねえよw
390デフォルトの名無しさん:2011/12/06(火) 14:26:06.52
>>387
Lispではtreeのようなものをconsで表現するケースは非常にありがち
その場合、当然複数の型が混在することになる
391デフォルトの名無しさん:2011/12/06(火) 14:27:46.92
stringかnumかならともかく、listとpairとnilは同類だよ
おまえpythonどころかschemeも書けねーのか?
392デフォルトの名無しさん:2011/12/06(火) 14:30:37.26
いや、複数の型というのは分かる。直和型はよく使う
でも「何でも」となると用途があんまり無くね?

あと、静的型でも型消去を使えば
どんな型でもリストにぶち込むことは出来る
393デフォルトの名無しさん:2011/12/06(火) 14:31:46.38
多態メソッドよりisinstance使え
とか書いてあるpythonのテキストがあったら
是非とも晒してみろw
394デフォルトの名無しさん:2011/12/06(火) 14:33:20.21
>>391のほうが筋が通ってるな
395デフォルトの名無しさん:2011/12/06(火) 14:34:22.75
それらは用途が違うので、そう書いてあったらその本はバカだろうな
用途が違うのに、常に多態メソッドを用いるべきだという主張もバカだが
(ついでにOOPLのことしか考えていない点で視野狭窄)
396デフォルトの名無しさん:2011/12/06(火) 14:36:32.56
>>391
意味が分からん……よく読めよ
「pairかそうでないか」のテストをしているだろ
pairとpairでないもの(atom)は同類じゃない
397デフォルトの名無しさん:2011/12/06(火) 14:38:58.72
atomとlistを同一視しているバカがいるな
398デフォルトの名無しさん:2011/12/06(火) 14:40:18.58
>>377
>型で分岐せずに済ませるのが動的型付けのコードだよ。
とりあえずこのサンプルを出してみて比較すると良いんじゃないのかな。
399デフォルトの名無しさん:2011/12/06(火) 14:49:48.30
一応言っておくが、
pair?はconsや、consからなるlistのようなものに対しては真を返し、
atomに対しては偽を返すテストね
400デフォルトの名無しさん:2011/12/06(火) 15:00:33.87
>>378
雑多なものを入れるようなリストって
jsonとかもそうだろ?あんな感じをイメージすればいいよ。
401デフォルトの名無しさん:2011/12/06(火) 15:07:26.41
>>377
残念だけど、動的中心にやってるよ。lispも含めてね。
>>380
型に分けてるけど、SICPやlisp経験がないとわかりにくいかも。

Python の教科書ってwithを余り使いたがらない本が多いという印象があるけど、なんでなんだろうね?あれほど便利なのはないのに、dive into python(3)
はwithをfile openの時に使うように書いてるのは見たけどlutzなんてwith知
らんみたいだし。最新版はwithの使い方扱ってるかどうかしらんけど。
common lispにあるwith-file-openみたいなwith系マクロを意識したものなのにね。
402デフォルトの名無しさん:2011/12/06(火) 15:12:14.10
unionしたデータを扱う静的言語ならHaskellは綺麗にやってるよね。
condやifを書かなくても多態性を使えるからなんだろうけど。
lisp系でもClojureなら、そうゆうやり方もできるけど。
403デフォルトの名無しさん:2011/12/06(火) 15:15:59.46
>>401
Pythonのwith構文は機能的にはより狭く制限された
Rubyのブロックつきメソッドという感じだね

用途がRubyのブロックつきメソッドより限定される(ほぼRAII専用という感じで
iteratorみたいなものは作れない)のと、単純に後発なのでRubyのものほど
多用されてない感じ
(Pythonのwithは2.5以降で使えるけど2.5だと__future__からimportしないといけない)
でも便利は便利なので、わりと普通に使われてもいると思う
404デフォルトの名無しさん:2011/12/06(火) 16:36:54.02
>>393
リストの扱いに慣れてなくて、OOPに染まってる人だってわかるが、次のような
例なら分かるんじゃなかろうか?

ttp://www.nishiohirokazu.org/pwe2007/2007/06/post_3.html
405デフォルトの名無しさん:2011/12/06(火) 18:28:46.08
>>404
flatこそ多態で処理すべき典型例だろ
ちなみに静的型関数型言語は12年前から使ってるw
406デフォルトの名無しさん:2011/12/06(火) 19:40:26.05
静的脳の恐怖だな わっはっは
407デフォルトの名無しさん:2011/12/06(火) 21:37:33.69
>>405
何を憤ってるのか知らんが、静的関数型言語では普通
>>378>>404は代数データ型で型定義してパターンマッチで分岐するだろ?
408デフォルトの名無しさん:2011/12/07(水) 01:33:30.06
>>407
そうだろ?普通は代数データ型へのパターンマッチングとして処理するし、
実際、>>378は代数データ型に直訳できるようなコードだ。
単にパターンマッチングではなく条件分岐しているというだけの違いでしかない。

それを>>374のように「型で分岐する必要がある」とか言い出す馬鹿がいるから
そこを笑われてるんじゃねーの?
409デフォルトの名無しさん:2011/12/07(水) 01:45:09.90
動的型付言語を使っているなら、isinstanceのように型を決め打ちするコードは
できるだけ排除する習慣が身に付いているはずだ。
それすらできていない>>377が動的言語やってるとか言っても、何の説得力もない。

はっきり言ってJavaドカタが動的型付言語を習って2日目に書いてみたコードに見える。
isinstanceの羅列とか、書いてて恥ずかしくなかったのか? >>401
410デフォルトの名無しさん:2011/12/07(水) 02:11:42.38
>>409
ユニットテストぐらいしろよ。
411デフォルトの名無しさん:2011/12/07(水) 02:14:19.91
おいおい
パターンマッチが良くて型で分岐するのはダメって意味不明
直和型のパターンマッチなんてまさに型を決め打ちするコードじゃねーか

自分で何言ってるのかわかってんのか?

412デフォルトの名無しさん:2011/12/07(水) 03:43:06.89
>>410
はあ?型を決め打ちしない上でUnitTestするのが当然だろ?おまえ馬鹿か?
413デフォルトの名無しさん:2011/12/07(水) 03:44:26.84
>>411
ああ、おまえ、直和型の代数データ型がまるでわかってないな。

静的型付関数型もわかってないし動的型付言語もシロート丸出し。
おまえ、何ができるの?
414デフォルトの名無しさん:2011/12/07(水) 04:01:54.73
まさかinstanceof乱発して「これが動的型言語だッ!」とか言ってる香具師がいるのか?

instanceofはジャバでもパイソンでもバッドプラクティスだろJK
415デフォルトの名無しさん:2011/12/07(水) 04:09:49.69
というかライブラリを書くときとかinstanceof使わないでどうやってバカよけするの?
416デフォルトの名無しさん:2011/12/07(水) 05:13:18.88
それがわからないなら動的型言語でライブラリ公開しないほうがいい

マジで
417デフォルトの名無しさん:2011/12/07(水) 05:21:44.87
isinstanceを使わない378と404のPythonコードはまだですか?
418デフォルトの名無しさん:2011/12/07(水) 05:39:13.29
>>416
しないよ。でも教えてよ。
419デフォルトの名無しさん:2011/12/07(水) 08:14:29.90
>>416
静的型付け言語しか使っていない自分も興味がある。

問題はこっちだよな。
>与えられたオブジェクトが「整数とリストだけでできている」かどうかをチェックしてTrueかFalseを返す関数を作れ。

「任意の型 (Java なら Object 型) の値を受け取って、それが特定の型を持つか否かを判定する」関数を作る
というのが問題の本質だと思われ。
静的型付け言語は、まさにこの部分をコンパイラが保証するから instanceof が不要になる。
静的型のない言語で instanceof を使わずにどう書くのか興味がある。
420デフォルトの名無しさん:2011/12/07(水) 08:17:46.58
訂正。これはちょっと誤解を与えそうだ。

>静的型付け言語は、まさにこの部分をコンパイラが保証するから instanceof が不要になる。

静的型付け言語は、最初からこんな設計にしないということ。
>任意の型 (Java なら Object 型) の値を受け取って

期待される型の値しか受け取らないようにメソッドを設計し、
そのメソッドに期待される型の値が渡されていることはコンパイラが保証する。
421デフォルトの名無しさん:2011/12/07(水) 09:36:35.50
>>413
厳密には代数データ型でのパターンマッチの場合
「型」としては一つで、値やコンストラクタによって分岐するので、
確かに「型で分岐する」のと同じではない

しかし、それを代数データ型の無いLispで同等のコードを翻訳すると
まさに「型で分岐する」>>378のようなコードになるわけで、
>>378を認めて>>374を認めないというのなら、>>408の主張は全く意味不明
>>378とisinstanceの一体何が違うんだ?
422デフォルトの名無しさん:2011/12/07(水) 09:42:23.88
C++やJavaには関数型のパターンマッチとまったく同じものはないけど
オーバーロードという静的ディスパッチはあるわな(C++にはテンプレートもある)

多くの動的型言語には同じ機構はない(そもそも同名の関数を多重定義できない)ので
似たことをやりたければ自分で手動でディスパッチすることになるんじゃないのか?
それこそ実行時型や引数の個数によって
423デフォルトの名無しさん:2011/12/07(水) 10:44:16.96
Smalltalkならflat関数なんて

Object>>flatDo:
flatDo: aBlock
aBlock value: self

Collection>>flatDo:
flatDo: aBlock
self do:[:elem|elem flatDo: aBlock]

だな。
(elem isKindOf: Collection) ifTrue: [...]なんて馬鹿なコード書いたら
世界中のSmalltalkerに大笑いされるw
424デフォルトの名無しさん:2011/12/07(水) 10:53:16.29
374だが、読解力と論理展開に呆れてるから今後スルーするよ。でも不愉快だよね。
374に注意書きで:
動的は型チェックを行う場所(関数)を熟考して決めていく必要がある。
(すべての関数で型チェックをする必要も無いので。)当然、最適化も手動に
なってくるから、こちらも静的よりは頭を使う。
--
と書いてるのにな。静的は静的で頭を使うから 静的よりか〜というのは撤回
しておくよ。HaskellとLispは熟考が必要な言語だし。
425デフォルトの名無しさん:2011/12/07(水) 10:57:33.71
この教科書をどう考えてるんだろうかな。
http://mitpress.mit.edu/sicp/full-text/book/book-Z-H-26.html#%_sec_4.1.1

426デフォルトの名無しさん:2011/12/07(水) 11:01:53.09
>>424
他人にとやかく言う前にヘッポコなコード書いた自分を責めろよ
427デフォルトの名無しさん:2011/12/07(水) 11:05:00.33
>>426
へっぽこと思うならどうぞご自由に。口だけの人の意見なんてどうでもいいですから。
では失礼。
428デフォルトの名無しさん:2011/12/07(水) 11:05:03.04
>>426
黙れ!貴様のコードが糞だろ!!
429デフォルトの名無しさん:2011/12/07(水) 11:07:56.42
SICPの例も出てるけどLispのコードでは当たり前に出てくるパターンだわな
なんか一人がんばってる人いるみたいだけど
430デフォルトの名無しさん:2011/12/07(水) 11:10:28.81
>>374
isinstanceの是非は横に置いといて、
あなたのコードが突っ込み所満載なのは事実だよ。
宣言部とか==Trueとか。
431デフォルトの名無しさん:2011/12/07(水) 11:12:47.30
SICP読んだなら、せめてtype discriminationとpattern matchingとconditional executionの区別ぐらいはつくようになれよw
432デフォルトの名無しさん:2011/12/07(水) 11:12:55.01
>>430
確かによくわからんコードだ
defineで関数を定義する動的型付け言語で一番メジャーなのってSchemeか?
でもどう見てもSchemeのコードではないしな
まあただの例ということなんだろうけど

433デフォルトの名無しさん:2011/12/07(水) 11:18:09.26
>>430
擬似コードをかいてるだけだから。突っ込みどころがあるなら、
貴方が良いと思うコードを示すといいんですよ。じゃあ見せておくれ。
>>429も触れてるけど、あのコードはListの中に、いろんな型をいれる
のが普通のLispのものからだよ。
もし、Listの中に1つの型しかないようなデータならばあのような
形にはしないだろうが、いろんな物が入ってる場合は、柔軟に対処する
方法かな。
ここではオブジェクト指向や多態性のことは擬似コードでは想定してないよ。
434デフォルトの名無しさん:2011/12/07(水) 11:19:52.08
>>431
単に言語のレベルで直和型やパターンマッチを提供しないLispでそれと同じことを
やろうと思ったら実行時の条件分岐になるって話じゃねーのか?
435デフォルトの名無しさん:2011/12/07(水) 15:06:41.10
ADTを使った次の静的型のコードは良くて、
hasattrで分岐してる動的型のコードがダメな理由は何?

(* OCaml *)
type 'a t = Leaf of 'a | Node of 'a t list

let rec flatten x xs = match x with
    Leaf x -> x :: xs
  | Node x -> List.fold_right flatten x xs
let flatten x = flatten x []


# Python
def flatten(x):
    if hasattr(x, '__iter__'):
       return reduce(lambda a,b: a + flatten(b), x, [])
    else:
        return [x]
436デフォルトの名無しさん:2011/12/07(水) 15:58:29.48
Javaでinstanceofが悪なのは依存が発生するからであって、
ダウンキャストと同じで必要なら使うよ。

つか普通に使えよ。なんで問題を難しくするんだよ。
437デフォルトの名無しさん:2011/12/07(水) 17:50:16.18
まあjavaコードなんてどのみち依存性ガチガチのクラス直接参照決め打ちコードだらけだからな、
ちっとぐらいisinstance減らしても意味ないね
438デフォルトの名無しさん:2011/12/07(水) 18:02:48.96
多態による分岐が難しいって人は
素直にinstanceofを使えばいいよ
439デフォルトの名無しさん:2011/12/07(水) 18:48:32.83
hasattrでの分岐禁止なんてアホがいるのか?
440デフォルトの名無しさん:2011/12/07(水) 20:13:54.83
RubyとPythonやってるけど、確かにisinstance()やis_a?()は滅多に使わんね
静的で型で縛りを入れてるコードは
動的では全くアプローチの違うコードになる気がする
何か書き換えてみたいなあ、静的での例ある?
441デフォルトの名無しさん:2011/12/07(水) 20:29:37.95
どうして使わないかという以前に、Lisp的なデータの中に雑多なものを
いれるというものを他では余りやらないからだろう?

RもPも一つのリストの中にいろんな型のデータは含めることはできるがね。
sympyみたいな数式処理関連のライブラリなら"isほにゃらら"は使っている
ね。isinstanceも当然含む。
細かな表現力が要求されない限り、雑多な型のデータを入れるリストって
最適化にも悪いからやらんもんな。
442デフォルトの名無しさん:2011/12/07(水) 20:34:34.07
R とか P とかで関数の引数が int か int のリストかで処理が別れるのってあるよね
あれはやっぱり関数の中で引数を isinstance で調べてるんだよね
443デフォルトの名無しさん:2011/12/07(水) 21:04:42.86

朝日新聞は一時期300人のネット工作員をかかえ、工作していた。
捕まった編集者は49歳ですが、こんなカスでも1500万円の年収がもらえるんですよ。
>>866
14時以降に何が起きたんだ

>>866
Domain Information: [ドメイン情報]
a. [ドメイン名] ASAHI-NP.CO.JP
e. [そしきめい] かぶしきがいしゃ あさひしんぶんしゃ
f. [組織名] 株式会社 朝日新聞社

これが規制されたからじゃねw

−「朝日新聞社は、とある思想やパラダイムに日本の世論を誘導する見返りに、中国から大量の資金を貰っている。」−
これはおそらく週刊誌さえ書けない。
「失語症躁鬱ニートは氏ねよ」【ネット】朝日新聞社員(49)ネットで荒らし行為、会社ごとアクセス規制へ
444デフォルトの名無しさん:2011/12/07(水) 21:42:55.24
(defun flatten (lst)
  (if (atom lst)
      (list lst)
      (mapcan #'flatten lst)))

(defun number-or-list-p (object)
  (or (numberp object)
      (null object)
      (and (listp object)
           (not (member-if-not #'number-or-list-p object)))))

(defun number-or-list-p2 (object)
  (not (member-if-not #'numberp (flatten object))))
445デフォルトの名無しさん:2011/12/08(木) 04:44:54.00
Twitterの中の人は、Rubyで書いてるコードは大きくなるうちにkind_ofだらけになってやってられないから、Scalaに移行したって言ってたな。
446デフォルトの名無しさん:2011/12/08(木) 07:13:36.10
Lispはまあ別として、動的型付けOOPでisinstanceやis_a?使うのは
ダックタイピングの良さを消してる気がするわ
hasattrやrespond_to?を使って構造的部分型で分岐するのは良いけど
447デフォルトの名無しさん:2011/12/08(木) 09:48:01.64
つまり、Twitterみたいな大規模システムじゃ動的な型付けの言語は不向きってことなんだろうな。
448デフォルトの名無しさん:2011/12/08(木) 10:18:27.76
ドカチン集めたらkind_ofだらけだろうな
それを動的型付けの欠点と言うのはアサッテだが
449デフォルトの名無しさん:2011/12/08(木) 11:01:02.86
450デフォルトの名無しさん:2011/12/08(木) 11:07:58.44
twitterは技術力がある方の会社だと思ってたんだがちゃうの?
もっとも動的言語はMT車みたいなもんだからな。
451デフォルトの名無しさん:2011/12/08(木) 11:21:56.70
>>450
技術力の問題ってより、大規模開発の特性ってことじゃないの
amazonのコードベースも糞の山みたいに言われてたと思う

現実に世界規模のサービスを動かしている人たちの言うことだから、少なくとも
2chの名無しの言うことよりは説得力がある
452デフォルトの名無しさん:2011/12/08(木) 11:51:58.38
Amazonのコードベースが糞の山と言ったSteve Yeggeは
JavaもScalaもこき下ろしてたけどな
453デフォルトの名無しさん:2011/12/08(木) 12:03:51.04
どこぞの会社が何々したとか、誰かが言ってたとか
そういう話は嬉々として語るのな。
技術力無い奴にありがちだけど。
454デフォルトの名無しさん:2011/12/08(木) 12:05:48.35
あるある()
455デフォルトの名無しさん:2011/12/08(木) 12:37:00.62
>>450
うんそれはわかってるよ。

このスレのタイトルの真偽がわかりつつあるね。

amazonのC++のゴミコードの山ってはなしあったな。

オブジェクト指向だけはなぁ。。。。 スパゲティー屋さん多いからな。

関数型のコードのほうが好きっ☆(てへ)
456デフォルトの名無しさん:2011/12/08(木) 12:44:41.42
という事で、
動的→カタ・クラスチェックの山
OOP→スパゲティ
残ったのは、OcamlやF#みたいなの?となりそうに思うけど、これらが
大規模で使われてるときかない理由はいかに?
457デフォルトの名無しさん:2011/12/08(木) 12:55:16.14
大規模では使いづらいから
458デフォルトの名無しさん:2011/12/08(木) 13:00:32.18
いいものが流行るとは限らないから
459デフォルトの名無しさん:2011/12/08(木) 13:05:32.49
Haskellが使われないのはわからなくはないけどな。あれは純血主義だし
Scalaも仕様について糞っかすに言われるのもわからなくもない。
日本語でも英語でもScala批判は炎上を招くらしくブログでは余り触れたがらない人が多いかも。
460デフォルトの名無しさん:2011/12/08(木) 17:02:01.44
>>456
バカ?
461デフォルトの名無しさん:2011/12/08(木) 17:02:58.64
>>459
ハスケルもスカラもカルトすぎ
462デフォルトの名無しさん:2011/12/08(木) 17:46:30.38
カルトつーか、あのやたら攻撃的で排外的な雰囲気がダメ
関わり合いになりたくない

ScalaからJavaに戻した途端のあの叩きようを見てマジ引いたわ
463デフォルトの名無しさん:2011/12/08(木) 17:53:46.93
という事で、ドカタに書かせるなら
動的→カタ・クラスチェックの山
OOP→スパゲティ
残ったのは、OcamlやF#みたいなの?となりそうに思うけど、これらが
大規模で使われてるときかない理由はいかに?
464デフォルトの名無しさん:2011/12/08(木) 18:05:46.98
>>463
書けるドカタがいない、とか?
465デフォルトの名無しさん:2011/12/08(木) 18:31:36.47
でも連中、

関数型は子供にも簡単に書けるようになる
難しく思えるのは命令型に洗脳されているだけ

とか言ってるぞw
466デフォルトの名無しさん:2011/12/08(木) 18:44:40.43
>>465
ドカタとは何かという問題だよ。
OCaml などをわざわざ勉強するような向上心?のあるやつはドカタではないとか、
F# を使えるやつはドカタではないとか。


何人のプログラマをプロジェクトに従事させるか知らないけれど、
経験者が集まらないか集めても高いとかじゃないかと。
467デフォルトの名無しさん:2011/12/08(木) 19:03:50.27
>>462
英語のメーリングリストとか、フォーラムは別にそんな感じは無くて、どっちかと言うと「事実が勝つ」って感じだけどな。
排外的って例えばどこ?
468デフォルトの名無しさん:2011/12/08(木) 20:48:16.46
>>466
ただ向上心という問題だけだろうか?名古屋みたいな土地なら岡村は
増えそうだが。周りにおらんだろ?
469デフォルトの名無しさん:2011/12/08(木) 23:00:44.63
関数型の知識なんて木構造に対するmapとfilterが書けるくらいで十分
470デフォルトの名無しさん:2011/12/08(木) 23:13:37.39
471デフォルトの名無しさん:2011/12/08(木) 23:15:21.32
YO! YO! キミがYO!
472デフォルトの名無しさん:2011/12/09(金) 00:20:40.43
C#でDynamicJSONを使ってみて、動的も静的も偏りすぎ、大事なのはバランス感覚だと悟った
473デフォルトの名無しさん:2011/12/09(金) 00:24:19.73
でも動的型付け言語だと、バランスを取ること
つまり静的と動的を両方使うことができないんだよな。
474デフォルトの名無しさん:2011/12/09(金) 01:01:51.05
>>422
呼ぶメソッド名を変更すりゃいいだけの話
475デフォルトの名無しさん:2011/12/09(金) 01:53:03.83
>>474
何を言ってるの…。
476デフォルトの名無しさん:2011/12/09(金) 02:13:09.05
動的型なら組んでる時は常に型を意識する羽目になるから、
「ミスするやつはドカタ(キリ」とか思ってる馬鹿でもなきゃ、
堅牢性が必要な部分の界面では素直にis、has使うと思うんだけど。
477デフォルトの名無しさん:2011/12/09(金) 02:35:58.51
Cだって静的型付けだけど
ポインタにぬるぽが来たら問題起こすだろ
そのためにポインタを引数にとる関数の全部に
ぬるぽチェック入れてたらオーバーヘッドだらけになるからやらない
動的型付けで引数チェックいちいちしないのもそれと同じ
478デフォルトの名無しさん:2011/12/09(金) 02:55:33.19
>>477
「全部」には入れないまでも、堅牢性が必要な場面の界面ではやる必要がある、
ということで、>>476の言っていることと別に矛盾はしないのでは

はやい話がユーザプログラムが変なポインタ渡したぐらいでkernelが
パニクったら困るみたいな

普通に考えれば界面が限定されていればチェックが必要なコードも
限定されるはずだけれども
twitterで型チェックだらけ、とかいうのは、要は界面の面積がものすごく大きいって
ことだろう
kernelの例でいうと本来の意味での界面はシステムコールになるけれども
多数の開発者で分担して作っている大規模システムでは、他の開発者がある意味で
信用できずに、システム内部で他の奴が作ってる部分との間にも
(バグと戦うために)結局界面というものが必要になってくる
twitterの話というのは、そういうことかと思った
479デフォルトの名無しさん:2011/12/09(金) 03:09:30.65
>>475
オーバーロードってメソッド名を変更する手間を省くくらいの意味しか無い機能だと思ってるが違うのか
480デフォルトの名無しさん:2011/12/09(金) 03:16:03.20
Cでnullチェックしないことが多いのは、JavaやC#みたいな言語と違って
そんなことをやる意味がほとんどないからだろう

ポインタは32bitなり64bitなりのメモリ空間全体を指し得るから
ランダムに適当なポインタを与えられた場合、それは読み込みや書き込み
不能なページにあるかもしれないし、できたとしてもスタックのリターンアドレスを
書き換えたりヒープの管理情報をブチ壊したりしてしまうような位置かもしれない

なので、Cで引数として与えられたポインタが単にぬるぽかどうか確認するだけでは
屁の役にもたたず、何の意味もない
481477:2011/12/09(金) 03:30:21.67
>>478
別に矛盾するとは言ってないし
全部にチェック入れないとも言ってないのに
482デフォルトの名無しさん:2011/12/09(金) 03:30:30.22
>>478
なのでinstanceofの類を使わずに動的型付けの言語でどうやってバカよけをする
のかを以前ここで尋ねるも返答がなかった件。
483デフォルトの名無しさん:2011/12/09(金) 03:33:34.72
>>478
>twitterで型チェックだらけ、とかいうのは、要は界面の面積がものすごく大きいって
>ことだろう
>kernelの例でいうと本来の意味での界面はシステムコールになるけれども
>多数の開発者で分担して作っている大規模システムでは、他の開発者がある意味で
>信用できずに、システム内部で他の奴が作ってる部分との間にも
>(バグと戦うために)結局界面というものが必要になってくる
>twitterの話というのは、そういうことかと思った

要するにtwitterの設計思想がまずいって話だな
Rubyだからそうなったのか
それに気付いてScalaにしたのかどうかとは別次元の話
484デフォルトの名無しさん:2011/12/09(金) 06:00:29.77
>>473
つ 型注釈
つ 動的型検査
485デフォルトの名無しさん:2011/12/09(金) 06:02:26.25
>>482
おまえの質問が馬鹿避けに引っ掛かったことに気付け馬鹿
486デフォルトの名無しさん:2011/12/09(金) 06:06:08.63
>>473
両方を満たせないのは静的型付け言語でしょ。
動的型付け言語は型注釈でコンパイル時検査も実行時検査も出来る。
でも静的型付け言語ではヘテロなオブジェクトを作れない。
487デフォルトの名無しさん:2011/12/09(金) 06:09:58.38
>>485
で、どうやってやるの?
488デフォルトの名無しさん:2011/12/09(金) 06:29:10.94
〜もできる、〜もできる、と並べたてても、たった一つの「しないこともできる」が
すべてを台無しにするパターンじゃないのかな。
まあたった一つじゃないんだけども。
489デフォルトの名無しさん:2011/12/09(金) 06:52:28.06
ドカタに自由などいらない
490デフォルトの名無しさん:2011/12/09(金) 07:39:27.00
動的型付けの言語はプログラマ性善説に頭からどっぷり漬かって安穏としている。
静的型付けの言語はプログラマ性悪説に凝り固まって奪える限りの自由を奪う。


規模が大きくなって色々な人が仕事に関与するようになると確かに性悪説に立った
方が無難。
491デフォルトの名無しさん:2011/12/09(金) 07:51:49.10
>>469 FizzBuzzすら満足に書けない土方が多いのに……
関数型が普及しないわけだ
492デフォルトの名無しさん:2011/12/09(金) 08:08:04.87
自分たちの技術が受けられない理由を世の中のせいにするのはどんな凡庸な
人間にも出来ること。
それを自らの問題ととらえて打開策を模索するのがより生産的な姿勢。

今の関数型言語が普及しない事を嘆いているヒマがあれば土方でも使える
関数型言語の設計でも考えれば良いのにね。
動的型は土方には使えないとか宣っている連中も似たようなものだ。
493デフォルトの名無しさん:2011/12/09(金) 08:50:19.78
>>480
0/1 でしか考えられない、典型的な馬鹿乙。
494デフォルトの名無しさん:2011/12/09(金) 09:31:06.63
それは精神的バックトラックが継続を襲ってるんだよ。
495デフォルトの名無しさん:2011/12/09(金) 10:51:29.39
>>487
型注釈でもいいし、多態で分岐してもいいし、例外捕まえてもいいし、、、

むしろ1つも思い付かないほうが不思議だ
496デフォルトの名無しさん:2011/12/09(金) 11:17:35.99
>>491
思い込みで話してませんか? ほんとにいるんだろうか?
現場でFizzBuzz書けない奴って。
497デフォルトの名無しさん:2011/12/09(金) 11:25:26.71
馬鹿はいる
もちろん全員じゃない
498デフォルトの名無しさん:2011/12/09(金) 11:28:13.67
動的型付けの弱点はインテリセンス等の開発サポートツールの作成のしようが無い所だろうな。
性悪とか性善とか正直どうでもいいし気にしないけれど
重機あるのにノミとトンカチでトンネル掘るような作業をするのには正直耐えられない。
499デフォルトの名無しさん:2011/12/09(金) 11:29:55.28
引数の省略もインテリセンスにはきついんじゃないのか
C++は性的暴行
500デフォルトの名無しさん:2011/12/09(金) 11:31:16.72
開発サポートツールの作成のしようが無い
あるいは物凄く困難になって実質存在しないか不完全な言語も嫌い
動的型付けも嫌いだけれどincludeやC言語系defineなんかは最悪だから全滅して欲しい
501デフォルトの名無しさん:2011/12/09(金) 11:33:14.38
>>499
きついだろうけど、引数の省略ってあまり使わないから。

ちなみに、>>498 は単なる IDE 依存症の馬鹿。
502デフォルトの名無しさん:2011/12/09(金) 11:33:20.99
>>499
引数省略は障害にならないようです、C#は見事に問題なし。
インテリセンス以外にも、リファクタリングツールやテストツールも型無しは地獄だね。
503デフォルトの名無しさん:2011/12/09(金) 11:35:05.35
いまさらIDE等を使わないで作る奴は頭弱過ぎとしか思えないけどな
3秒で済む事一週間かけてやっているに違いない
504デフォルトの名無しさん:2011/12/09(金) 11:49:08.47
IDE 依存症と書かれたら、脊髄反射で IDE 使ってないとか、
こういうアホテリセンスは一生直らないんだろうな。(w
505デフォルトの名無しさん:2011/12/09(金) 11:51:21.04
多すぎるんだよ、IDE使わない俺カッコイー系の爺さん、仕事の邪魔だから会社やめてくれ
お前の所で何時もスケジュールが滞っているんだよ
506デフォルトの名無しさん:2011/12/09(金) 12:01:59.54
インテリセンス厨はこいつだな
http://hibari.2ch.net/test/read.cgi/tech/1317403825/610
どうせ自演だろうが
507デフォルトの名無しさん:2011/12/09(金) 12:29:21.14
で、IDEの機能の多くは動的型付け言語が発祥だね、
っていつもの話にループするわけだ。

ドカチンは進歩しねえなw
508デフォルトの名無しさん:2011/12/09(金) 12:32:28.79
組み込み用のIDEとか糞すぎて禿丸使わないといけないんだぜ
509デフォルトの名無しさん:2011/12/09(金) 12:38:57.49
筋肉モリモリ鉱夫の蒸気機関掘削機に負けない自慢だな
バカバカしい自慢話だ
510デフォルトの名無しさん:2011/12/09(金) 13:02:49.88
COBOLやFlex/as3プログラマーが定時退社で月給150万円もらってるという事実すら知らず、
Flashはオワコン、Webサイコー、Javaサイコー、Rubyサイコー、動的だ、静的だ、
とか言ってるアホが多い

まあアホだからこそ中卒土方以下の月収40万円無保障使い捨てでもこき使えるんだが

そんなことに頭つかってるからドカタなんだよw
511デフォルトの名無しさん:2011/12/09(金) 13:09:04.97
>>510
ちなみにあなたのご職業は?
512デフォルトの名無しさん:2011/12/09(金) 13:20:36.18
>>511
自宅警備員です
513デフォルトの名無しさん:2011/12/09(金) 13:26:29.30
                            ____
  ┌──────────┐       //´   __,,>、
  |              ::::::::::|      /::/ / ̄:::::::::::::::\
  └┬────────┬┘     /::::l/::::::::::::::::::::::::::::::::l.
    |    -‐-レノ ノ_ ::::|      l:::::::::::/l/lノノ/_イ:::::l
    |    イ゚テ   .ピト` ::|      l:::::::::/ rtテ、  .ィtq l::::::|
    |     '"   .,j   '" ::|      |::lヘ!j  ´  ,j   !;:::/
    |       r‐-,    ::::|      レリー 、    ,....,  lノ/
    |         ̄   :::::|       `ヽ、lヽ 、  ̄ /
    ┤          ::::::├ヽ    , -‐-、_r┴─'ー‐チト      この人 土管です
  /|          ::::::| ´`ヽ /    ヽ ̄`ー-‐'´`''''⌒ヽ
/  |          ::::::|   \  _r‐、-、-、r,    、   ',
    |          ::::::|  ,. -‐ゝ/// 〉 〉 〉 〉 〉    !   ',
    |          ::::::| /  人〈〈〈〈 ' ' ' /っ   l    l
    |          ::::::|/   /  ```´-ァ‐'''"     /   l
\_|          ::::::├ヘ  l    //         / _ ィノ
    ┤          ::::::| `ーヽ、_ノ´l、______/lニ二」
_/|          ::::::|        |_  ( ( ) )_〕|   l
514デフォルトの名無しさん:2011/12/09(金) 14:42:29.61
動的型付けでも型注釈のある言語はそれを大事なところで大いに使ってもらえば
良いと思うのだけれども、それでも型消去されたリストやmapしか持っていない
ようであれば片手落ちだと思う。
515デフォルトの名無しさん:2011/12/09(金) 14:58:54.94
>>514
人権団体によって使用禁止にされた表現を含んでいます。
516デフォルトの名無しさん:2011/12/09(金) 15:03:29.07
>>507
IDE自体が現在でも、動的機能の塊として動いてるからなあ。
517デフォルトの名無しさん:2011/12/09(金) 15:10:05.91
>>495
>型注釈でもいいし
その注釈を静的にコード検証するために使うのか実行時に型チェックするために
使うのかどちらか知らないけど、後者だったら結局内部的にはinstanceofの類を
使って判定されるじゃん。表に見えないだけで単なるシンタックスシュガー。

>多態で分岐してもいいし
そりゃ想定内のクラスのインスタンスだけがやってくるという仮定の上でのみ
通用する話。バカよけになってない。

>例外捕まえてもいいし、、、
例外発生する処理が破壊的な処理だったらどうするんだ。

カチッとした部分を書くのにinstanseOfの類を使うなと言うのが無理筋。
これですむのであればとっとと使って次の作業に進んだ方が良い。
518デフォルトの名無しさん:2011/12/09(金) 16:00:34.47
バカよけも糞よけもどうでもいいが、あまりにも程度が落ちたら、
多くの人が引いてROMるだけのこと。要は相手をするのが時間の無駄ってこと。
519デフォルトの名無しさん:2011/12/09(金) 16:07:42.51
確かに >>518 の相手をするのは無駄だな。
520デフォルトの名無しさん:2011/12/09(金) 16:11:40.64
>>518
またまたw
答えを持ち合わせていないからってROMらないでくださいよw
521デフォルトの名無しさん:2011/12/09(金) 16:22:38.64
>>517
馬鹿だなあ。
通常のif文とinstanceofで判定したら、それこそIDEの支援が出来ないだろ。
特別な構文やキーワードを使うから、
自動的に削除や回復が出来るんじゃないか。
IDEの設定に応じてコンパイル時のエラーレベルや
実行時の検査やログを変更出来るんじゃないか。

シンタックスシュガーを笑うものはシンタックスに泣くんだよw
522デフォルトの名無しさん:2011/12/09(金) 16:23:51.67
>>517
多態では想定した型しか対処出来ない?
お前は馬鹿か?
objectで多態すればいいだけだろ。
523デフォルトの名無しさん:2011/12/09(金) 16:43:10.36
>>517
> 例外発生する処理が破壊的な処理だったらどうするんだ。
>
> カチッとした部分を書くのにinstanseOfの類を使うなと言うのが無理筋。

破壊的な処理が前提なら、破壊的な処理の途中で得られた値へのinstanceofでま同じだろ馬鹿。

馬鹿避けなんて簡単だ、お前を配員しなければいい。
524デフォルトの名無しさん:2011/12/09(金) 16:43:29.24
518でどれだけ釣れるかと思ったが二人か。この二人って
図星だったんだろうな。気の毒。

ということで程度が低いと思った"イデ"の話は別の所でやってくれ。
525デフォルトの名無しさん:2011/12/09(金) 16:50:02.41
>>521
だから「後者なら」と限定をつけているのにその辺りは読まないんだね。

前者の話なら異存はないよ。型注釈を利用してIDEが的確にコードを理解して
色々と支援してくれるんだね。それは便利だよね。

静的型付けの言語ではごく普通に享受していたこのメリットが動的型付けの
言語でも取り入れられるようになったという事で大変めでたい。
いや実にめでたい。
526デフォルトの名無しさん:2011/12/09(金) 16:58:34.13
負けたら「釣りだったんだよ!」でOK。
ここ試験に出るからなっ!
527デフォルトの名無しさん:2011/12/09(金) 17:02:31.43
>>522
多態が出来るのと多態がバカ避けになるのかは別問題。
動的型付けの言語での多態の利用がバカ避けになるのであればその例を書いてよ。
多態だけで想定していない型の入力をちゃんとはじいてくれる様を実演してみて。

>>523
破壊的な処理ならその処理を呼び出す前に値の検証をするのが当然。
で、その検証はどうやるのさ。
規約で特定の型を要求しているようなAPIを呼び出す場合とか。
528デフォルトの名無しさん:2011/12/09(金) 17:21:18.19
ここを見ていればバカ避けいっている奴が低能である事は明白だけどな
529デフォルトの名無しさん:2011/12/09(金) 17:49:36.57
>>528
すべてがそうかわからないけど、一部は明らかに視野が狭い人が言ってるよね。
530デフォルトの名無しさん:2011/12/09(金) 18:12:36.26
高等で視野の広い人の発言も期待したいところ。>>528とか>>529とかよろしく。
531デフォルトの名無しさん:2011/12/09(金) 18:17:00.87
3日ぶり位にここを覗くと、今の議論の発端が何なのか分からんな。
動的言語はinstanceofを使わないとダメだよね
→instanceofで判定なんて泥臭くてアホだろ。普通○○でやる
→それは型の判定自体を行っているという点でinstanceofと同じ。
さぁ型の判定をしないで、予期せぬ型が渡ってくることをどう防ぐんだよオラオラ
って流れなのか?
532デフォルトの名無しさん:2011/12/09(金) 18:18:00.42
>>527は「破壊的な処理の途中で得られた値への」って書いてあるのが読めないようだ。
コードの読解力も推して知るべしだな...
533デフォルトの名無しさん:2011/12/09(金) 18:20:09.06
>>531
そう。
彼は多態による分類とクラス階層による分類の違いが解らないからしい。
534デフォルトの名無しさん:2011/12/09(金) 18:20:57.23
            ,.r.:::;;;;:ュ、
         fイ´__  __ヾ
           {:六;;;;:ハ:;;;:カ   
         (_  ' _^_ヽリ    なんだ AKBって整形した反日朝鮮人だったのかァ
          ,人 l⌒l、      ブームの捏造手法が寒流と同じだけはあるな
        / \,ゝヽr' \    
       /      |:|   ヽ
        l   l   /´堰@ l  !
        |___l  ノ ,イ   !__,}


535デフォルトの名無しさん:2011/12/09(金) 18:25:31.09
>532
そもそも>>523は誤記で意味不明になっているんだよ。これで読解力を問われても困る。
反論書くなら正しい日本語で書き直してからよろしく。

で、破壊的な処理に入る前の事前検証はどうやって行うの?
536デフォルトの名無しさん:2011/12/09(金) 18:44:33.00
>>517 = >>535
> 例外発生する処理が破壊的な処理だったらどうするんだ。
> カチッとした部分を書くのにinstanseOfの類を使うなと言うのが無理筋。

つまり、517は
・非アトミックな破壊操作の途中で動的型エラーを処理したい。
・instanceofならできるが、例外処理ではできない
と主張している。

それを>>523は、instanceofで検査しても例外処理でハンドルしても、
検査対象とする値が非アトミック破壊的処理の途中で得られたものであれば、
いずれにせよ破壊的処理の回復処理はしなければならない、
だから動的型検査の方法と非アトミック破壊的処理は別問題、と言ってるわけだ。

なのに>>527は「途中で得られた」という部分を理解できなかったか、
あるいはあえて無視したか不明だが、破壊的処理の前に検査すると言っている。

結論: >>517=>>535は非アトミックな破壊的処理の本質をわかっていない。
537デフォルトの名無しさん:2011/12/09(金) 18:51:09.84
>>536
>・非アトミックな破壊操作の途中で動的型エラーを処理したい。

主張していないって。どうやったら、

> 例外発生する処理が破壊的な処理だったらどうするんだ。
> カチッとした部分を書くのにinstanseOfの類を使うなと言うのが無理筋。

これからそんな主張を演繹できるのか、まずそこから説明してくれ。
538デフォルトの名無しさん:2011/12/09(金) 19:02:13.56
>>537
あれ?アトミックならそれこそ回復処理も何もないのでは。
一体何が言いたいのか俺にもわからん?
コード書いて示してみれば?
539デフォルトの名無しさん:2011/12/09(金) 19:09:54.92
>>538
どうせ破壊操作言ってみたかっただけだろw
540デフォルトの名無しさん:2011/12/09(金) 19:30:09.46
>>538
元々は

>instanceofの類を使わずに動的型付けの言語でどうやってバカよけ
という話で

>例外捕まえてもいいし、、、
という策が出るも、事後の例外キャッチは事前の型判定の代用にはならないし、
特に処理が破壊的な場合は困ったことになるでしょというだけの話。


単純に特定の型が明示的に要求されている場面では多態も例外処理も型判定の
完全な代用にはならないのだから素直にinstanceOfの類を使いましょうって話
なんだけれどもな。
541デフォルトの名無しさん:2011/12/09(金) 20:07:48.76
>>510
これにまともに反論できるやつ居ないのかよ
542デフォルトの名無しさん:2011/12/09(金) 20:13:30.41
俺は動的言語ならとことん動的にいくなあ
ベストエフォートが通じない場面じゃそもそも使わん
で、そんな俺がRubyでしばしばやる方法は…

データの大半を自作のクラスにラップすることで
typedef感覚での意味付けをする

その際、クラス名が○○ならto○○という
自身の型名を含んだメソッドを持たせる
メソッドの内容は自身への参照を返す、というもの

んで、その後に書いた関数の引数チェックなどは
引数を始めて使用する際にto○○を呼びつつ使用
543デフォルトの名無しさん:2011/12/09(金) 20:42:49.25
>>541
> COBOLやFlex/as3プログラマーが定時退社で月給150万円もらってる

反論する価値もないと思うが。
544デフォルトの名無しさん:2011/12/09(金) 20:53:49.84
>>540
結局おまえは動的言語での型検査がまるでわかってないことを晒しただけだな
かわいそうにwww

誰かが書いていたが、馬鹿よけってのはお前を外せばいいだけw
545デフォルトの名無しさん:2011/12/09(金) 20:55:08.12
>>540
> 単純に特定の型が明示的に要求されている場面では

まさに馬鹿の発想w
546デフォルトの名無しさん:2011/12/09(金) 21:02:59.45
>>545
そういう場面は動的言語ではありえない、と言っているのかな?
547デフォルトの名無しさん:2011/12/09(金) 21:04:38.10
>>546
書いてない文字が読めちゃう人でつか?
548デフォルトの名無しさん:2011/12/09(金) 21:06:41.57
で、結局「馬鹿よけ」って何のことだったの?
549デフォルトの名無しさん:2011/12/09(金) 21:12:11.11
さあwww
550デフォルトの名無しさん:2011/12/09(金) 21:44:13.56
instanceof なしでどうやって引数チェックするんだよ!

色々な方法があるんじゃない?アノテーションとかメソッド叩くとか例外処理とか・・・

普通にその通りだと思うけど、アノテーションでもメソッド叩くのでも例外処理でも
処理できないような引数チェックの具体例ぷりーず!
551デフォルトの名無しさん:2011/12/09(金) 21:47:47.28
「馬鹿よけ」はフールプルーフのことを言ってんだろ
552デフォルトの名無しさん:2011/12/09(金) 21:58:57.44
静的型付け言語の発想は簡単な部分の開発を
型に押し込めたコーディングにしてしまうから
開発がつまらなくなる。

開発が楽しいのはフレームワーク決めたり
アーキテクチャを決めたりする一部の人間だけ。

下っぱはつまらない作業になる。
553デフォルトの名無しさん:2011/12/09(金) 22:45:19.50
>>552
難しかった作業(プログラミング)が単純作業になるのか。
良いことだ。


instanceof での分岐と単純な多態って、
人間が書くはずだったコードをコンピュータに書かせているだけのような気がしてしまう。
554デフォルトの名無しさん:2011/12/09(金) 23:20:21.55
>>550
う〜ん・・・

多態性や例外を使わずに素直に型検査を使った方が適切だったり使わざるを得ない
場面なんていくらでもあると思うけど。特に他人様が書いた成果物を使う時は。

例えばこれから叩くメソッドが他人様によって"Input: ClassA value"とか文書化
されていれば、多態性云々とかとりあえず投げてみて例外を待ち構えるとかいった
悠長なことはせずに素直に型検査してから叩くし、それ以外の方法は無いでしょ。
文書化された仕様としてその型の値を要求しているのだから。

そしてそのメソッドに渡す引数が自分が今書いているメソッドの引数の一部であれば
文書化の際にその引数の型は明記するし、その引数は上記の通り中で型検査するし、
オプショナルな型注釈が使える言語の場合には注釈付けて型検査を強制するでしょう。

それでも多態とか例外で頑張るのかなぁ・・・
555デフォルトの名無しさん:2011/12/10(土) 01:11:15.62
工作員達の正体(韓流AKBと政治ゲーム)

180 名前:115x125x150x194.ap115.ftth.ucom.ne.jp[] 投稿日:2011/04/29(金) 13:58:50.19 0
このスレ見てハロカスヲタはホント閉鎖的だなって思うわ
これだからハロカスって言わるんだよカス  ハロ=HelloProject(モーニング娘などが所属)     
http://hato.2ch.net/test/read.cgi/morningcoffee/1303996886/180
        
756 名前:115x125x150x194.ap115.ftth.ucom.ne.jp[] 投稿日:2011/04/30(土) 04:27:05.86 0
このスレ見てハロカスヲタはホント閉鎖的だなって思うわ
これだからハロカスって言わるんだよカス
http://hato.2ch.net/test/read.cgi/morningcoffee/1304043385/756 他多数書き込み 
Network Information: [ネットワーク情報]
a. [IPネットワークアドレス] 115.125.150.192/29
f. [組織名] 有限会社 クリップ
AKB48 音響、缶バッヂ等製作 有限会社クリップ(代表=日本名を名乗る在日朝鮮人)

→なぜ在日朝鮮人が、わざわざ2chに出向いて必死になってHelloProjectを叩くか。単に商売敵だから?AKBが「ツリ目のエラ張りにしか」売れてないから?
   
 ヒント:*韓国人のみに見られる風土病の存在
     *HelloProject→日本人アイドル AKB→整形した○○人←韓流()    
     
そして、"朝鮮人だらけの"マスコミが 捏造AKB ブーム. 捏造韓流 ブームを演出し、ごリ押す目的が見えますか?
検索していろいろなサイトを巡ってみて下さい
556デフォルトの名無しさん:2011/12/10(土) 06:18:26.66
>>553
よくねーよ、単純作業になったのなら自動化しねぇーと、保守が地獄だ
557デフォルトの名無しさん:2011/12/10(土) 06:20:22.57
なんでこう言語の仕様の範囲で閉じこもりたがるかね、もうそんな時代じゃないだろうと
周辺ツールを含めて総合力が言語の能力を決めている。
558デフォルトの名無しさん:2011/12/10(土) 07:13:43.86
言語の表現能力も大事だということを
Javaが教えてくれたから
559デフォルトの名無しさん:2011/12/10(土) 08:21:49.55
>>554
型アノテーションのように関数の入り口で型チェックするにしても、
単純にinstanceofでやるのは下策でしょう。
respondtoだとかisXYZなどのダックタイプ的なチェックをすれば
動的型の柔軟性を損なわずに済むのだから。

そういう柔軟な型検査は動的型言語の多くで簡単に実装可能でしょう。
例えばpythonならデコレータで書けるわけで。

なのにinstanceofに固執して他の柔軟な型チェックを拒否する発言が
批判されているんじゃないのかな。
そういう姿勢は動的型のプラクティスとあわないと思うなあ。

instanceof派の反論って、respondtoだとこれができない、isXYZでは
これができない、例外処理だとこれができない、って話ばかりで、
それらの方法を組み合わせても実現できない型チェックの実例が
全然出てこないことも、議論が咬み合わない原因だと思う。
560デフォルトの名無しさん:2011/12/10(土) 09:18:52.14
>>559
>それらの方法を組み合わせても実現できない型チェックの実例が全然出てこない

554の例がまさにそれだと思うけど。

ちゃんと文書化されたAPIで、メソッドの引数の型が明示されています。
メソッドを叩く前に引数を検定したい。どうするの? わざわざ型が明示されているのに
柔軟性を追求して直接的な方法を避け色々な方法を組み合わせるの?

>なのにinstanceofに固執して他の柔軟な型チェックを拒否する発言

他の型チェックでは代用出来ない例を例示しているだけであって拒否はしていないし
使うなとも一言も言っていないよ。適切な場面で使えるものを大いに使えばいいでしょ。

ただ他の型チェックでは型判定の完全な代用とはならない場面もあるのだから、そう
いう時は素直にinstance云々の類を使っても良いんでない? 使うべき場面もあるよね?
と言っているだけで。
561デフォルトの名無しさん:2011/12/10(土) 09:22:39.58
>>560
> 554の例がまさにそれだと思うけど。

まずは型を直接指定することのデメリットを考えた上で、
あえて型を直接指定したとしても、instanceofを直書きするのは
下策中の下策だと何度も指摘されていますよね?
562デフォルトの名無しさん:2011/12/10(土) 09:31:21.14
自己否定だよね
563デフォルトの名無しさん:2011/12/10(土) 09:35:11.08
型無し言語の自由度はある種アセンブラの自由度と似た所がある
柔軟性は肯定できるが、その柔軟性が生産性を阻害しているから制限を加えようとしたのに先祖帰りした印象。
564デフォルトの名無しさん:2011/12/10(土) 09:37:00.08
>>561
では>>554の例に対するベターな解法よろしく。
565デフォルトの名無しさん:2011/12/10(土) 10:55:38.34
下っ端に自由なんていらん。
自由が欲しければ実力をつけろ。
566デフォルトの名無しさん:2011/12/10(土) 11:12:38.25
メソッドを呼ぶ前に引数の型チェックなんてしたら
メソッドを呼びだしを行ってる変数で多態できなくなるじゃん
567デフォルトの名無しさん:2011/12/10(土) 14:52:04.95
>>564
問題が曖昧すぎて解法もクソもないだろwww
568デフォルトの名無しさん:2011/12/10(土) 15:15:52.47
>>566
呼びだしを行ってる変数ってself、thisのこと?

>>564
それってXがAと定義したとき、XはAだよねって言ってるようなもんで、
そりゃその通りとしかいえなくなるでしょ。

元の話の流れは動的型でinstanceofが有効な場面を想定する時点で、
そもそも本末転倒な話だってことだよ。
569デフォルトの名無しさん:2011/12/10(土) 17:03:27.61
>>550
>普通にその通りだと思うけど、アノテーションでもメソッド叩くのでも例外処理でも
>処理できないような引数チェックの具体例ぷりーず!

>>554

>>568
>元の話の流れは動的型でinstanceofが有効な場面を想定する時点で、
>そもそも本末転倒な話だって

なんじゃそりゃ。
つまり「動的型でinstanceofが有効な場面」は存在するしそういう場合は
instanceofを使えば良いって事でFAね。
570デフォルトの名無しさん:2011/12/10(土) 17:05:36.52
動的型付け言語ってさ
メソッドに想定してない型のオブジェクト渡したら
どうなるの?
571デフォルトの名無しさん:2011/12/10(土) 17:12:18.15
そのメソッド内でオブジェクトのメソッドとか呼ぼうとしたらそんなメソッドねーよexceptionが飛ぶ
たまたま同名のメソッドとか持ってたら動いてるけど挙動がおかしいみたいになる可能性もある
572デフォルトの名無しさん:2011/12/10(土) 17:17:58.42
>>569
自分へのレスは全部同一人物が書いたと思い込むタイプの人?
573デフォルトの名無しさん:2011/12/10(土) 17:23:38.43
>>572
どうしてそう思うの?
568がそもそもどういう流れで>>554が出てきたのか話の繋がりを読めていないか
読めていてもいささか理不尽なことになっているので、親切にわざわざ要点の引用
までして話の経緯を示したのに。
574デフォルトの名無しさん:2011/12/10(土) 17:24:26.40
>>571
その場合ユニットテストはどうするんですか?

もしかして、正常なオブジェクトを渡した時だけしかテストしないの?
575デフォルトの名無しさん:2011/12/10(土) 17:28:45.67
嘘吐き朝鮮、中国人がやってる報道機関 朝鮮人犯罪があまり報道されない理由
韓国文化放送(MBC) 〒135-0091 東京都港区台場2-4-8 18F
フジテレビジョン 、、 〒137-8088 東京都港区台場2-4-8 

韓国聯合TVNEWS(YTN) 〒105-0000 東京都港区赤坂5-3-6
TBSテレビ     、 、、 .〒107-8006 東京都港区赤坂5-3-6 

大韓毎日   、、、、、、、、、、、、 〒108-0075 東京都港区港南2-3-13 4F
東京新聞(中日新聞社東京本社) 〒108-8010 東京都港区港南2-3-13

京郷新聞  、、、、、、〒100-0004 東京都千代田区大手町1-7-2
産経新聞東京本社  〒100-8077 東京都千代田区大手町1-7-2
(サンケイスポーツ、夕刊フジ、日本工業新聞社)

朝鮮日報   、、、  〒100-0003 東京都千代田区一ツ橋1-1 4F
毎日新聞東京本社 〒100-8051 東京都千代田区一ツ橋1-1-1

韓国日報  、、、、  〒100-0004 東京都千代田区大手町1-7-1 8F
読売新聞東京本社 〒100-8055 東京都千代田区大手町1-7-1

東亜日報   、、、  〒104-0045 東京都中央区築地5-3-2
朝日新聞東京本社 〒104-8011 東京都中央区築地5-3-2(AFP、NYT)

韓国放送公社(KBS) 〒150-0041 東京都渋谷区神南2-2-1NHK東館710-C
NHK放送センター、  〒150-8001 東京都渋谷区神南2-2-1

内にも外にも無能なのは今の日本の政治は朝鮮が行っているから
帰化人だらけの野田内閣をみてみろよ
576デフォルトの名無しさん:2011/12/10(土) 17:31:06.32
>>570
引数としてdict型を期待しているメソッドが、
そのメソッドの中でget()メソッドだけ使っているなら、
get()メソッドを独自の実装した型の値を渡しても、ちゃんと動くよ。

つまり、Java等のインターフェイス型では、
そのメソッドで使う十分以上のメソッドを要求することになるけど、
動的型付け言語の場合にはそのメソッドで使うメソッドだけサポートすればいい。

だからクラス階層やインターフェイス型の宣言に縛られることなく、
メソッドを書いた人が期待した型以外の型でも、そのメソッドの要求さえ満たせば
ちゃんと動作するよ。
577デフォルトの名無しさん:2011/12/10(土) 17:37:23.28
> だからクラス階層やインターフェイス型の宣言に縛られることなく、

これが飲み込めてないから、動的型付け言語でinstanceofを使いたいって思うんだろうな
nominalな型システムでもないのに、多態を継承関係にあるクラスだけに限定するなんて馬鹿馬鹿しい
578デフォルトの名無しさん:2011/12/10(土) 17:38:36.88
>>576
それは都合のいい例だけど、
都合の悪い例では、中途半端に動くよね?

たとえばメソッドの中でfooとbarを使っているけど、
barしか実装してない独自の型を渡した時。
579デフォルトの名無しさん:2011/12/10(土) 17:40:42.42
> 動的型付け言語の場合にはそのメソッドで使うメソッドだけサポートすればいい。

つまり、メソッドの仕様として、

このメソッドは以下のメソッドを使用します。
get、put、search、count、・・・

みたいに書いてあるの?
動的型付けの仕様書が見てみたいね。
580デフォルトの名無しさん:2011/12/10(土) 17:42:19.21
>>579
しかもな、メソッドがバージョンアップしたら、
バージョン2.0から、このメソッドはupdateを使用するようになりました。

って書いてあるんだぜ。

だから毎回ライブラリがアップデートしたら
メソッドの仕様を確認しないといけない。
581580:2011/12/10(土) 17:42:38.49
もちろん目視で。
582デフォルトの名無しさん:2011/12/10(土) 17:44:32.40
>>573
「なんじゃそりゃ。
つまり「動的型でinstanceofが有効な場面」は存在するしそういう場合は
instanceofを使えば良いって事でFAね。 」

↑これが「経緯を説明」なのか?
本気でそう思っているのなら、プログラミング言語以前の言語教育の問題だなw
583デフォルトの名無しさん:2011/12/10(土) 17:46:51.37
>>581
なあ、静的厨って、みんなお前みたいな馬鹿なのか?

IDEの機能の多くが動的型言語から出てきたことの意味がまるで分かってないな。
584デフォルトの名無しさん:2011/12/10(土) 17:47:27.57
>>579
仕様書なんてなくてもIDEがちゃんと教えてくれるよ。
585デフォルトの名無しさん:2011/12/10(土) 17:48:20.84
>>582
そうね。次回からはもっと丁寧に書くよ。ちなみに、

>動的型でinstanceofが有効な場面」は存在するしそういう場合はinstanceofを
>使えば良いって事

に対する反論とかはない?
586デフォルトの名無しさん:2011/12/10(土) 17:48:39.10
>>578
どんな言語でも、お前みたいなクソ馬鹿野郎がバグ仕込めば動かなくなるが?
587デフォルトの名無しさん:2011/12/10(土) 17:49:28.11
>>585
反論以前に皆に呆れられてることに気付けよ。マジで。
588デフォルトの名無しさん:2011/12/10(土) 17:52:32.89
>>577
そゆこと。staticでnominalな型しか理解できないのだろう。
ましてやdynamic typingはstructuralなtype systemよりも
遥かに柔軟だということ理解できないのだろう。

おそらく、Javaにはない概念は理解できないということ。
つまり、典型的なドカタ。
589デフォルトの名無しさん:2011/12/10(土) 17:52:54.87
>>587
またまたぁw 反論してから呆れてみせても遅くないのにw
590デフォルトの名無しさん:2011/12/10(土) 17:56:03.62
>>589
本当に自覚ないのか?(呆
591デフォルトの名無しさん:2011/12/10(土) 17:57:19.78
>>589
はいはい、そうでちゅね、
安心したら、さっさとジャバのプログラム書いてね。
キミは月30万のドカタなんだから。
592デフォルトの名無しさん:2011/12/10(土) 18:01:16.69
instanceofを使いたくなるような状況になったら、
動的型のコードの設計として間違ってるサインだわな。

なんか、一人だけムキになってる人がいるみたいだけど、
彼はJavaでも書いてれば幸せなんじゃないの?
593デフォルトの名無しさん:2011/12/10(土) 20:18:06.40
>>591
やっぱり、そういうことにしないと
気がすまないの?w
594デフォルトの名無しさん:2011/12/10(土) 20:21:01.82
>>574
動的言語で引数に間違ったオブジェクトを入れたら
エラーにすればいいじゃん。

メソッドの最初で型チェックコードを入れて、
型が違えばエラーを出せばいい

ま、普通に静的言語を使ったほうがいいと思うけどね。
595デフォルトの名無しさん:2011/12/10(土) 20:26:42.69
duck typing はまさに小規模向きの機能だろ
596デフォルトの名無しさん:2011/12/10(土) 21:02:15.57


肝障害を引き起こす可能性があり、海外では販売が禁止されている花王のヘルシア
なぜ日本では売られ続けるのでしょうか


http://ruru2.net/jlab-ruru/pct/s/ruru1316210800870.png
http://ruru2.net/jlab-ruru/pct/s/ruru1316210808155.png
http://ruru2.net/jlab-ruru/pct/s/ruru1316210775533.png
花王の社長は反日○○人
597デフォルトの名無しさん:2011/12/10(土) 22:31:47.03
>>574
通常と異なる型の値を渡す場合のテストは
通常と異なる型の値を渡すコードのテストで十分

おまえはfinalでないクラスを引数の型にしたとき
どうやってテストするんだい?
598デフォルトの名無しさん:2011/12/10(土) 22:33:53.18
>>594
そうだね、
型のチェックを決め打ちで直書きするようなバッドプラクティスをするような人は
素直にJavaでも使っていればいいのでは?
正直、あなたのようなダメコーダーが混ざると品質が落ちて迷惑だから、
ダメコーダーは全員Java使っていて欲しいと思う。
599デフォルトの名無しさん:2011/12/10(土) 23:12:36.86
動的型付け言語は効率が悪い => 実はJavaと同じように設計・コーディングしてました

この流れは酷いw
600デフォルトの名無しさん:2011/12/10(土) 23:46:58.92
>>598
今はダメコーダー率が高いのはPHP。あとはやっぱりMS系の言語。
Javaは最近50万強でそれなりの人が来る。
601デフォルトの名無しさん:2011/12/10(土) 23:48:23.92
というような話も含めてできれば面白いんだけど。
「コーダー」を馬鹿にするけど「コーダー」の経験の無い人が開発を語るなと言いたい。
602デフォルトの名無しさん:2011/12/11(日) 00:33:27.00
コーダーでも出来るような作業を
俺は頑張ってるんだって表現したい。

それが動的型付け厨が思っていること。
単純作業にされてしまうと困るんだろうね。

もっと上の立場(アーキテクト)になればいいのにって思うよ。
603デフォルトの名無しさん:2011/12/11(日) 00:53:57.43
気にすんな。 コーダーをああだこーだなんていう気はない。
604デフォルトの名無しさん:2011/12/11(日) 01:15:16.70
>>597
>通常と異なる型の値を渡す場合のテストは
>通常と異なる型の値を渡すコードのテストで十分

>>576
>クラス階層やインターフェイス型の宣言に縛られることなく、
>メソッドを書いた人が期待した型以外の型でも、そのメソッドの要求さえ満たせば
>ちゃんと動作するよ

って書いてるんだから型で精査したら駄目なんじゃないの?
605デフォルトの名無しさん:2011/12/11(日) 01:30:19.64
単にメソッド名が同じで挙動が意図したものと違うメソッドを持つオブジェクトを渡して
ちゃんと変な挙動になるかどうかをテストすれば完璧じゃねw
606デフォルトの名無しさん:2011/12/11(日) 01:30:48.00
難しいよね。普通に考えれば変な型を渡したらエラーになるべき。
それも一切の副作用なしで。

コードのどこかでエラーになるのを期待するのは
管理できているとは言えない。

引数のオブジェクトにメソッドがあればOKということだが、
一部のメソッドだけあると途中までOKだけど、途中でエラーになる。

そうなると、メソッドの最初で型を見てチェックするか、
メソッドを見てチェックしないといけない。型がだめなら
メソッドがあるかないかをチェックする。

そうすると、動的型付け言語はすごく面倒な言語ってことになる。
だから手抜きして書く。
そうするとへんなオブジェクトを渡したら、中途半端に動くメソッドができてしまう。
607デフォルトの名無しさん:2011/12/11(日) 01:35:41.98
分かった。考え方の違いだ。

メソッドを間違った使い方をした時、

間違った使い方をしたというエラーが表示されへんな状態にはならないのが、静的型付け言語
間違った使い方をした人が悪い、状態は不定になるってのが動的型付け言語

ということは、堅牢性をもとめるなら
やっぱり静的型付け言語の方がいいってことなのかな。

動的型付け言語でもちゃんと型チェックすればいいんだけど、
そうすると静的型付け言語よりも面倒になるから意味がなくなる。
608デフォルトの名無しさん:2011/12/11(日) 01:59:42.52
動的型の言語はある程度プログラマの性善説に頼るところが大きい。
609デフォルトの名無しさん:2011/12/11(日) 02:28:41.22
性善説と言うよりも、
ミスをしないという前提なんだろうね。
610デフォルトの名無しさん:2011/12/11(日) 03:16:00.71
静的型付け言語でも間違った引数を網羅するようなチェックは普通は入れないけどねぇ
611デフォルトの名無しさん:2011/12/11(日) 03:21:47.44
間違った引数の網羅ってなんだ?
普通は正しい値だけ通すだろ。
612デフォルトの名無しさん:2011/12/11(日) 04:06:37.19
どんな値が渡ってきても正しい値だけ通すようなチェックって数値や文字列ならいいけどクラスとかを引数の型にすると難しいだろ
613デフォルトの名無しさん:2011/12/11(日) 04:56:00.09
頭ん中でこういうクラスのオブジェクトが来るだろうと決めうちしてゴリゴリ
書いているだけなのが殆どでしょ。
想定してしたシグネチャのメソッドが無くても勝手に例外投げるから良いだろ、
みたいな感じ。
614デフォルトの名無しさん:2011/12/11(日) 05:43:55.92
>>607
> そうすると静的型付け言語よりも面倒になるから

そんなことないよ。
型アノテーションの仕組みを仕込めばいいだけ。
静的型言語で動的型的なことをするほうが遥かに面倒。
615デフォルトの名無しさん:2011/12/11(日) 05:45:32.43
>>613
そうそう、Javaプログラマはシグネチャさえ合ってればいいと
思ってるからコードの品質が低いよね。
616デフォルトの名無しさん:2011/12/11(日) 07:16:09.99
>>605
静的型でも、ちゃんと継承して変な挙動のメソッドを実装したクラス作って
そいつのインスタンスを渡したときに
ちゃんと変な挙動になるかどうかをテストすれば完璧だね
617デフォルトの名無しさん:2011/12/11(日) 07:16:15.08
>>610 >>611
http://ja.wikipedia.org/wiki/%E5%A5%91%E7%B4%84%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0
この手の手法だよ、C#でも不完全だが実装されている。
コード中に引数や戻り値があるべき条件を書いておくと
コンパイラがそのコードを抽出して必要な位置に移動する仕組み。

引数に定数を渡した場合で仕様の範囲を外していたなど、コンパイル時に明らかなミスを除去できればデバッグは楽だね。
618デフォルトの名無しさん:2011/12/11(日) 07:29:25.46
>>614
それは堅牢性を求めるのであれば型アノテーション使って
入力値に関して動的型的なことをするのは諦めると言うことか。
619デフォルトの名無しさん:2011/12/11(日) 07:38:21.46
>>614
というか型アノテーションの無い言語ではどうするの?
620デフォルトの名無しさん:2011/12/11(日) 07:38:21.90
>>618
違うよ。
型アノテーションといっても、instanceofによるチェックだけでなく、
respondtoやisXYZによるチェックをしてもいいだろ?
デバッグやテスト用に、入力オブジェクトに関する単体テストを実行したっていい。

そういう色々な対応ができるのが動的型付言語。
引数の仕様の記述を言語仕様で規定している静的型付言語では
その言語の型システムに縛られて、上記のような柔軟なチェックは難しい。
621デフォルトの名無しさん:2011/12/11(日) 07:41:12.51
>>619
作ればいい。簡単な話だ。
pythonのdecoratorのようなメタプログラミング機能があればそれを使う。
なければ、プリプロセッサを書いてもいいし、
型アノテーションをコメントに埋め込んで、
IDEが設定に応じてそれを関数本体部に埋め直してもいい。

せっかく柔軟な動的型付言語をつかうんだから、
言語仕様も処理系もIDEの役割分担も、柔軟に考えたほうがいい。
622デフォルトの名無しさん:2011/12/11(日) 07:45:27.03
つまり各々手作りし無ければならないと・・・面倒だね。
623デフォルトの名無しさん:2011/12/11(日) 07:50:19.24
>>621
そういう、「〜〜すればいい」「〜〜できる」「〜〜してもいい」
というようなテクニックを、プロジェクトごとに、あるいは会社ごとに、
いちいち再発明しなければいけないというのは、非常に効率が悪い。
標準、あるいはコミュニティによるデファクトスタンダードでも構わないが、
ともかくフレームワークとして提供されていてほしい。

というのが、ドカタ視点で期待すること。

やればいい、できる、これはコスト無視の趣味グラマの発想。
ドカタにとっては時間=金なので、最初に天秤ありき。
624デフォルトの名無しさん:2011/12/11(日) 07:51:53.88
エリートドカタは残業代でないからな
625デフォルトの名無しさん:2011/12/11(日) 08:06:15.86
なんで毎回作りなおすとかいう前提になるんだろう?
作ったものを育てながら使うという発想がないのだろうか?
626デフォルトの名無しさん:2011/12/11(日) 08:08:47.25
>>625
最初の障壁。
なんで俺が作らないといけないんだろう。

これを甘えと言うのが趣味グラマ発想。
仕事なら、そこから作らなきゃいけないならJavaでやる方が早い。となるだけ。
627デフォルトの名無しさん:2011/12/11(日) 08:15:30.84
やだよ。Java冗長なんだもん
型チェックのデコレータなんて5分もあれば作れるんだから
全然ペイしない
628デフォルトの名無しさん:2011/12/11(日) 08:15:35.05
俺がオレオレフレームワーク作ったところでメンテはどうするのという甘えもあるな。
インフラになってくる部分は特に。
既に安定している実装があればそれを使いたいところだ。というか、無いの?
629デフォルトの名無しさん:2011/12/11(日) 08:20:34.90
「無ければ作る」と「無いから使わない」の違いだな。

趣味としてなら、車輪を「より美しく再実装」するのは
純粋にプログラミング領域に専念できる楽しい作業。
極論すれば、再実装できる車輪が沢山残されている言語ほど
魅力的だとも言える。

仕事では、「美しい」というのはユーザにとっての価値にならない。
「金」のためのプログラミングなら、汚くても車輪が揃っている言語の方がよい。
「金」と「楽しさ」と両方いいとこ取りしようとするのは感心しない。
630デフォルトの名無しさん:2011/12/11(日) 08:22:09.82
「あるから使う」も加えておいてくれ。
631デフォルトの名無しさん:2011/12/11(日) 08:23:34.10
>型アノテーションをコメントに埋め込んで、
>IDEが設定に応じてそれを関数本体部に埋め直してもいい。

こういうの、あるの?
632デフォルトの名無しさん:2011/12/11(日) 08:35:16.45
>>629
> 仕事では、「美しい」というのはユーザにとっての価値にならない。

仕事だからこそ、質の高いコードを効率的に書くんだろ。
ありもの使って結果だけ出ればいいというのは趣味グラマまでで
卒業してくれよ。たのむから。

デコレータ系のようなメタプログラミングライブラリや
コードチェッカー系やプリプロセッサ系のツールは
蓄積するごとに質の高い仕事ができるようになる。
趣味でやってるならともかく、仕事でプログラミングするんなら
当然皆やってることだろ。ドカタ以外は。
633デフォルトの名無しさん:2011/12/11(日) 08:36:24.99
>>632
xUnit とか自分の組織で再実装してますか?そういう問題なのですが。
634デフォルトの名無しさん:2011/12/11(日) 08:37:38.27
Javaドカタはエクセルの仕様書に書いてあることをJavaの文法に書き直すだけ。

それ以外のことは仕事だと思ってないんだよ。
635デフォルトの名無しさん:2011/12/11(日) 08:37:58.44
各組織で質の高いコードを効率的に書くために、
どの組織でも使うようなものは、全世界のプログラマが協力してOSSとして共有する。

この基本理念を理解できていない人?
636デフォルトの名無しさん:2011/12/11(日) 08:38:14.73
>>633
なんでそこで再発明の話になるわけ?どこまで馬鹿なん?
637デフォルトの名無しさん:2011/12/11(日) 08:39:42.43
どのようなモノがOSSとして共有されているかというところに
各言語が何を目指しているかの指向性が出るのであって、

それが、Javaは比較的、ビジネスを指向している。
動的型付け言語はJavaに比べると、そうではない。
比較のために言えば、関数型言語とか論外。
638デフォルトの名無しさん:2011/12/11(日) 08:39:58.67
>>635
そうだよね、動的型付け言語では良いプラクティスを支援する
ちょっとしたコードを共有する習慣があるのは、普通のことだよね。

Javaドカタには理解できないだろうけど。
639デフォルトの名無しさん:2011/12/11(日) 08:40:30.58
>>629
俺は好きな言語でプロトタイプ開発&フレームワーク開発&仕様決定をやって
すごく楽しいのに、下っ端連中は給料1/3でJava使わされてるわ
640デフォルトの名無しさん:2011/12/11(日) 08:41:04.76
>型アノテーションをコメントに埋め込んで、
>IDEが設定に応じてそれを関数本体部に埋め直してもいい。

これ共有されてますか?具体例を無視しないで教えて。
641デフォルトの名無しさん:2011/12/11(日) 08:42:27.66
>>639
>プロトタイプ開発&フレームワーク開発&仕様決定

その好きな言語が動的型付け言語なら、スレタイどおりで語るに落ちたというところだが。
642デフォルトの名無しさん:2011/12/11(日) 08:42:57.83
動的型付け言語で、そこまでを素早くやって、下っ端連中がJavaで大規模開発するということだろう。
643デフォルトの名無しさん:2011/12/11(日) 08:49:10.05
>>640
さあ、他人はどうか知らんけど、オレは10年前から愛用してるよ。

コメントに検査コードを埋め込んで、それを実行するというアイデア自体は昔からある。
昔はCで行われていたし、
Eiffelの表明検査のON/OFFもコンパイラが同じことしてる。
他にも関数や手続きの冒頭のコメントに検査コードを埋めておくことは
結構多くの言語で実践されているプラクティスだと思うが?
644デフォルトの名無しさん:2011/12/11(日) 08:50:21.35
>>643
それを何故公開しないのですか?
645デフォルトの名無しさん:2011/12/11(日) 08:50:36.00
>>641
フレームワークは大規模開発ではないと言いたい?
どこまでユトリなんだよ・・・
646デフォルトの名無しさん:2011/12/11(日) 08:50:49.42
共有されているか否かを質問されているのにな。
647デフォルトの名無しさん:2011/12/11(日) 08:51:03.09
てか、給料の話なら動的型付け言語を使う人の方が高いでしょう。
動的型付け言語の方が設計段階でのプロトタイピングといった
軽さ、素早さの求められる作業に向いていて、
上流工程の方が給料が高いという慣習と相関があるからですね。

大規模小規模という話とは関係がないのでは、
というかむしろ、動的型付け言語を使う人の方が給料が高いというのは、
動的型付け言語が小規模開発向けだということの証左ですよ。
給料の安い下流工程の方が大規模になるのだから。
648デフォルトの名無しさん:2011/12/11(日) 08:51:39.34
>>644
キミはどんなツールを公開しているんだい?
他人にクレクレ言ってばかりいないで、

自 分 が 何 を 貢 献 で き る の か

 考 え て み ろ よ 。
649デフォルトの名無しさん:2011/12/11(日) 08:52:15.47
Pythonのdoctestとか標準ですしね
650デフォルトの名無しさん:2011/12/11(日) 08:52:52.98
>>647
うわ、わかりやすいドカタ思考w

上流とか下流とか関係ねーよ
質の高い仕事をしたら高い工賃をとれる
それだけの話
651デフォルトの名無しさん:2011/12/11(日) 08:54:39.65
>>645
フレームワークは小規模であるべき。
オレオレフレームワークが巨大になるのは大企業でありがちだが、それは駄目な例。
652デフォルトの名無しさん:2011/12/11(日) 08:55:33.79
>>648

> 自 分 が 何 を 貢 献 で き る の か

というの発想をしなければ使えない言語は仕事では使えない。
653デフォルトの名無しさん:2011/12/11(日) 08:56:27.92
>>650
金の話なら、自分はプログラムを書かないので結構給料は高い。
654デフォルトの名無しさん:2011/12/11(日) 08:56:45.36
フレームワークは大規模開発じゃないという発想は、

自分ではフレームワークを作ったことがなくて、
既存のフレームワークを使ってユーザコード書くことしかしていないから。

だから、フレームワーク=小規模という発想になるんだろうなw
655デフォルトの名無しさん:2011/12/11(日) 08:57:04.70
ぶっちゃけ、動的とか静的とか関係なく、日本語を書く仕事の方が給料は高い。一般論。
656デフォルトの名無しさん:2011/12/11(日) 08:57:20.80
テストツールの類は最低でもチーム内では共有されていないと意味ないしな。
657デフォルトの名無しさん:2011/12/11(日) 08:57:26.73
英語の方がもっと高い
658デフォルトの名無しさん:2011/12/11(日) 08:57:27.91
>>653
なるほど、プログラマじゃないから動的型付けの良さがわからないのか。
659デフォルトの名無しさん:2011/12/11(日) 08:58:17.30
>>652
「仕事」の前に「ドカチン」が抜けてますよ!
660デフォルトの名無しさん:2011/12/11(日) 09:00:20.42
>>651
Hadoopとかもクソなんですか?
661デフォルトの名無しさん:2011/12/11(日) 09:01:35.96
個人的には、フィールドや関数のシグネチチャに const 修飾子を書けない言語は恐い。
662デフォルトの名無しさん:2011/12/11(日) 09:04:37.50
>>661
関数型言語でも使ってろよ、書くまでも無く問答無用で全部constだw
663デフォルトの名無しさん:2011/12/11(日) 09:05:53.17
OSSとして共有されているフレームワークと企業内フレームワークを区別しないからややこしくなる。
オレオレフレームワークが巨大なのはよくない。

なぜOSSならよくてオレオレなら駄目かといえば
OSSは「〜〜を使える人」という条件を付けてもプログラマが集まるが
企業内フレームワークでそれをやるとアウトソースしにくくなるから。
664デフォルトの名無しさん:2011/12/11(日) 09:10:53.19
>>658
自分でもコード書く仕事してる連中と、
下っ端率いるのが仕事の牢名主では
言語に対する評価軸が違うのは当然
665デフォルトの名無しさん:2011/12/11(日) 09:12:27.29
>>662
何故煽られるのかわからないが、全部 const なのは不便で論外だ。
const であるべきものに const と表明できることに意味がある。
もちろん、その表明をチェックすることまで含めて。
そのチェックが実行時でもまあいいのだが。

const x = 1;
x++;

この x++ をエラーでも例外でも何でもいいから弾いてほしい。型とは無関係。

function setX(x) { this.x = x; }
function foo(x) const {
 setX(x);
}

foo(x) の中での setX(x) の実行をエラーでも例外でもいいので弾いてほしい。
型とは無関係。
666デフォルトの名無しさん:2011/12/11(日) 09:16:19.32
freezeの類を持っている言語なら結構実行時エラーとして弾けると思うけれども
でもスレタイとは直交したネタでもある。
667デフォルトの名無しさん:2011/12/11(日) 09:16:30.58
>>663
本当にわかりやすいドカタ思考だな
HadoopだってHBaseだってMongoDBだって元はオレオレフレームワークだろが
668デフォルトの名無しさん:2011/12/11(日) 09:20:33.34
>>667
そうだよ。元はね。
公開したというのが本質。
669デフォルトの名無しさん:2011/12/11(日) 09:22:47.03
>>666
俺も理論的には直交している気がするが、
今現在世の中で使われている言語、という条件をつけると直交していないと思う。
670デフォルトの名無しさん:2011/12/11(日) 09:24:17.80
>>668
さらに補強すると公開しただけではなく公開後も生き残った選抜済みの
OSSであり、当面は死なないだろうという事も期待できるのが重要。

区別はすべき。
671デフォルトの名無しさん:2011/12/11(日) 09:30:34.32
>>670
そうだね、区別することは大事だ。

仕事で開発してるフレームワークだからといって、
非公開フレームワークとは限らないし、小規模フレームワークとも限らない。

ドカタでなければ普通に区別できるはずだが、
どうもこのスレには区別できない人がいるらしい。
672デフォルトの名無しさん:2011/12/11(日) 09:31:37.71
ましてやそのフレームワークが有用かどうかとは全く別問題だよね。
673デフォルトの名無しさん:2011/12/11(日) 09:33:40.52
オプソと言うとタダ乗りすることしか頭にないんだね

かわいそうに
674デフォルトの名無しさん:2011/12/11(日) 09:39:02.42
と煽る自分もタダ乗りしてるんだろうと思われるのが2chなので、
そういう議論をしたいなら名乗れる場所でやらないと意味がない
675デフォルトの名無しさん:2011/12/11(日) 10:02:47.17
赤の他人が書いたコードを引き継ぐ事になったときに、
より絶望的な思いをする事の多い言語=大規模開発に向かない
そういうことが比較的少ない言語=大規模開発に向く

自分が書くなら好きな言語で書くのが一番効率がいい。当たり前
676デフォルトの名無しさん:2011/12/11(日) 10:06:05.76
>>675
そういうことなら動的型付言語のほうが大規模開発に向くな。
赤の他人のオレオレクラスやオレオレインターフェースへの絶対服従を要求される静的型付言語より
柔軟に自分のコードに置き換えていける動的型付言語のほうがずっとマシ。
677デフォルトの名無しさん:2011/12/11(日) 10:13:25.87
そうなんだね
678デフォルトの名無しさん:2011/12/11(日) 11:04:05.54
型アノテーションってさ、
要するに静的型付け言語になれってことじゃないかw

静的型付け言語で動的型付け言語みたいなことをするのは簡単。
実際に出来る。Object型にキャストすればいいだけ。
679デフォルトの名無しさん:2011/12/11(日) 11:06:45.70
>>676
柔軟に自分のコードって・・・
お前、自分一人で開発してんのか?
それは小規模っていうんだぞ。


いいか、お前の言っているのことは
お前が書いたコードを、他人のコードに変更される
ということを意味してるんだぞ
どこが大規模に向いているんだよ。逆じゃないか。

あと、奴隷根性は卒業しろ。絶対服従を要求される。
それはお前がやってることの立場が低いからだ。
要求する立場(アーキテクト)になれ。
680デフォルトの名無しさん:2011/12/11(日) 11:20:48.12
>>678
そのObject型にキャストするという素晴らしいアイデアで
>>423と同じコード書いてみて
681デフォルトの名無しさん:2011/12/11(日) 11:25:32.11
叩き台を叩いて壊すのが専門という人はどこでも厄介なものです
682デフォルトの名無しさん:2011/12/11(日) 11:28:52.72
>>680
それは、Objectにキャストしないで実装できるだろw
インターフェース持たせればいい。
683デフォルトの名無しさん:2011/12/11(日) 11:29:39.11
「大規模なソフトウェア」と「大規模な開発」は全く違う
前者は LOC で計測される概念
後者は人数・組織数・年数で計測される概念
684デフォルトの名無しさん:2011/12/11(日) 11:34:01.52
大規模なソフトウェアってのは殆ど無い。
なぜなら大規模なのは機能が多いだけだからだ。

機能が多い=単純に画面が多いと考えてもいい。
基本的に似たような処理で作れるものなので
単純作業といってもいい。

こんな所で俺の腕の見せ所だなんて言ってるのが
動的ドカタ。単純作業を本当に単純作業にすると
腕の見せ所がなくなるから強く反対している。
685デフォルトの名無しさん:2011/12/11(日) 11:34:12.94
>>678
動的な型を勘違いしてないか?
686デフォルトの名無しさん:2011/12/11(日) 11:36:16.89
>>685
あってるよ。
動的な型なんて必要性は殆ど無く、
インターフェースがあれば代用可能なもの。

どうしても必要な場合ってのはまず無いが
そういう時にはキャストすれば良い。
687デフォルトの名無しさん:2011/12/11(日) 11:36:49.58
動的型付は正直良くないと思うが、動的型付を理解できずにただ吠えている奴がいるので嫌な気分。
688デフォルトの名無しさん:2011/12/11(日) 11:37:25.72
>>682
え?
689デフォルトの名無しさん:2011/12/11(日) 11:39:31.65
インターフェースや継承なんかで対応できないものって
なにがあるの?
690デフォルトの名無しさん:2011/12/11(日) 11:40:10.20
>>689
evalだけ。あんなものは普通使わん。ハックぐらい。
691デフォルトの名無しさん:2011/12/11(日) 11:42:32.62
>>690
自演ですか?
理解できないのを誤魔化さないように。
692690:2011/12/11(日) 11:45:03.43
>>691
違いますが。

それならそれで、あなたが別の答えを
用意したらいいんじゃないですか?
693デフォルトの名無しさん:2011/12/11(日) 11:48:04.34
>>692
>叩き台を叩いて壊すのが専門という人はどこでも厄介なものです

叩き台を良くする人=eval 以外の「インターフェースや継承なんかで対応できないもの」を書く。
叩き台を叩いて壊す人=691
694デフォルトの名無しさん:2011/12/11(日) 11:48:23.06
>>682
Scala の implicit def なら分かるが、インターフェース?
何を言ってるんだ?
695デフォルトの名無しさん:2011/12/11(日) 11:48:51.92
だから別の答えを用意しろと。言い訳ばかりだな。
696デフォルトの名無しさん:2011/12/11(日) 11:50:44.35
匿名型なんかを見ていると動的型付で便利とされる書き方でも、静的な型としてコンパイル時に確定する事ができる場合もあるんだよな・・・
静的型付けにできれば、強力なチェックが行えるのでこの辺り実行時と言わずコンパイル時エラーにできるとデバッグは楽になるし
インテリセンスなんかも作れるのではないかと妄想したりする。
無知が吠えているので書いても流されるんだろうな、勉強すればいいのに・・・
697デフォルトの名無しさん:2011/12/11(日) 11:51:22.52
動的ドカタは自分の仕事にプライドを持ってるんだから
お前がやってることは単純作業って言ったら可哀想だろうw
698デフォルトの名無しさん:2011/12/11(日) 11:53:21.43
>>697
ぶっちゃけお前みたいな知恵遅れが居ると静的型付けを語れないんだよ、死ね無知
699デフォルトの名無しさん:2011/12/11(日) 11:54:10.22
>>698
語ればいいだろ。
700デフォルトの名無しさん:2011/12/11(日) 11:58:56.59
2chでは、コピペではない長文(5行〜10行程度)なのにレスが付かない

発言を抽出すると、S/N 比が抜群に高まるということが経験的にわかっているので、
興味のあるスレッドを登録して個人的に運用中です。
701デフォルトの名無しさん:2011/12/11(日) 12:24:52.31
静的型付けでもC#の拡張メソッドやScalaのimplicit conversionのように
動的型付け言語のオープンクラスに近いことが出来るようになってきてる

もちろん、継承とインターフェースとObject型へのキャストで十分とか
言ってる馬鹿には無用の機能なので、ドカタ専用言語Javaには実装されてない
702デフォルトの名無しさん:2011/12/11(日) 12:26:43.48
なんだJava叩きをしたいだけかよw

はい、みなさん、わかりましたね。
静的型付けでもC#の拡張メソッドやScalaのimplicit conversionのようなことが
できるんです。
703デフォルトの名無しさん:2011/12/11(日) 12:39:01.60
ここにはJavaを叩きたいだけのやつが住んでるから
704デフォルトの名無しさん:2011/12/11(日) 12:39:41.24
つうかauto型を持つ静的型言語なんて、
動的型連合国への無条件降伏だよなw
705デフォルトの名無しさん:2011/12/11(日) 12:40:09.72
>>703
いいから涙を拭けよw
706デフォルトの名無しさん:2011/12/11(日) 12:42:15.51
>>704
静的型付けをやめたわけじゃないんだから
降伏じゃないだろw

静的型付け言語には動的型付け言語の機能を
取り入れられるがその逆はできない。

もし最強の言語があったとしたら
それは静的型付け言語を進化させたものになるだろう。
707デフォルトの名無しさん:2011/12/11(日) 12:44:16.42
動的の感覚に近づこうとしてるよね。goみたいなコンパイル漠速も
近づこうとしている。
708デフォルトの名無しさん:2011/12/11(日) 12:46:34.02
動的型付け言語に静的型付け言語の機能を加えようとしたら
根本的に再設計が必要になるからね。

捨てるのは簡単だけど、抜けてる型情報を補うのは大変。
709デフォルトの名無しさん:2011/12/11(日) 13:03:55.48


犬猫子供を出せば、馬鹿は見るだろ?
 某テレビ局在日社員
710デフォルトの名無しさん:2011/12/11(日) 13:27:22.64
>>706
> 静的型付け言語には動的型付け言語の機能を
> 取り入れられるがその逆はできない。

逆だよ。
動的型付け言語には静的型付け言語の機能を取り入れることが出来る。
型アノテーションや型推論が好例。

しかし静的型付け言語に動的型付けの自由度を取り入れることは困難だ。
なぜなら、静的型付け言語の表現能力は、静的型の検証性に依拠しており、
動的型付けで表現可能なプログラムの集合を完全に被覆することはできない。
理論上不可能なんだよ。
711デフォルトの名無しさん:2011/12/11(日) 13:34:14.86
>>7
掘り返すようだがプログラミング言語には知能があってはいけない
言われたことのみを従順に行う
712デフォルトの名無しさん:2011/12/11(日) 13:37:53.42
アイデアマンは動的を少なくとも1つ使いこなすほうがいいよね。
アイデアが浮かばん人は言われたとおりやってればいいけどな。
713デフォルトの名無しさん:2011/12/11(日) 13:42:35.81
C++にしてもScalaにしても自由をどうやって獲得しようとしているか?
それは仕様をより複雑にしてカオスになった上の自由を獲得しようとしている。
だから、複雑怪奇な言語に見える。
C++の失敗を再び犯そうとしてるのがScalaという印象が強いんだよな。

自由や柔軟でぴか一のLispのそれは、S式だからという事はよく言われてるけど
そのとおりだな。これはよく反論もあるようにわからない人に説明しても無駄
という事だと考えている。やっぱりすべてがS式で表されるという強力さだから。
LispとCをやっておけば大抵の言語は習得期間は短いと思う。ML系やSmalltalk
はどっちにも似てないから例外だが
714デフォルトの名無しさん:2011/12/11(日) 13:44:06.39
>>710
> 型アノテーションや型推論が好例。
お前馬鹿じゃないのか?

型アノテーションは実現不可能なアイデア。
だからそんなのを実装している動的型付け言語はない。

型推論は、あれは静的型付け言語に付ける機能だw
715デフォルトの名無しさん:2011/12/11(日) 13:45:27.29
>>713
自由で言えばアセンブラが一番自由だろうさ。
だが自由ってのはgotoと同じで管理不能になりやすい。
だからそこにルールを持ち込むんじゃないか。
716デフォルトの名無しさん:2011/12/11(日) 13:54:24.00
型アノテーションっていうのは、
たとえば、

var hoge; の代わりに Hoge hogeって書くのかい?w

あ、Javaのアノテーションのように

@class Hoge
var Hoge;

と書けばいいのかい?
Hoge hogeと書いたほうが楽そうに見えるけど
型アノテーションのメリットは何だい?w
717デフォルトの名無しさん:2011/12/11(日) 13:55:19.87
var @class Hoge hoge;
こうだろ
718デフォルトの名無しさん:2011/12/11(日) 14:13:14.25
ださっw
719デフォルトの名無しさん:2011/12/11(日) 14:19:16.09
デジドカなのでお前らの言っている事は全く理解できないw
720デフォルトの名無しさん:2011/12/11(日) 14:30:18.84
Javaでも上流に近い工程、設計やアーキテクチャ設計なんかをやっていれば
ドカタじゃないことはよく分かっているわけで、
多分下流工程の作業をさしてドカタって言ってるだろう。

下流工程を、Javaでやればドカタで、動的型付け言語でやればドカタではない。
そう思いたいんだろうね。

ドカタとうるさい奴って、そいつがやっている仕事は、下流工程なんだろう。
721デフォルトの名無しさん:2011/12/11(日) 14:41:10.95
>>720
Java市か知らないアーキテクト何てのは全然信用できないけどな
722デフォルトの名無しさん:2011/12/11(日) 14:42:34.55
>>721
やっぱり、下の立場から見た感想言うんだね・・・。
自分がなればいいのに。
723デフォルトの名無しさん:2011/12/11(日) 14:44:43.21
>>714
Pypyの実装に使われてるRPythonは
Pythonの純粋なサブセットで型推論付き
もちろん推論するのに型アノテーションなど必要なし
724デフォルトの名無しさん:2011/12/11(日) 14:47:51.39
世の中、EXcel マクロが少し触れるくらいのPGスキルしかない上流設計者は多い。
725デフォルトの名無しさん:2011/12/11(日) 14:48:20.68
ぶっちゃけコードも書かずにアーキテクトとか言ってるアホは
全く設計できないけどな
支離滅裂な日本語をコードに変換しろとドカタのケツを叩くだけ

さらに上流の俺等はそういうアホ共を牢名主と馬鹿にしてるってわけ
726デフォルトの名無しさん:2011/12/11(日) 14:49:54.31
そして俺は上流階級の方々の資産を運用している
727デフォルトの名無しさん:2011/12/11(日) 14:51:21.49
RPython。よくわかりました。

RPythonとはなんですか?
RPythonとはPythonの制限されたサブセットです。これはPyPyツールチェーンの中で
動的言語インタープリタを実装するのに使われます。制限のお陰でRPythonプログラムの型推論が出来ます。
(またそれによって究極的には他の言語へトランスレートできます)

"RPythonになる"という特性は関数やモジュール1つではなく常にプログラム全てに適用されます。
(トランスレーションツールチェーンはプログラム全体の解析を行います)トランスレーションツールチェーンは全ての呼び出しを再帰的に追って、何がどのプログラムに所属していて、何がそうでないかを見つけ出します。

RPythonプログラムは任意の方法での混合型の使用を制限します。
RPythonは1つの変数に対して2つの異なる型を束縛することを許可しません。
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
この観点から(そしてほかの観点からも)Javaに似た感じがします。
RPythonで許可されていない他の特徴としては、
__init__, __del__ 以外のスペシャルメソッド(__xxx__)の利用です。リフレクションも使えません。(__dict__など)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^


RPythonからはほとんどの標準ライブラリも使えません。例外はネイティブサポートがあるos, math, timeの一部の関数です。
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

RPythonの制限についてもっと知りたい方はRPythonの説明を読んで下さい。
http://d.hatena.ne.jp/ymotongpoo/20111206/1323163518
728デフォルトの名無しさん:2011/12/11(日) 14:54:21.53
そりゃそーだよ
だってRPythonは静的型付け言語だもの
729デフォルトの名無しさん:2011/12/11(日) 14:56:44.22
静的型付け言語に動的型付機能を取り入れると、リファクタリングツールがそこで機能しなくなるな
元々動的型付にリファクタリングツールは殆ど機能しないけれども・・・
挙動の同一性を保障しながら、引数の順序や名前を置換する一般的な方法は動的型付は不可能

>>701
自演だろう、知恵遅れなのは見え見えだよ
730デフォルトの名無しさん:2011/12/11(日) 14:57:16.22
>>714
> 型アノテーションは実現不可能なアイデア。

!!!!!!!!!!!!!!!!!!!!!!!

こいつ面白すぎ
731デフォルトの名無しさん:2011/12/11(日) 14:59:29.62
面白いとかどうとかレスするんじゃなくて、
反論すべきではないか?
732デフォルトの名無しさん:2011/12/11(日) 15:00:25.33
動的型というのがよくわからないんだけど、型無しと動的型は何が違うの?
733デフォルトの名無しさん:2011/12/11(日) 15:05:40.78
>>720
ドカタの現場監督「おれはドカタじゃない!」
734デフォルトの名無しさん:2011/12/11(日) 15:11:02.98
SQL文字列を直接記述するよりもC#のLINQが優れているのは、リファクタリングツールでメンバ名などを書き換えても
LINQで書かれたソースはC#のソースなのでキチンと置換されてくれる事。
これが文字列として記述されていると、そこで挙動の同一性を保持したまま各種変更を加える事は極めて困難になる。
その文字列がSQLかどうかなど判断したり解析したりするツールなんて思いつかないしね。
本体の言語から、まったく別のシステムまで型システムが貫通するとこういう事もできるようになる。
735デフォルトの名無しさん:2011/12/11(日) 15:13:58.98
>>734
つまりLINQはその程度の存在でしかないのか。
736デフォルトの名無しさん:2011/12/11(日) 15:15:11.28
>>734
SQL で記述可能な任意のクエリを C# の LINQ で書けるということは保証されていますか?
それがないなら LINQ は「所詮」C# のサブセットでドカタ向きですね。


という不毛な議論を、動的型と静的型の極右と極左が延々をやってるだけ
737デフォルトの名無しさん:2011/12/11(日) 15:17:37.49
typed lambda は untyped lambda の subset なのだから、その点では議論の余地はないですよね
738デフォルトの名無しさん:2011/12/11(日) 15:17:50.18
>>735
その程度の存在なのかどうかは保守をした時に判るよ、知恵遅れでもな。
739デフォルトの名無しさん:2011/12/11(日) 15:19:11.81
>>720
俺、下っ端共が使ってる言語なんて全く興味ないわ
もちろん下っ端が使ってるIDEにも興味無し

お前、自称上流行程担当のわりにJavaやらIDEに拘ってるように見えて
俺にはそれが不思議で仕方ないわ
740デフォルトの名無しさん:2011/12/11(日) 15:23:00.53
JavaはともかくIDEのことなんて
一言も書いていませんが?

それはともかく、使う言語や開発環境を決めるのも
アーキテクトの重要な仕事ですがなにか?
741デフォルトの名無しさん:2011/12/11(日) 15:25:26.31
今までちょっとした変更でも、変更してテストして、一週間も一月も掛っていた事が
なんの気兼ねも無く、メニューからチョチョイと変更加えるだけで終わってしまうというのは色々衝撃的だったね。
742デフォルトの名無しさん:2011/12/11(日) 15:25:38.40
>>731
反論するまでもないだろ

マジでおもしろすぎる
743デフォルトの名無しさん:2011/12/11(日) 15:25:49.10
そりゃ下層の仕事だよ
744デフォルトの名無しさん:2011/12/11(日) 15:28:05.87
下っ端に自由にIDEを選ばせたら、
ある人はEclipseを使い、ある人はNetBeansを使うってことになる。

もちろんそれが駄目というわけじゃない。
それを許すなら許すで、違うIDEのプロジェクトファイルを
どう共有するかって話になる。

こういうのは上から決めること。
745デフォルトの名無しさん:2011/12/11(日) 15:29:42.41
dynamic typed language も untyped language の subset でしょう

untyped language というのは全ての値が型無しポインタのようなもの

*x = 2.25;
*y = sqrt(x);

sqrt(x) はポインタ x の指す先が double を表現するビット列だと思って動くだけ。
x の指す先が 2.25 を表現するビット列なら 1.5 というビット列を指すポインタが戻される。

*x = 'a';
*y = sqrt(x);

こう書いても、x の指す先に double を表すビット列が格納されていると思って、
ポインタ y が戻される。もちろん、この場合は y の指す先のビット列を double と思って解釈すれば
意味不明な数値になるだろうが、それは呼ぶ側の責任。呼ばれる側は知らない。

これが untyped な世界です

これじゃあいくら何でも・・・なので、
すべてのポインタの指す先に、型ごとに決められた特定のビットパターンを埋めることにして、
データ本体はそのパターンの後に書くことにしましょう。
関数側は、ビットパターンを検査することで、期待した値が渡されたかどうかはチェックできるようにしましょう。

これが動的型付けの世界。

型無しの世界は、あるビットパターンを int と思って解釈した時と double と思って解釈したときで
異なる挙動をするような曲芸的なプログラミングも可能です。
まあドカタは動的型付けでやってりゃいいです。
746デフォルトの名無しさん:2011/12/11(日) 15:30:22.39
>>741
だろ?
Ralph Johnsonのグループがリファクタリングブラウザを開発した時、
JavaだのC++だのやってた連中は
「ソースコードは自分で書くのがプログラマだ」とか
「そんな誰でも出来る単純な変換が役に立つものか」とか
アサッテな発言していたっけ。

もちろんOOやってない連中などは全く理解できずにポカーンとしてた。
747デフォルトの名無しさん:2011/12/11(日) 15:31:21.86
>>745
ネタにしてもつまらなさすぎ。
748デフォルトの名無しさん:2011/12/11(日) 15:31:37.87
LINQの基礎になっているλ式は、C#の外部のシステムへ型システムをかけ橋する能力があるが
同じλ式でもC++のλ式ではかけ橋を作ることができない、C++もどうせ拡張するのならそういう点を考えて拡張すればいいのに・・・
749デフォルトの名無しさん:2011/12/11(日) 15:33:34.26
>>746
今は、型チェックをするのはプログラマの仕事
とかいう動的ドカタが増えたな。
750デフォルトの名無しさん:2011/12/11(日) 15:33:35.53
>>739
プログラマに数学はいらないぐらい、
アーキテクトにプログラミングは必要ないよな。

751デフォルトの名無しさん:2011/12/11(日) 15:35:44.26
>>745
「これが動的型付けの世界(キリリッ」
と書くのは結構だけれども、

コード例がCのキャストを使った例という時点で、実際には
「これが静的型付けの世界」だったという罠。

型安全な動的型付けでは、そんなつまらんキャストないよ。
データ自身が型情報を持っているから、キャストせずにコアージョンする。
データ自身に型情報が無いために妙なキャストをするのは静的型付けだけ。
752デフォルトの名無しさん:2011/12/11(日) 15:36:29.71
OCamlで-rectypes付ける(equi-recursive)と
untyped lambda をエミュレートできるという豆知識
753デフォルトの名無しさん:2011/12/11(日) 15:37:26.53
745 は動的型付けの利点も意味も理解していないからどーでもいい
754デフォルトの名無しさん:2011/12/11(日) 15:37:46.05
>>750
アーキテクトの仕事わかってないんじゃないのか?

わかりやすく言えばフレームワークを作るのが
アーキテクトの仕事だよ。

もちろんフレームワークを1から作るのではなく
既存のものを選定する作業から始まるけど、
既存のものは足りない機能が多々ある。

それを補うものを作るのもアーキテクトの仕事。
だから高度のプログラミング能力が必要になる。

その結果、フレームワークを使う側は単純作業的な仕事になる。
それを阻止したがってるのが動的ドカタ。
単純作業にされるのをいやがってる。
755デフォルトの名無しさん:2011/12/11(日) 15:38:20.20
>>751
実行時に型を調べるのが動的型付けの本質ですよ。
そのくらいのことも知らずに語ってるのですか?
756デフォルトの名無しさん:2011/12/11(日) 15:38:49.19
>>749
> 今は、型チェックをするのはプログラマの仕事

そうそう
instanceofスキーな静的型ドカタが
if文にinstanceofを直書きすることに固執してたな

動的型言語のプログラマは型チェックは最小限で最大の柔軟性を保とうとする。
どうしてもプログラム中に型を決め打ちして型チェックをせずにいられないのが静的型ドカタ
757デフォルトの名無しさん:2011/12/11(日) 15:38:56.77
皮肉で>>739を釣ろうとしたらガチなドカタが釣れた件について。
758デフォルトの名無しさん:2011/12/11(日) 15:39:38.20
>>754
お前はアーキテクトにはなれないよ、仮になったら色々な人に迷惑だからやめてほしいし。
759デフォルトの名無しさん:2011/12/11(日) 15:39:49.21
静的型付け言語なら、
メソッドのシグネチャで型チェックできるから、
instanceofはいらないぞ。
760デフォルトの名無しさん:2011/12/11(日) 15:41:11.39
>>755
いや、動的型言語では、型情報を参照するのは処理系だけ。
プログラムには出来る限り型チェックをさせない。
型チェックするにしてもinstanceofのようなnominalな検査はしない。
respondtoやisXYZのような動的な検査をする。

キミさ、無知にも程があるよ。
761デフォルトの名無しさん:2011/12/11(日) 15:42:08.25
>>759
ナローキャストはinstanceofの一種だ。知らずに使ってるのか?
762デフォルトの名無しさん:2011/12/11(日) 15:42:16.35
>>760
馬鹿だなあ。型の話をしているのに「処理系」とか出てくる時点で、
理論と実装がごっちゃになっている。
763デフォルトの名無しさん:2011/12/11(日) 15:43:30.87
>>758
いや、現に俺がアーキテクトで成果を上げてるからw

はっきり言うね。日々の開発ってのは単純作業であるほうがいい。
最初にアーキテクチャをきちんと決めて、
日々の開発(単純だが量が多い)をシンプルにすることで
バグは減り開発スピードも上がる。

そういった部分にクリエイティブさを求めるな。
単純作業が嫌なら、上の立場になればいい。

自分のやってる仕事が単純作業にされてしまう立場のお前と違って、
俺は、単純作業にする側の立場だ。
単純作業にするために、フレームワークを作る側と同じで
クリエイティブな作業を行なっている。
764デフォルトの名無しさん:2011/12/11(日) 15:43:53.43
>>762
馬鹿だなあ。
型システムの話をするのに処理系が無関係だなんて、どこまでドカタなんだ?
型推論、静的型検査、動的型検査、どれを取っても処理系とは切り離せないぞ。
765デフォルトの名無しさん:2011/12/11(日) 15:44:57.50
そもそもプログラミング言語の意味論が処理系と無関係とかw
操作的意味論って知ってるか?www
766デフォルトの名無しさん:2011/12/11(日) 15:45:16.92
>>764
馬鹿だなあ。型システムは言語が決めるもので、処理系が決めるものではないよ。
767デフォルトの名無しさん:2011/12/11(日) 15:46:02.21
>>765
知ってる専門用語だけ並べなくてもいいから。
denotational semantics, axtiomatic semantics, operational semantics
一応全部知ってるけど
768デフォルトの名無しさん:2011/12/11(日) 15:46:24.74
俺も知ってる。
769デフォルトの名無しさん:2011/12/11(日) 15:46:38.02
常識だよね
770デフォルトの名無しさん:2011/12/11(日) 15:46:41.07
それくらい知ってるんだぜーw
771デフォルトの名無しさん:2011/12/11(日) 15:47:05.80
>>763
あんたはITアーキテクトとしては底辺ですわ。ドカタのほうがマシ。
だってITなんて自動化が本質だもの。それを単純作業化ってw
772デフォルトの名無しさん:2011/12/11(日) 15:47:14.83
semantics に型が登場しないのが型無しですよ。それだけ。
773デフォルトの名無しさん:2011/12/11(日) 15:48:10.31
>>771
自動化って単純作業の究極系だろw
774デフォルトの名無しさん:2011/12/11(日) 15:48:12.24
静的型付け言語の実行時システムは型無し
動的型付け言語は実行時システムが型付き
775デフォルトの名無しさん:2011/12/11(日) 15:48:35.39
RTTI とか細かい話はやめてね
776デフォルトの名無しさん:2011/12/11(日) 15:49:40.46
>>775
先手を打ったつもりだろうが、それは無視するわけにはいかんな。

静的型付け言語でもRTTIといって
実行時に型情報を持っているのが多い。
つまり>>774は間違い。
777デフォルトの名無しさん:2011/12/11(日) 15:51:17.26
>>773
自動化できる事をドカタにやらせる=コストが高い。
778デフォルトの名無しさん:2011/12/11(日) 15:51:38.46
>>777
お前の言っている、自動化できること。って何のこと?
779デフォルトの名無しさん:2011/12/11(日) 15:52:10.44
テストだよ。
テストは自動生成できる。


んな馬鹿な!w
780デフォルトの名無しさん:2011/12/11(日) 15:52:53.54
>>776
静的型付け言語でRTTIを使うのは動的型付け言語でinstanceofを使うようなものです
781デフォルトの名無しさん:2011/12/11(日) 15:53:33.81
>>745
>型無しの世界は、あるビットパターンを int と思って解釈した時と double と思って解釈したときで
>異なる挙動をするような曲芸的なプログラミングも可能です。

intという解釈とdoubleという解釈する関数があったとして、呼び出しを分ける必要があるだろうから
ただ無駄に苦労してるだけのような
782デフォルトの名無しさん:2011/12/11(日) 15:53:43.59
>>779
あー、新人君でいたな。

テスト自動化の話をしたら、
テストを自動で作ってくれるものと勘違いしていた人w

テスト(コード)を書くのはもちろん人間で、それを何度も実行できることを
テスト自動化っていうんだよって教えてあげた。
783デフォルトの名無しさん:2011/12/11(日) 15:54:35.91
>>780
明示的に使わなくても内部で勝手にやってくれるんだよね。

それって素敵じゃん?
784デフォルトの名無しさん:2011/12/11(日) 15:55:58.70
整数演算をビット演算に置き換えて効率化するなんていう技は、型無しの発想だね
785デフォルトの名無しさん:2011/12/11(日) 15:58:23.54
>>778
単純作業の事。
単純じゃないから人間にやらせてるんだろ。
786デフォルトの名無しさん:2011/12/11(日) 16:00:18.44
>>785
単純作業でも人間がやることはある。
自動化する道具がないならば人間がやるしかない。

例えば人間の言葉(仕様書)から
コードに変換する作業とかな。
787デフォルトの名無しさん:2011/12/11(日) 16:00:29.66
>>784
んなわきゃない。half adderは型なしか?
788デフォルトの名無しさん:2011/12/11(日) 16:02:14.18
>>786
それが本当に単純作業だと思ってるなら、
お前はずいぶんと人を馬鹿にしてるな。
789デフォルトの名無しさん:2011/12/11(日) 16:02:15.69
動的ドカタは自分のやっている作業が
単純作業じゃないと思いたいから
静的型付け言語を嫌うんだな。
790デフォルトの名無しさん:2011/12/11(日) 16:03:02.44
>>783
RTTI使った事ねーのかよ
さっさとググってこい
791デフォルトの名無しさん:2011/12/11(日) 16:03:02.56
>>788
やっぱり単純作業と思いたくないんだな
下流のくせに。
792デフォルトの名無しさん:2011/12/11(日) 16:03:31.38
そういえなXMLからコード自動生成とか流行った事あったな
793デフォルトの名無しさん:2011/12/11(日) 16:03:56.75
レジ打ちとか、あれも単純作業じゃないが
人間がやっている仕事の一つだよな。

人間がやってるなら複雑な仕事だって
思いたいだけじゃないの?
794デフォルトの名無しさん:2011/12/11(日) 16:04:12.57
>>787
半加算器は論理的にはビットを入出力とする関数ですね。何か?
795デフォルトの名無しさん:2011/12/11(日) 16:04:27.81
自動生成って単語が出てくる案件はデスマ確定
796デフォルトの名無しさん:2011/12/11(日) 16:05:02.12
自動生成できないだけで、やってる作業自体は単純ってのは
よくある話。
797デフォルトの名無しさん:2011/12/11(日) 16:05:30.92
>>795
ハンドアセンブルの猛者あらわる
798793:2011/12/11(日) 16:05:42.15
×レジ打ちとか、あれも単純作業じゃないが
○レジ打ちとか、あれも単純作業だが、
799デフォルトの名無しさん:2011/12/11(日) 16:06:18.11
>>791
下流と上流の意味を完全に勘違いしてるな。
800デフォルトの名無しさん:2011/12/11(日) 16:06:50.15
RTTIを使う静的型付け言語は
動的型の長所が欲しくて欲しくて仕方なかったために
動的型付け言語の股をくぐってデータに型情報を持たせたのだろうなw
801デフォルトの名無しさん:2011/12/11(日) 16:06:50.55
まともな大学出てないんだろうな
802デフォルトの名無しさん:2011/12/11(日) 16:06:54.63
はい、今から>>799君が説明してくれるソーでーすw
803デフォルトの名無しさん:2011/12/11(日) 16:07:16.21
動的型付け言語なんかハードウェアの進歩におんぶにだっこじゃん
804デフォルトの名無しさん:2011/12/11(日) 16:08:11.88
静的型付け言語なんてハードウェアがやっている事と大差ないじゃんw
805デフォルトの名無しさん:2011/12/11(日) 16:08:43.16
え?
806デフォルトの名無しさん:2011/12/11(日) 16:09:11.12
静的型はアセンブリ言語の臭いがするw
807デフォルトの名無しさん:2011/12/11(日) 16:09:35.97
ここにいる時点でおまえらどうせ学生だろ。
808デフォルトの名無しさん:2011/12/11(日) 16:09:40.24
え?
809デフォルトの名無しさん:2011/12/11(日) 16:12:30.98
ここまでの結論:

静的ドカタは動的型付け言語を静的型付け言語のように使おうとして
上手くいかないのを動的型付けのせいにする。

静的ドカタはプログラミングの仕事を全てドカタ仕事だと思っている。

静的ドカタは動的型付け言語から発展した技術を静的型付けの利点だと勘違いしている。
810デフォルトの名無しさん:2011/12/11(日) 16:14:23.31
>>803-804
一般には逆だろ
811デフォルトの名無しさん:2011/12/11(日) 16:17:24.50
結論

>>809のようなことにしたいのが
動的ドカタです。
812デフォルトの名無しさん:2011/12/11(日) 16:19:10.78
学生もそのうち現実を見るだろ。
職業の種別なんてどうでも良くなる。
813デフォルトの名無しさん:2011/12/11(日) 16:21:45.72
型システムの序列:

最低レベル: assemblyやCの弱い静的型付け
ドカタ級: Javaなどの強いが抽象能力の低い静的型付け
懐古趣味級: 伝統的LISPやSmalltalk-80のナイーブな動的型付け
オナニー級: MLやHaskellの強く抽象能力の高い静的型付け

という順番だな。
これから実用になっていくのはJITや型推論を併用した動的型付け。
814デフォルトの名無しさん:2011/12/11(日) 16:22:45.34
結論

>>813のようなことにしたいのが
動的ドカタです。
815デフォルトの名無しさん:2011/12/11(日) 16:23:31.98
動的型付けでまともなリファクタリングブラウザが
でないことには未来はないだろう。

SmallTalk?あれは言語自体が終わっとるw
816デフォルトの名無しさん:2011/12/11(日) 16:27:03.27
>>815
リファクタリングの時点で静的型付けの機能が必要だと思うんだが。
817デフォルトの名無しさん:2011/12/11(日) 16:33:00.08
>>800
RTTIはJavaのReflectionなんかと違ってそういう使い道にはならないよ。
どっちかっていうと一部の処理の実装の為に仕方なく入ってるもの。
818デフォルトの名無しさん:2011/12/11(日) 17:01:44.87
動的型付け言語でも多くは動的型付けの利点は利用していない、利用していない場所はコンパイラー側から見れば判る。
a = 10;
func1(a);
a = "ABC";
func2(a);
オプティマイズをするコンパイラーならfunc1を抜けた時点で a は別の入れ物になる。どちらのaもint/stringで型は静的に決定する。
もっと深くても、例えば動的にフィールドやメソッドが追加されるようなオブジェクトでも、大抵は静的に決定しましまう事が多い。
型は大半コンパイラーには推論できてしまうんだ、僅かな例外が真の動的型付け的機能を必要としている。
819デフォルトの名無しさん:2011/12/11(日) 17:02:00.23
コンパイラーには判るのに、静的な型として書けないのは単に文法上の表現能力不足と考えられる。
だから、静的型付け言語でもそれを補えば動的型付け言語の様に使える、もちろん僅かな例外は書けなくなるが・・・
もし大半の問題が静的型付け言語でも解決できるのであれば、静的型付け言語特有の強力なコンパイル時チェック
リファクタリング、テストの自動生成等を捨てて動的型付け的機能の利点を得るより
それを捨てて静的型付の表現能力を向上してる動的型付に負けないような利便性を追加した方が良いのではないかと思う。
820デフォルトの名無しさん:2011/12/11(日) 18:03:17.37
>>815
リファクタリングを語るなら、Smalltalkを勉強しなきゃ
Smalltalkerでもあるファウラーに蹴られるぞ 笑
821デフォルトの名無しさん:2011/12/11(日) 18:15:28.32
いつも思うが、smalltalkを矮小化するOOPプログラマーって
自分につばをぶっ掛けてるようなものだってなんでわかってなんだろうね。
アホだよな。GoFにしてもリファクタリングのことにしても、背後でOOPの
技術に貢献してきた人々を供給してきた源なのにね。

ぶっかけはAVだけにしておけ。
822デフォルトの名無しさん:2011/12/11(日) 18:19:09.77
>>815
終わっている言語から Traits とか Classboxes とかパクってドヤ顔してないで
勢いがある言語ならもっと新機軸を打ち出してこいって話だ。
823デフォルトの名無しさん:2011/12/11(日) 18:52:01.05
動的型付けの良さを理解出来ない人に
Classboxesを良さを理解出来ると思う?
824デフォルトの名無しさん:2011/12/11(日) 19:15:04.72
動的型付にあって静的型付で今のところ上手く作り難い機能は、自然な思考順序によるオブジェクト指向かと思われる。
現在のオブジェクト指向の静的型付言語では、先にスーパークラス、或いはインターフェイスを作成しなければならない。
抽象的な思考を具体的な思考をする前に要求される訳で、これはどう考えても思考順序が逆順だ。
抽象化とは数多くの具体例から共通項目を抜き出して作られる筈なのに、具体項目が無いうちから抽象項目を作れば
当然、考慮していない問題、抜けは出てくるのである。
動的型付けではこれを上手くこなす事ができる、つまり作りながら考えるのに向いているとも言える。
逆に保守は難しくなる。
しかし・・・静的型付でも大きくなったライブラリに対して後から抽象化を行う事もできるのではないかと思う、文法の工夫次第で。
825デフォルトの名無しさん:2011/12/11(日) 19:18:34.95
プロトタイピングをしようとすると、静的型付は最終的に破綻しやすい
どうしても一度作って捨てて、もう一度作り直さないと綺麗にならない、無駄だよね。
動的型付はこれを部分的に解決するよ。
826デフォルトの名無しさん:2011/12/11(日) 19:24:31.10
クラスそのものを型に指定するのを止めてgoのinterfaceみたいに部分型っぽい感じの型付けを採用したら
その辺の面倒臭さは無くなりそうな気がする
827デフォルトの名無しさん:2011/12/11(日) 21:01:31.67
このスレ読んでリファクタリングに興味を持ちました。
Perl、PHP、Python、Rubyでできる
リファクタリングツールを教えて下さい。

自分で調べて見ましたが、クソなものしかありませんでした。
静的型付け言語に関しては優秀なリファクタリングツールを見つけたので不要です。
828デフォルトの名無しさん:2011/12/11(日) 21:31:49.20
>>827
ドカタでないのなら自分で作るのが当然
829デフォルトの名無しさん:2011/12/11(日) 21:53:49.70
>>828
素直に無いと言えよw
830デフォルトの名無しさん:2011/12/11(日) 22:41:29.38
皮肉を上乗せしてるだけだろ。
実行時に挙動が決まる物を静的に解析するとか無理だし。
831デフォルトの名無しさん:2011/12/11(日) 23:17:17.91
そうだよね。
だから無理やり動的型付け言語に、型判別(型推論)をつけようとすると
RPythonみたいに1つの変数に対して2つの異なる型を束縛することを許可しません。
ってなっちゃうわけだ。
832デフォルトの名無しさん:2011/12/12(月) 04:53:51.95
>>818はリテラルの代入でドヤ顔する初心者w
833495:2011/12/12(月) 05:32:57.16
>>819
>例えば動的にフィールドやメソッドが追加されるようなオブジェクトでも、
>大抵は静的に決定しましまう事が多い。
本当に静的に決定しちゃったらエラーが出ると思います。
834デフォルトの名無しさん:2011/12/12(月) 06:58:48.35
>>831
> 1つの変数に対して2つの異なる型を束縛することを許可しません。

MLでは変数の再束縛出来るけど、大抵の静的型付け言語じゃこんなこと出来ないだろ?
お前の大好きなJavaでも出来ないじゃん。
835デフォルトの名無しさん:2011/12/12(月) 07:20:45.95
「●●について常に変わらない物」これを知る事が重要。
特に、「プログラム実行中について常に変わらない物」
こういった変わらないものの内「型」と言う情報はかなり圏論などを使ってシンプルに考察する事ができる。

文法でその変わらない「型」を明言してしまうのが静的型
しかし、実行中にはプログラム中で明言しなくても変化しない物もある。

明言しなくても変化しない物について、それを調査にあたって高速なアルゴリズムが存在するなら
それを使って変化しない物を抽出する事ができるだろう。
836デフォルトの名無しさん:2011/12/12(月) 07:21:04.63
変化しない物の情報は、色々な役に立つだろう
それをヒントにしてインテリセンスの候補を限定する事により、コーディング作業の効率化ができるだろう。
関数の引数について範囲外の引数が来た時にコンパイル時エラーにしてしまえるかもしれない。
コンパイル時エラーに出来るのであれば、そんなテスト項目は無用の長物である、
自動テスト生成では生成項目からその手の項目は除外できるに違いない、テスト製作は大変な作業だ、効率化するだろう。
リファクターツールを作るのであれば、場合によっては何処を書き換えても動作の同一性が保障されるか確定できる所まで特定できるかもしれない。

変わらない物を探す強力なアルゴリズムが多くできれば、文法や型システムはもっと自由になれるに違いないと思う。
837デフォルトの名無しさん:2011/12/12(月) 07:30:06.37
C言語というものにlintというツールが有ったらしい、今はコンパイラの一部になっているらしいが
かつては時間が掛るが詳細なチェックを行う物だったという話。
高速でなくても詳細調査を考える価値はあるかもしれない。
838デフォルトの名無しさん:2011/12/12(月) 07:33:27.45
>>834
どういうこと?

これはもちろん Java でもエラーにならない
int x = 1;
double x = 2.3;
System.out.println(x);

君の言っている再束縛ってどういう意味?もし
let x = 1 in
let x = 2.3 in
x
ということを言っているなら、これは上の Java と同じ。
次の lambda 式と同じで、二つの x は互いに無関係。
(lambda x -> (lambda x -> x) 2.3) 1

Java ではこれは書けないけど
int x = 1;
x = 2.3;

これと同様なことは x を mutable にして破壊的代入を行うということで、
ML でも無理だと思うのだけど。
動的型付け言語は変数に静的型を付けないので、もちろん普通にできる。
839デフォルトの名無しさん:2011/12/12(月) 07:38:20.03
と思ったらエラーになった
840デフォルトの名無しさん:2011/12/12(月) 07:51:06.69
>>838
> int x = 1;
> double x = 2.3;

これはねーよw
もう自分で突っ込んでるから良いけど
841デフォルトの名無しさん:2011/12/12(月) 08:20:57.68
複数の型の混在をRPythonが制限してるのに
クレームが入るってことは、
静的型ドカタも実は混合型を使いたいってことか
842デフォルトの名無しさん:2011/12/12(月) 08:45:58.84
リファクタリングツールは結局?
843デフォルトの名無しさん:2011/12/12(月) 09:01:54.33
トレードオフが何処にあるか分からない痴呆頭にゃ欲しい物が何かなど判らない
844デフォルトの名無しさん:2011/12/12(月) 09:48:31.60
>>835-836
仮定しか言ってないし、煙にまいてるだけ。
圏で表現できるならしろよ。
お前みたいのばっかだから圏論が数学屋に馬鹿にされんだよ。
845デフォルトの名無しさん:2011/12/12(月) 10:23:55.65
ところでC言語って静的な人にとってはどういう存在?
846デフォルトの名無しさん:2011/12/12(月) 11:05:24.49
型の機能を増やそうってのは構わんが、
値依存型なんてのは駄目だな。
構文的な記述可能性と形式的な証明可能性がミスマッチ。
証明可能なことが事前に判っているトイプログラムならいいが、
未知な問題に対しては現実的ではないね。
847デフォルトの名無しさん:2011/12/12(月) 11:21:38.59
コンパイラの実装とかには良いんじゃないかね > 依存型
848デフォルトの名無しさん:2011/12/12(月) 11:22:07.92
>>835-836
変わらないモノが多ければいいというのはイデオロギーだな。
決して普遍的な価値観ではないし、ましてやプログラミングの本質でもない。
少しでも多くのモノを変えられるようにしようというイデオロギーもある。
どちらもその文脈でのみ正しく、どちらも普遍的ではない。
849デフォルトの名無しさん:2011/12/12(月) 12:48:26.48
>>848
変わらない物が多い事が重要な事では無いんだ、変わらないというのは色々な対称性の軸の存在を意味している。
変わる物でも視点を変えると変わらなくなってしまう物もある、それを探し出す事が重要なんだ。
現実に変わる物が多いのなら、それはそのまま受け入れるべき。
これは・・・ちょっと難しいかもしれない

これが全てではないんだが対称軸を見つけると、そこから色々なツール群のアイディアが次々に出現するケースが多い。
850デフォルトの名無しさん:2011/12/12(月) 13:06:37.99
>>846
何かの目標を持ってプログラムしている人の作業手順とかい離して
枝葉末節だけに注目して・・・ここまでならいんだがその後タコ壺になると
理論はおもちゃ化するんだよ、きっと。

上で書いたが、今のオブジェクト指向のプログラムの順序は不自然にも最初に抽象度の高い所から書かなければならない
しかし、抽象度の高い物は沢山の具体例から共通点を抜き出して作られる筈。
それと証明可能性とか厳密とか、バグが出にくいとか、ましてや馬鹿よけなんてものは無関係だよね。
そこに注目して周りが見えなくなると、どんなに完ぺきな物でも役に立たない何かになるのだと思われる。
手段の目的化した末の末路の一種だね。
851デフォルトの名無しさん:2011/12/12(月) 18:43:20.08
>>850
> >>846
> 上で書いたが、今のオブジェクト指向のプログラムの順序は不自然にも最初に抽象度の高い所から書かなければならない

但し静的型付けに限る。

> しかし、抽象度の高い物は沢山の具体例から共通点を抜き出して作られる筈。

動的型付けオブジェクト指向なら、具体的な実装から始めて、後から抽象的なクラスを得ることが
とても自然に出来る。
852デフォルトの名無しさん:2011/12/12(月) 22:29:20.65
>>851
具体例で示して

出来るというだけじゃ誰も納得できるわけ無いんだから。
853デフォルトの名無しさん:2011/12/12(月) 22:41:13.16
具体例か。

たとえば、Javaだと適当に具体的なクラスを作って
リファクタリングブラウザで、簡単にインターフェースを抽出できるってところかな。
クラス(インターフェース)間のメソッドの移動が簡単にできるから
あとから抽象的なクラスを作りやすい。

あとから変更しても正しく抽象化できてないとコンパイルエラーになるから
最初に具体的な実装で書いておいて変更しやすい。

これぐらいかな。
854853:2011/12/12(月) 22:43:13.03
あ、ごめん。動的型付け言語なら自然にできるという話か。
逆を書いていた。

書いたとおり逆に動的型付け言語の方が変更しにくいと思う。
テストがあるから間違いがあるのが分かるとはいえ、
間違いがあることが分かるだけで、具体的な箇所はわからないし、
その後の修正はどっちみち人間が手作業でやること。
855デフォルトの名無しさん:2011/12/12(月) 23:56:53.43
856デフォルトの名無しさん:2011/12/13(火) 04:42:54.31
動的型付けのSmalltalkの場合、
>>853に書いてあることも当然できる上に、
抽象クラスの定義、スーパークラス変更、メソッドの移動を
実行時に行うことすらできるね。

もちろん生成済みのオブジェクトのクラスも
実行時リファクタリングに応じて変更できるよ。

静的型付け言語に、こういうことはできるのかな?
857デフォルトの名無しさん:2011/12/13(火) 06:12:30.54
動的型の言語って856のようなことをした場合影響のでる範囲をどの程度レキシカルに
特定できるの?
858デフォルトの名無しさん:2011/12/13(火) 06:25:11.42
>>857
どんな種類の影響?
859デフォルトの名無しさん:2011/12/13(火) 06:58:02.56
>>856
変数宣言の抜けや重複は普通に判る。
応答可能なメソッドの増減も普通に判る。
isKindOf:等を介した問い合わせの影響も、
どのクラスとのisKindOf:関係が変化したか普通に判る。

まあJava辺りの静的型検査で判る程度のことは大概、事前にチェック可能だよ。
860デフォルトの名無しさん:2011/12/13(火) 06:59:52.83
アンカーミスった。>>859>>857宛て。
861デフォルトの名無しさん:2011/12/13(火) 08:05:32.53
>>856
実行時リファクタリングって意味不明なんだが。

Smalltalkでできるというのはいいとして、
それはRubyやPHPなどの他のよく使われてる
動的型付け言語でできるのか?
862デフォルトの名無しさん:2011/12/13(火) 08:11:02.32
というか何でSmalltalkだと出来るの?
863デフォルトの名無しさん:2011/12/13(火) 08:17:10.78
動的型付け言語だから、実行時にならないと型がわからない。
型がわからないとリファクタリングができない。
だから実行時にならないとリファクタリングできない。

そしてリファクタリングってことだから、
動的にオブジェクトを変更するのは別の話、
つまり一旦停止してから、再開したらリファクタリング前に戻ったりはしない。

ということは、実行時にソースコードを書き換えて
それがすぐに反映するってことなのだろう。
それが本当かどうかは知らないけど、少なくともsmalltalk限定の話だよね。
864デフォルトの名無しさん:2011/12/13(火) 08:19:27.30
実行時にならないとリファクタリング
できないのは欠点だよな

実行時リファクタリングの欠点として、
実行されてない箇所のリファクタリングは
同時に行えないって所。

現在実行されているコードまわりはリファクタリングできても
システム全体としてみれば、正しくリファクタリングが行えてない。
865デフォルトの名無しさん:2011/12/13(火) 09:13:10.53
>>861
じゃあよく出てくるJavaの話はすべての静的言語で出来るのか?
ってことでしょ

正直、どちらの人も純粋に言語本体のみで論じて欲しいと思うなあ
IDEの話ってなるともう言語の話かどうか怪しくなる
866デフォルトの名無しさん:2011/12/13(火) 09:36:46.68
>>853
そもそも動的型ではインターフェースの抽出とか要らないから
変更すら必要無い
867デフォルトの名無しさん:2011/12/13(火) 12:09:27.83
>>865
言語仕様の話が分からないコードも書けない自称アーキテクト(w
が唯一話題に入れるのがIDEなわけよ

それ禁じたら話に入れなくて可哀想だろ
868デフォルトの名無しさん:2011/12/13(火) 13:50:57.46
言語仕様如何でリファクタリング等をどの程度まで機械的に支援できるのかも
変わってくると思うのだが。
869デフォルトの名無しさん:2011/12/13(火) 16:06:09.64
>>864
Smalltalkの実行時というのは、ソースの編集時、コンパイル時まで含んでいるのだが?

つうか開発環境自体が実行環境の上に乗っかってる。
870デフォルトの名無しさん:2011/12/13(火) 16:08:05.11
>>863
eval出来る言語なら大抵なんとかなるだろ。
871デフォルトの名無しさん:2011/12/13(火) 16:10:37.43
で、Javaは実行時リファクタリングできるの?できないの?
実行時リファクタリングしたら既存のインスタンスは変化するの?しないの?
872デフォルトの名無しさん:2011/12/13(火) 17:44:22.03
関数/メソッドの抽出、メソッドの移動、抽象クラスの定義生成辺りは
型付けの静的動的関係ないでしょ
実行時リファクタリングは動的型のほうが有利かもね
873デフォルトの名無しさん:2011/12/13(火) 18:29:28.94
>>872
そう。本質的にはリファクタリングに動的型付けか静的型付けかは関係ないよね。
静的厨は動的型付け言語はリファクタリングできないとか定期的にウソ流してるけど。
874デフォルトの名無しさん:2011/12/13(火) 20:49:34.20
>>871
実行前にリファクタリング出来るんだから、
わざわざ実行する必要ないんじゃね?
875デフォルトの名無しさん:2011/12/13(火) 20:54:54.12
例えばプロファイリング結果に応じて動的に構成を変化させる場合は?
あるいは実行中に複数のライブラリをロードする時に受け口を変化させる場合は?

実行時にリファクタリングできない言語を使っているから
そういう状況を想像できないんじゃないの?
876デフォルトの名無しさん:2011/12/13(火) 21:07:24.82
>>872
関数/メソッドの展開とか引数の順番の変更とか
メソッド名の変更(サブクラスのメソッドも一緒に変わる)とかは
定義とともに、使用しているコードも変更しなきゃいけないから
こういったものは型情報が必要だよね。
同名で別メソッド名がある場合は変更していいのかわからない。
877デフォルトの名無しさん:2011/12/13(火) 21:08:25.86
>>875
デザインパターン勉強すれば
そういう時にどういうコードを書けばいいか分かるよ。
878デフォルトの名無しさん:2011/12/13(火) 21:09:20.62
>>875
リファクタリングってソースコードを修正する話だろ?

プロファイリング結果に応じて動的にソースコードを修正したりすんの?
879デフォルトの名無しさん:2011/12/13(火) 21:14:52.44
動的型付け言語でリファクタリングブラウザと言ったら
Smalltalkの話題しか出ないことから
実際に仕事でやってる人はいないってことかな?
880デフォルトの名無しさん:2011/12/13(火) 22:11:42.07
2chで世の中が判ったつもりになり始めたら重症だな。
881デフォルトの名無しさん:2011/12/14(水) 06:57:19.49
>>878
え、しないの?
882デフォルトの名無しさん:2011/12/14(水) 06:59:22.01
>>877
御心配無用。とっくにRalf Johnsonから習ったから。
それにしても、コンパイル前のリファクタリングだけで満足してるなんて、
リファクタリングを理解してないとしか思えんのだがw
883デフォルトの名無しさん:2011/12/14(水) 07:26:06.18
>>876
動的型では、同じ名前のメソッドは同じ意味を持つように設計する。
静的型しか知らない人にも分かるように言うと、同じメソッドを持ってれば
同じインターフェースを継承してるかのように設計する(duck typingってそういうものだしね)。
何故かというと、そうすることで可読性が上がるだけじゃなく
多態を最大限に活かした柔軟性と拡張性の高いコードになるから。

これがどういう意味かというと、classA#fooとclassB#fooが在ったときに
classA#foo というメソッド名だけ変更したいことなんて殆ど無いってこと。
上記の理由により、まともな設計者がいるならそんな事態にはならないから。
少なくとも実行時リファクタリングよりは需要の無い機能だよ。

まあ、それでもあえて補足しておくと、Python tools for Visual Studio(まだbeta版)
にはそういったclassA#fooだけを名称変更するリファクタリング機能があるよ。
型推論してるらしい。
884デフォルトの名無しさん:2011/12/14(水) 07:47:21.97
静的型の場合、どうしても
「現在あるコードベースの中でこのメソッドを実際に叩いている箇所」
を探そうとするんだよね。これが静的型OO脳の恐怖。

動的型の場合、あらゆる種類のメッセージ送信に備える習慣がついているから
メソッド名についての語彙の凝集が前提になる。
「俺が見たことも聞いたこともないコードからもこのメソッドが使われるかもしれない」
「将来書かれるかもしれないコードからもこのメソッドが使われるかもしれない」
ということを考慮する習慣がつく。これがメッセージングOOの考え方。

一旦メッセージングOOに習熟すると、静的型OOは手続き型言語に見える。
それぐらい抽象度が違う。
885デフォルトの名無しさん:2011/12/14(水) 08:06:55.04
技術やってる人間が、あらゆるとか平気で使うのは解せない。文系乙。
886デフォルトの名無しさん:2011/12/14(水) 08:12:42.11
俺は数学やってたけど、普通に \forall を使ってたわw
887デフォルトの名無しさん:2011/12/14(水) 08:14:40.39
逆に言うとそういうconventionを共有出来ないと使い物にならないという事だな。
やはり性善説だな。
888デフォルトの名無しさん:2011/12/14(水) 08:17:16.11
つまり静的型では、そういうconventionなしに
単に型だけで整合性を取ろうとするんだね。

怖すぎて使う気になれねえw
889デフォルトの名無しさん:2011/12/14(水) 08:20:11.33
静的特性だけを機械的にチェックして安全性とみなすのか、
動的特性を社会的に摺りあわせて整合性を高めるのか、
それだけの違いでしょ?

性善説とか性悪説とか、視点がアサッテすぎ。
890デフォルトの名無しさん:2011/12/14(水) 08:29:09.08
>つまり静的型では、そういうconventionなしに
>単に型だけで整合性を取ろうとするんだね。

まぁ、こんな事をさらりと「つまり」と書ける程度には荒っぽいと。
891デフォルトの名無しさん:2011/12/14(水) 08:31:52.90
>>890
静的型も動的型もconventionなしに成立しないでしょ、
という文意すら読み取れない程度に
静的ドカタは認知能力が低いと。恐ろしいね、静的脳。
892デフォルトの名無しさん:2011/12/14(水) 10:51:58.30
>>888だけを読んで、その文意は汲み取れねぇな。電波は他人に感知してもらえないぞ。
893デフォルトの名無しさん:2011/12/14(水) 11:43:24.43
>>892
当たり前だろ、>>887>>888からの論理的帰結なんだから
>>888だけ読んでも分からんだろw

静的脳って文脈が読めなくなるんだね。こわっ!
894デフォルトの名無しさん:2011/12/14(水) 13:06:41.10
>>893
自然言語にも型が必要なんだろう
895デフォルトの名無しさん:2011/12/14(水) 13:42:49.00
説明の仕方にモンキーパッチが絶えない辺りがいかにも動的型だな
896デフォルトの名無しさん:2011/12/14(水) 13:49:09.76
そりゃ論文とかなら提出後にパッチ充てるワケにもいかんのだろうが
ここは2chだからねえ
897デフォルトの名無しさん:2011/12/14(水) 19:53:23.24
パッチ?
>>888>>887を受けての発言だということも理解できないほど
静的型ドカタは低能なの?
898デフォルトの名無しさん:2011/12/14(水) 20:49:26.03
在日の戦略にひっかかり、全ての間違いが始まった2009年 夏
        |:::::::::::::;;;ノ  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
        |::::::::::( 」 < 民主になればこの世はバラ色、政権交代!
        ノノノ ヽ_l   \______________
       ,,-┴―┴- 、    ∩_
     /,|┌-[]─┐| \  (  ノ
      / ヽ| | 在 反 | '、/\ / /     
     / `./| | 日 日  |  |\   /
     \ ヽ| lゝ    |  |  \__/
     \ |  ̄ ̄ ̄   |
      |   ┬    |それでも懲りない日本人、韓国民団総理支持率35%w早く目を醒まそう!
899デフォルトの名無しさん:2011/12/14(水) 21:00:32.31
実行時リファクタリングってそれモンキーパッチだろ…。
リファクタってソースコードの保守の話だぞ…。
900デフォルトの名無しさん:2011/12/14(水) 23:30:38.64
>>883
> 動的型では、同じ名前のメソッドは同じ意味を持つように設計する。

つまり、getとかcountとかいうメソッドは作らないで、
たとえばCustomerというクラスなら

customer.get_customer() というメソッドにするということ?
901デフォルトの名無しさん:2011/12/14(水) 23:33:07.96
メソッドだけじゃなくてクラス名も被る可能性があるからな。

動的型付け言語でもは

MyNamespace_Customer.get_customer()

こんな感じに名前が被らないようにする。




らしいwww
902デフォルトの名無しさん:2011/12/14(水) 23:34:00.16
ちょwww
903デフォルトの名無しさん:2011/12/14(水) 23:35:45.38
149 名前:金持ち名無しさん、貧乏名無しさん :2011/12/14(水) 23:08:43.14
ここ30年で、
113社だった公益法人が25000社ってどういう事?

150 名前:金持ち名無しさん、貧乏名無しさん :2011/12/14(水) 23:17:28.25
公益法人をwikiで調べると、バブルで急増してからほとんど減ってない
wwwワロタwww
904デフォルトの名無しさん:2011/12/14(水) 23:50:29.23
>>900 >>901
いやいや、Customerならまだましかも知れないけど、

Pointとかだったらかぶるかもしれないじゃないか?
(実際に被ったw)

Graphic3D_Point.get_point_graphic3d();

ここまでやらないとだめだろう。
905デフォルトの名無しさん:2011/12/14(水) 23:54:19.91
2Dを継承して3Dだから名前は同じでいいだろうという反論がきそうだから
後付で補足する。

ポイント還元の”ポイント”クラスとかぶったんだ。ということにする。
継承関係全くないけど、get_point() で同じ。これはまずいだろう。
906デフォルトの名無しさん:2011/12/14(水) 23:54:35.10
動的型付け言語ってソースの量が減るかわりに
ドキュメントの量を増やす必要がありそうな気がするんだけどどうなんでしょ
907デフォルトの名無しさん:2011/12/15(木) 02:58:44.66
その、getterメソッド名をget_クラス名とする奇妙な風習は
どこかの静的型付けエセOO言語のconventionなのかね?
908デフォルトの名無しさん:2011/12/15(木) 03:13:25.56
>>899
モンキーパッチ:元のコードを変更せずに振舞いを変更する
リファクタリング:元の振舞いを変更せずにコードを変更する

リファクタリングとモンキーパッチは目的も内容も違いすぎるんだけど、
どうして実行時リファクタリングがモンキーパッチだと思ったの?
909デフォルトの名無しさん:2011/12/15(木) 03:26:18.31
>>901>>904
メソッド名が長くなる事をdisってるつもりなの?
JavaやC#なんてメソッド名もクラス名も馬鹿みたいに長いじゃん
これって静的型付けOOPのconventionだよね(語彙の凝集を碌にやらない)

InternalFrameInternalFrameTitlePaneInternalFrameTitlePaneMaximizeButtonWindowNotFocusedState # クラス名
supportsDataDefinitionAndDataManipulationTransactions # メソッド名

ちなみに、これは君等が勝手に作った例と違って実例だから
910デフォルトの名無しさん:2011/12/15(木) 03:48:17.21
>>907
アクセサにget_xxxなんて付けるのはJavaくらいのもんだろ
静的型付けでもプロパティのある言語なら必要無いしな
ドカタのお里が知れるってもんよ
911デフォルトの名無しさん:2011/12/15(木) 04:13:31.94
しかもget_xxxのxxxに属性名ではなくてクラス名を使うという
なんとも奇妙奇天烈なconvention
912デフォルトの名無しさん:2011/12/15(木) 04:54:58.16
>>900,>>901,>>904 は get_クラス名 に疑問を抱かないの?
本当にそんな慣習がどこかにあるの?
それとも全部同じ人の書き込み?(文体の類似性からみて)
913デフォルトの名無しさん:2011/12/15(木) 08:04:40.46
>>900
そんなメソッド名、動的型付け言語で見た事ねーなー

あ、もしかしてJavaの話?
Integer.getInteger
Boolean.getBoolean
914デフォルトの名無しさん:2011/12/15(木) 08:05:53.20
詳しそうなんで聞きたいんだが、語彙の凝集を行なった結果の好事例なんか挙げてもらえると嬉しい。
あと、違う人かも知れんが実行時リファクタリングって具体的にどういうもの?
プロファイリング取るだろって意見もあるけど、何のプロファイリング?
915デフォルトの名無しさん:2011/12/15(木) 08:07:49.65
>>908
そんな用語聞いたこと無いから。
で、それに利点はあるの? つかどうやるわけ? まさか静的解析でもするの?
916デフォルトの名無しさん:2011/12/15(木) 08:12:49.73
プログラム実行中にソースコード変更したら
そのまま実行中のプログラムに反映されるって編集形態の
リファクタリング版ってだけでしょ > 実行時リファクタリング

デバッガでステップ実行しながら、変数の中身とかを確認しつつ
ソースコードを書き換えたりするでしょ?(出来なきゃ出来ないで困らないけどね)
感覚的にはREPLに近いかもしれない

別に動的型の専売特許じゃないけど、動的型の方が実装し易い
http://www.microsoft.com/japan/msdn/vs_previous/visualc/techmat/feature/vced_cont/
917デフォルトの名無しさん:2011/12/15(木) 08:22:41.47
とりあえずruntime refactoring なんて単語無い。

918デフォルトの名無しさん:2011/12/15(木) 08:35:57.98
リファクタリングが生まれたSmalltalkではruntimeでやるのが当たり前なんだから、
そんな言葉が生まれるはず無いだろ

むしろJava等に広まるときにstatic refactoringって言葉が出来るべきだった
919914:2011/12/15(木) 08:40:33.74
>>916
Thx.なんだそういうことか。
>>918
いや、というか>>917はこのスレで用語作るなと言っているんでしょ。
920デフォルトの名無しさん:2011/12/15(木) 08:57:54.03
Javaもクラスローダの置き換えで実行中のプログラムのクラスを書き換える事は可能
でも既存のインスタンスはそのまま
>>871は分かってて訊いてると思われる
921デフォルトの名無しさん:2011/12/15(木) 09:11:57.09
ソース変更の時点で実行より上位の話だから実行時も糞もない。
922デフォルトの名無しさん:2011/12/15(木) 09:40:22.59
923デフォルトの名無しさん:2011/12/15(木) 10:06:12.42
>>921 判りやすい静的脳、乙!
924デフォルトの名無しさん:2011/12/15(木) 11:18:30.40
リファクタリングするのに1回実行させなきゃいけないん?
925デフォルトの名無しさん:2011/12/15(木) 11:45:34.16
実行時にもリファクタリングが可能だって話なのに
どうして実行しなければリファクタリングできないなんて
馬鹿げた解釈になるのだろうか?
926デフォルトの名無しさん:2011/12/15(木) 15:05:22.04
>>923
リファクタに動的静的も無いって言ってるんだけど。
こうやってすぐ思考停止して静的厨だのドカタだの…。
まあその程度のスレなんだろうけど。
927デフォルトの名無しさん:2011/12/15(木) 16:58:23.21
>>926
その発想からして、
静的なプログラミングの価値観から動的型付けを見ているのが
丸出しだっていってんの。

ソース変更が実行よりも上位にあるというのは静的なプログラミングの価値観。
動的なプログラミングではソース変更も実行も同じメカニズムだ。

リファクタリングに動的静的もないというのも静的なプログラミングの価値観。
なぜなら静的型付けよりも動的型付けのほうが
実行時でのリファクタリングでの柔軟性や追従性がはるかに高い。
928デフォルトの名無しさん:2011/12/15(木) 17:06:10.58
それがどうかしましたか?
929デフォルトの名無しさん:2011/12/15(木) 17:21:18.90
実行時リファクタリングの利点ってなんなの
すでに運用してるサービスを止めずに動かしたままリファクタリングとかしちゃうん?
930デフォルトの名無しさん:2011/12/15(木) 17:29:10.50
>>927
静的言語しか使ってないうちは動的言語を理解できないが、
動的言語を使いこなしてくると静的言語のメリット・デメリットが判る。

このスレ主の言う「大規模」「効率」の意味が一向に提示されないから推測になるが、
コンピュータ資源を節約したい&処理手順が明確な用途には確かに静的言語で充分な事が多い。
そして、世の中の仕事の殆どは上の条件に当てはまる訳だから、大規模開発≒静的言語、
というのもあながち間違いではない。

資源については、今でも組み込みとか特殊環境ではリッチに出来なかったりするから、
静的言語の需要はあるな。

尤も、近年の静的言語は、動的言語で使われてきた機構を取り入れ始めているから、境界は曖昧になってきてるが。
931デフォルトの名無しさん:2011/12/15(木) 17:32:11.69
>>929
Java屋にもホットデプロイの便利さは浸透してると思ってたけど
そうでもないのか。
932デフォルトの名無しさん:2011/12/15(木) 17:37:27.74
ああ、ホットデプロイか
あまりにこれスゲーよ感をだしてるからもっとなんかあるのかとおもたサンクス
933デフォルトの名無しさん:2011/12/15(木) 18:21:48.55
>>927
サイクルが短いからそう感じるだけであって、
どう足掻いても単なる動的書き換えだよ。
934デフォルトの名無しさん:2011/12/15(木) 19:12:30.48
動的リファクタリングの一部応用がJavaのホットデプロイであって、ホットデプロイが全てじゃないけどな。
935デフォルトの名無しさん:2011/12/15(木) 19:39:38.44
むしろ、名前なんてあったことに今日初めて気付いた
936デフォルトの名無しさん:2011/12/15(木) 20:24:11.54
動的リファクタリングもできるのか、
動的リファクタリングしかできないのか、
この2つでずいぶんと意味が違うわけだが。
937デフォルトの名無しさん:2011/12/15(木) 20:27:05.59
動的リファクタリングしかできない場合の欠点は、
実行中(ブレークポイントで止まった所)のコードはリファクタリング出来る。
その定義もリファクタリング出来る。

しかし、その定義を利用するが実行中ではない箇所の
コードはリファクタリングできないのだ。

やっぱり静的リファクタリングもできなきゃだめだよね。
その上で動的リファクタリング出来れば(ホットデプロイ?)最強。
938デフォルトの名無しさん:2011/12/15(木) 20:27:28.35
そうやっていつまでたっても抽象的な話しかしてないじゃん。
そして勝手に用語を作るなって。
939デフォルトの名無しさん:2011/12/15(木) 20:28:21.40
>>496
元気でもねえよwwwついこの前まで、岐阜県の御嵩町に住んでるdagasikasi_krwことヤマグチって名前な在日の 背後関係調査してたからよおwww今度おまいらにも気が向いたら教えるわwww
それと、在日のdagasikasi_krw君ことヤマグチ君w

民主党と社会党と共産党と、九条の会、NPO法人にカトリック系教会、韓国系キリスト教組織に韓国が絡んだ、北朝鮮支援送金ルートの解明の端緒になってくれてありがとうwwwマジ感謝すんよwww
dagasikasi_krwことマサ君さww花王の不買運動関係で反日工作してたでしょwww不買運動止めさせるためにwww


なあ、ヤマグチ君よwところで、こんなの拾ったけど
http://proxy.f1.ymdb.yahoofs.jp/users/7d6d4463/bc/92b8/__hr_/868a.jpg?BCGpnJPBqRNo2bVN
940デフォルトの名無しさん:2011/12/15(木) 20:30:11.08
>>938

動的リファクタリングのこと?
実行時リファクタリングがなら勝手な用語じゃない?
>>856が言い出した言葉だけど。
941デフォルトの名無しさん:2011/12/15(木) 20:37:00.62
>>937
> しかし、その定義を利用するが実行中ではない箇所の
> コードはリファクタリングできないのだ。

それって動的に修正しているだけで、
リファクタリングっていわないんじゃないの?

リファクタリングは動作を変えないことが原則でしょ。
動作が変わるならそれはただの修正。

動的に修正できるのは出来るでいいと思うけどね。
ホットデプロイ便利だし。
だけどそれをリファクタリングと言ってはいけない。
942デフォルトの名無しさん:2011/12/15(木) 20:46:14.31
>>940
動的リファクタリングって用語はあるのね。
無知でした。すまん。
943デフォルトの名無しさん:2011/12/15(木) 20:55:16.74
>>941
一度コードが通らないと(評価されないと)、
関連があるかどうかも不定ってことじゃないの。
944デフォルトの名無しさん:2011/12/15(木) 21:00:09.10
動的リファクタリングってただ動的にコード修正可能だからリファクタリングも動的に可能ってことか?
それとも静的にもリファクタリング可能だけど動的だと実行時の情報を得て静的じゃ不可能な何かすごいリファクタリングができるの?
945デフォルトの名無しさん:2011/12/15(木) 21:09:46.50
>>943
いや、動的型付け言語だと、変数に全く関係ない値が入ることがあるから
一度通ってもそれだけで型が決まるわけじゃないんだよ。

ダックタイピングできることが仇となって
コレとアレは同じ名前のメソッドを持っていますね。
コレのメソッド名を変えたらアレのメソッド名も変えますが
ほんとうにそれは正しいのって状態になる。
946デフォルトの名無しさん:2011/12/15(木) 21:12:33.74
>>944
実行時の情報を得てというが、その時得られた情報が全てかどうかはわからないから
不確かな情報を元に、リファクタリングをすることになるんだよ。

たとえば実行時にそこの変数にあるクラスが入っていたら、そのクラスと関係があることはわかるが
別のクラスと関係があるかどうかはわからない。

情報が0よりかはマシだけど、動的型付け言語では完全な情報が得られないので
不完全なリファクタリングしかできない。
947デフォルトの名無しさん:2011/12/15(木) 21:22:13.60
いやいや、特定のクラスのメソッド名だけを変更するのは型推論が必要でしょ
引数の順番の変更についても同様
実行して得られる情報だけで変更するにはリスクがありすぎるよ
どんだけ分岐を網羅してるかも分からないのに

それ以外の、メソッドの移動とかメソッド抽出とかクラス定義とか
そういうのは変数の型が分からなくても可能だから動的型言語でも静的に可能
(ていうかこの話って既出だよね)

だから>>944でいうところの前者なんじゃないの?
実行時の情報を把握しながらリファクタリングできますよって話でしょ
948947:2011/12/15(木) 21:26:39.69
ああ、上で言ってるのは人間が実行時情報を把握しながらって意味ね
949デフォルトの名無しさん:2011/12/15(木) 21:30:11.05
>>945
俺もそういう考えだよ。
>>941があさっての方向の話をしはじめてたからさ。
950デフォルトの名無しさん:2011/12/15(木) 21:30:55.32
人間は間違いを犯す生き物。

コンピュータが判断できるようなことを
人間がやるなんてコンピュータを使っている意味が無い。
951デフォルトの名無しさん:2011/12/15(木) 21:39:06.58
>>950
どのコード片をメソッドとして抽出するかを判断するのは人間
抽出すると決めた後はコンピュータ任せにできる

その判断の材料としての実行時情報
952デフォルトの名無しさん:2011/12/15(木) 21:42:46.73
>>951
相当に自信過剰な奴でもないと実行できないだろそれ
953デフォルトの名無しさん:2011/12/15(木) 21:44:15.74
>>951
じゃあ逆にメソッドの展開はどう?
954デフォルトの名無しさん:2011/12/15(木) 21:46:00.25
そうなんだよね。
抽出は出来るんだよ。そこだけ見ればいいから。
だけど展開はできないんだよ。
そのメソッドを使っている所が他にもあり得るから。
955デフォルトの名無しさん:2011/12/15(木) 21:47:24.06
名前の変更と抽出/展開を実行してる動画

http://www.softdevtube.com/2011/09/07/refactoring-with-python-tools-for-visual-studio/
956デフォルトの名無しさん:2011/12/15(木) 21:50:38.32
>>955
静的解析じゃん…。
957デフォルトの名無しさん:2011/12/15(木) 21:50:56.05
どこをどう勘違いすれば、
動的型付けでは通常の静的リファクタリングができない
なんてアフォなことを言い出せるのだろうか。

静的脳って怖いね。
958デフォルトの名無しさん:2011/12/15(木) 21:52:18.63
あ、動画内では展開してなかった。すまん
959デフォルトの名無しさん:2011/12/15(木) 21:54:48.41
>>957
この流れでも理解できてないとは…。
960デフォルトの名無しさん:2011/12/15(木) 21:55:33.99
>>955
名前の変更は、人間が変更する箇所を選んでいるだけ。

extractの話はしているが、methodのinline(メソッドの展開)はできていない。
961デフォルトの名無しさん:2011/12/15(木) 21:55:44.33
>>956
動的型付けでも静的解析(型推論)したって良いじゃない
962デフォルトの名無しさん:2011/12/15(木) 21:56:50.11
展開はできたとしても人間が選んでやるしかできないだろ。

Javaの場合、メソッド名を選んで展開すると、
そのメソッドを使っている所すべてを自動的に展開してくれる。
もちろん間違いはしない。
963デフォルトの名無しさん:2011/12/15(木) 22:01:07.27
>>960
でも結構賢くて、こんなコードでも Foo.foo の名前を変更すると
Foo.foo と bar の中の x.foo だけ変わるんだぜ
(Bar.foo や baz の中身は選択肢に出てこない)

class Foo(object):
    def foo(self, x):
        return x + 1
class Bar(object):
    def foo(self, x):
        return x - 1
def bar(x):
    print(x.foo(0))
def baz(x):
    print(x.foo(1))
a = Foo()
bar(a)
b = Bar()
baz(b)
964デフォルトの名無しさん:2011/12/15(木) 22:02:33.68
>>963
完全に型推論ですねw
965デフォルトの名無しさん:2011/12/15(木) 22:02:42.24
>>963
あぁ、それは動的に変わらないところだから当然だね。
966デフォルトの名無しさん:2011/12/15(木) 22:10:13.82
evalが入った瞬間終わるな。
967デフォルトの名無しさん:2011/12/15(木) 22:11:49.36
もちろんevalは真っ先に試してみたわ
当然のごとくスルーされたw
968デフォルトの名無しさん:2011/12/15(木) 22:17:40.22
>>957
静的型付けを意識して書く(型推論可能にする)事はできるけどさ、
それって静的型付けの型システムの優位性を認めてる事と同義じゃないのさ。
969デフォルトの名無しさん:2011/12/15(木) 22:28:06.85
基本的に静的型システムの恩恵を受けたい
でも時には動的型の柔軟さも欲しい

てわけで、型推論して静的型が付かないところだけ警告出してくれればベスト
970デフォルトの名無しさん:2011/12/15(木) 22:28:32.82
>>969
C#じゃん…。
971デフォルトの名無しさん:2011/12/15(木) 22:29:15.68
evalは警告すらなく無視されたぞ。
972デフォルトの名無しさん:2011/12/15(木) 22:31:03.04
>>970
実はそうなんだよ……
973デフォルトの名無しさん:2011/12/15(木) 22:35:33.02
>>972
ほんとC#はいい人どまりだな。
974デフォルトの名無しさん:2011/12/15(木) 22:36:39.46
あれぐらいが好きなんすけどねえ
975デフォルトの名無しさん:2011/12/15(木) 22:44:53.25
存在しないメソッド呼び出しを弾きたいだけだったら構造的部分型が一番柔軟なんじゃないかね
これを本格的に採用する言語はオーバーロードを捨てる事になるだろうが
976デフォルトの名無しさん:2011/12/15(木) 22:55:22.02
C#は確かにいいよね。
でもMonoはgtkに逃げちゃったし、Windows圏じゃないと使わない…。
せめて dalvikVM で動けば一気に情勢が変わっただろうに。
977デフォルトの名無しさん:2011/12/15(木) 23:34:17.92
>>975
ダックタイピングしたいだけなら構造的部分型で良いと思う
どうせ動的型付け言語でもオーバーロード(マルチメソッド)は殆ど使われてないし
978デフォルトの名無しさん:2011/12/16(金) 00:53:54.99
というかJavaな人はメソッド名変えるリファクタリングしかしないのかよ。
そればっかり言うけど。
979デフォルトの名無しさん:2011/12/16(金) 01:32:17.33
相手の弱点を見つけたら、それを徹底的に追求して相手を潰す
ディベートの基本だね

javaな人は「討論に勝つ」ことが目的だから、しかたがないと思われ....
980デフォルトの名無しさん:2011/12/16(金) 01:36:36.74
|....,,__
|_::;; ~"'ヽ
| //^''ヽ,,)
|  i⌒"
| ∀`) < 誰もいない きのこるならいまのうち
|⊂
| ノ
      _,,,......,,__
  /_~ ,,...:::_::;; ~"'ヽ
 (,, '"ヾヽ  i|i //^''ヽ,,)
   ^ :'⌒i    i⌒"
      |( ´∀`) < きのこ のこーのこ げんきのこ ♪
      |(ノ   |つ
      |     |
     ⊂ _ ノ
       ""U
      _,,,......,,__
  /_~ ,,...:::_::;; ~"'ヽ
 (,, '"ヾヽ  i|i //^''ヽ,,)
   ^ :'⌒i    i⌒"
     (´∀` )| < エリンギ まいたけ ブナシメジ ♪
    ⊂|  (ノ |
      |     |
      ヽ _ ⊃
      .U""
|
| ミ
| ミ  サッ!
| ミ
|
981デフォルトの名無しさん:2011/12/16(金) 01:38:27.58
守る方は論点逸らしに必死だろ
もう毎回ワンパターンでつまんねーよ
982デフォルトの名無しさん:2011/12/16(金) 02:31:12.27

い-635
ちなみに、平成18年度の民主党の収支報告書だが、
 電通が  690,150,988円(約6億9千万円)
 博報堂が 19,425,964円 (約2千万円)
 読売グループ系列(読売広告、読売メディアセンター)が 72,058,917円(約7千万円)なw
 フライシュマンヒラードジャパンが、1974000円かw
フライシュマンの本社はアメリカにあって、アメリカ政界や企業のPRも担当してる湯田ヤ系の会社だなw
ここが「マニュフェスト」っていう横文字を考えたんだなw

そういえば、今東電と電力総連がフライシュマンを雇ってるらしいじゃないww
札束で学者引っぱたいてうまい具合にテレビで喋らせれば馬鹿な老人なんかはまだまだテレビのいうことを信じるからなw
983デフォルトの名無しさん:2011/12/16(金) 03:09:21.41
適所適材ってあったりまえの結論が何度も出てるのにこれだからな。
頑なに静的型付け言語を否定する奴は何なんだろう。
984デフォルトの名無しさん:2011/12/16(金) 06:01:59.46
Χ 頑なに静的型付け言語を否定する奴は何なんだろう。
○ 頑なに動的型付け言語を否定する奴は何なんだろう。
985デフォルトの名無しさん:2011/12/16(金) 07:21:46.37
>>978
ドカタはリフレクションすら使った事無いんだろ
そんなドカタ仕事なんてJavaで十分
IDEで存分にメソッド名を変えるが良いさ
986デフォルトの名無しさん:2011/12/16(金) 07:23:47.19
>>979
そんな基本は聞いたことがない。参考ソースの提示を頼む。
あと、あんたの中でのディベートを日本語にすると何になるのかも。
987デフォルトの名無しさん:2011/12/16(金) 07:48:28.87
そういえば、どうしてJavaはメソッド名やクラス名が馬鹿みたいに長いんだ?
可読性落ちるだろ。

StackOverflow でもネタにされてるし。
http://stackoverflow.com/questions/2230871/when-is-a-java-method-name-too-long

>>883-913まで読んでも理由が分からないんだけど。
Javaの人は途中で逃げないで教えてよ。
988デフォルトの名無しさん:2011/12/16(金) 07:57:51.56
>>987
> Javaの人は途中で逃げないで教えてよ。
なにを? 逃げるとか何の話?
989デフォルトの名無しさん:2011/12/16(金) 07:59:03.18
動的型で正しく設計するとメソッド名の変換で困らない
=> それだとメソッド名が長くなりすぎる
=> でも実際にはJavaの方が長いよね

という話だったのに、なぜかスルーされてメソッド名を変える話になったよなw
990デフォルトの名無しさん:2011/12/16(金) 08:05:53.61
Javaが長いだけで、たとえばScalaは短い。
動的型付けや静的型付けとは関係ない話だよな。
991デフォルトの名無しさん:2011/12/16(金) 08:07:12.47
動的型付け言語は名前を長くしたほうが
名前がかぶらなくて安全という話か?

904 名前:デフォルトの名無しさん[sage] 投稿日:2011/12/14(水) 23:50:29.23
>>900 >>901
いやいや、Customerならまだましかも知れないけど、

Pointとかだったらかぶるかもしれないじゃないか?
(実際に被ったw)

Graphic3D_Point.get_point_graphic3d();

ここまでやらないとだめだろう。


992デフォルトの名無しさん:2011/12/16(金) 08:42:02.57
動的型付け言語で長いメソッド名といえば
JavaScriptがあるね。

document.getElementById() とか。

メソッド名の長さは動的・静的とは関係ない。
993デフォルトの名無しさん:2011/12/16(金) 08:44:21.13
ドカタ向けの言語ほどメソッド名が長い
994デフォルトの名無しさん:2011/12/16(金) 10:33:08.27
>>987
プログラムを後日、または他人が読む時の想定の違い。
基本ロジックをすぐ理解出来る者が読むという想定だと、メソッド、変数名が短かくても支障が無い。
一方、スキルが保証出来ないという想定では、まず「英文っぽく」読める事が重要。
大規模になるとスキルのバラツキは避け難いし、ハンコを押す人間(大抵はIT無知)への受けを考えると、英文もどきの方が有利だ。
995デフォルトの名無しさん:2011/12/16(金) 11:35:31.90
>>994
それはモジュールシステムや名前空間が無い言語限定の話

それとも、本当にこんなコードが読み易いと思ってんのか?
http://thedailywtf.com/Articles/Really-Descriptive-Names.aspx
996デフォルトの名無しさん:2011/12/16(金) 12:12:50.04
「一般論に対して一部の事例を持ち出す」ってのが何とかの10か条にあったな。
997デフォルトの名無しさん:2011/12/16(金) 13:16:21.70
>>994
つまりSmalltalk最強っすね!
998デフォルトの名無しさん:2011/12/16(金) 13:17:38.21
もちろんSmalltalkのメソッド名が長いという意味ではなくw
999デフォルトの名無しさん:2011/12/16(金) 14:08:25.12
何故そこで、Smalltalkに絡めるのか判らんな。
Pharosとかは使ってみて良かったと思える位便利だが、今の話とは関係ないだろ。
1000デフォルトの名無しさん:2011/12/16(金) 14:10:45.80
X Pharos
O Pharo
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。