1 :デフォルトの名無しさん2011/11/21(月) 11:48:03.35
大規模と書いてドカタと読む。


やっぱり動的型付け言語は大規模開発で効率が悪い 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";
これが文字列ではなく整数とみなされたりね
5 :デフォルトの名無しさん2011/11/21(月) 15:10:16.01
だからPHPは「HTMLを構築して出力する」という特化目的に於いて許容される仕様(とどう煮ても焼いても許されざる仕様)が山ほどあると何度
PHPは汎用プログラミング言語ではない
7 :デフォルトの名無しさん2011/11/21(月) 15:27:01.74
あのさ、俺思うんだ。
PHPは知能を持っている。

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

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

でもね、PHPにはこれができる。
やっぱりPHPには知能があるんだよ。
9 :デフォルトの名無しさん2011/11/21(月) 16:59:48.04
perlとかDみたいに文字列連結と足し算を区別してないのが問題だな
12 :デフォルトの名無しさん2011/11/21(月) 21:11:07.63
個々の言語仕様ごとに意味が違うのに表層しか見えない >>9 の脳みそが問題
26 :デフォルトの名無しさん2011/11/24(木) 02:01:34.87
>>9
Perlは文字列の連結と足し算を演算子で区別すると思うが…
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
ポリモーフィズムじゃなくて、オーバーロードや暗黙の型変換の話ですが
24 :デフォルトの名無しさん2011/11/23(水) 11:43:45.58
>>17
じゃあ暗黙の型パラメータとか型クラスのメソッドの名前解決とかも全否定ですね。
18 :デフォルトの名無しさん2011/11/22(火) 10:38:31.44
同じ見た目でも、対象によって異なった動作をする、ということが気にくわないのでしょ?
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
25 :デフォルトの名無しさん2011/11/23(水) 12:02:40.61
あ、それは全否定でいいや
両方持ってるScalaはRuby並みにキタネーし
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
変数に型がある/ない
値に型がある/ない

まずこれを区別するところからはじめようか
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
・内部形式が数値か文字列かによって、足し算か連結か変わるのは良くない
・文字列の内容が数値かによって、足し算か連結か変わるのは良くない
・記号が増えすぎるのは良くない
・既存の記号に違う意味を与えるのは良くない

だれかこの堂堂巡をどうにかしてくれ
51 :デフォルトの名無しさん2011/11/26(土) 19:00:44.74
>>33
よし、数値といってもintとかfloatとかがあるから、それぞれの足し算の記号を別のものに……。
187 :デフォルトの名無しさん2011/11/28(月) 08:46:24.18
>>51
VB6は引数にかかわらず、浮動小数割り算が/で整数割り算が%だったなw
34 :デフォルトの名無しさん2011/11/24(木) 13:51:35.14
静的型付なら問題にならないでしょ
37 :デフォルトの名無しさん2011/11/24(木) 17:42:50.34
>>34
静的型で暗黙コアージョンしまくりな言語がいいのか?
35 :デフォルトの名無しさん2011/11/24(木) 14:20:47.59
暗黙の変換がやたらあるのはよくない
静的なものではC、動的なものではJavaScriptの==演算子
36 :デフォルトの名無しさん2011/11/24(木) 14:21:55.79
ていうか、Goを触ってみろ。
Cを作った奴等の次の次の言語、だけあって、Cのいいところを残して、
ダメな所がよく潰されている。
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の網羅性を静的検査可能な形で記述できるようになれ
46 :デフォルトの名無しさん2011/11/26(土) 10:33:27.75
>>41
大規模開発ドカタ限定で答えだすなw


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

ま、静的言語と静的型付け言語をごっちゃにしているお前の
いうことなんか誰も耳をかさないだろうけどなw
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の引数に指定できない型を検出してくれるという意味で
少しは意味があるけどね。
63 :デフォルトの名無しさん2011/11/27(日) 09:06:33.68
>>53は型の基本がわかっていない...
42 :デフォルトの名無しさん2011/11/26(土) 07:26:34.31
パターンマッチの網羅性を検査できる言語はあるが、
だからと言って仕様で定められた分岐を網羅してるか否かまでは検査出来ないぞ
そこは分かって書いてるの?
45 :デフォルトの名無しさん2011/11/26(土) 09:44:52.79
>>41「必須条件だ」
>>42「十分条件ではない」
43 :デフォルトの名無しさん2011/11/26(土) 07:35:01.94
仕様で定められた分岐が、可能な状態を網羅しているかどうか検証すればいいだろ
47 :デフォルトの名無しさん2011/11/26(土) 14:23:21.11
変数の型と、値の型とを区別出来ない言語を使っていた時は.動的型付けの意味が判っていなかった。
尤も、世間の9割以上は単純な事務処理だから、区別出来なくても当面困る事は無いだろう。
49 :デフォルトの名無しさん2011/11/26(土) 14:58:03.44
単純な事務処理なんてドカタ&Javaで十分
ぬるぽはうざいけど、ドカタはJavaくらいしか書けねーしな
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

やっぱり静的に型付けできないと、静的にチェックは難しくなるね。
もし静的型付け言語にコンパイルフェーズってのがあって
その時にコードでいろいろ変更できるようにすれば
動的型付け言語を完全に超えられると思う。
62 :デフォルトの名無しさん2011/11/27(日) 09:04:58.31
>>59
コンパイル後の変更に対応できないから動的型付け言語を超えられない。
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
それは言葉を言い換え得ただけ。

どうしても実行時拡張をしないといけないことってなに?
60 :デフォルトの名無しさん2011/11/27(日) 01:34:02.46
でもさ、動的型付け言語で優れたIDEが作れる、と言っても
実例としてはSmalltalkにしか存在しないように、
静的型付け言語なら分岐の網羅性を静的検査できる、と言っても
実例としては一部の関数型言語しか存在しないじゃん

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

だうと
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
言えないから、ドカタって煽って逃げてるんだろ・・・

察しろよ!
74 :デフォルトの名無しさん2011/11/27(日) 16:22:19.95
Smalltalkは原則として実行時の拡張しかできない。
78 :デフォルトの名無しさん2011/11/27(日) 16:28:20.79
>>74
Smalltalkの場合、クラスブラウザ上でクラスを新規定義すると、
ブラウザの中の人がClassインスタンスを生成して
それをシステム辞書に登録するんだったよね
75 :デフォルトの名無しさん2011/11/27(日) 16:24:38.22
実行時拡張というのは、万能関数 eval を使ったメタプログラミングのことだろ?
(他にはリフレクティブプログラミングと呼ぶ事もある)
LISP系言語やRubyでは必須というか、煽るまでもなくごく当たり前に使われているな
76 :デフォルトの名無しさん2011/11/27(日) 16:27:26.25
使われてるかどうかじゃなくて、
どういう時に使うのかって話なんだけどなw
81 :デフォルトの名無しさん2011/11/27(日) 16:37:38.64
>>76
たとえばActiveRecorrdというRubyで書かれたORM(Object-Rerational Mapper)では、
データベースに接続した時にデータベースのスキーマ情報から各テーブルに対応する
クラスが動的に定義される。この時、テーブル内の各フィールドはクラスに所属する
インスタンスメソッドとしてこれまた動的に定義される

JavaやC++のような実行時拡張の欠落した言語には、こんな芸当ができるかな?
84 :デフォルトの名無しさん2011/11/27(日) 16:47:56.37
>>81
でもさ、それって obj.setField(F1, 'abc') こう書くのとなにも変わらないよね?
85 :デフォルトの名無しさん2011/11/27(日) 16:49:53.20
>>81
データベースに接続した時点でのクラスが作られるってことは言い換えると、
コードに書いてあるクラスとは違うオブジェクトができてしまうこともあるってことで、
データベース定義が変わってしまうと、コードが動かなくなってしまうってことじゃないの?


それよりか、データベース定義からコンパイル時にクラスを作ってくれたほうがいいんだが。
89 :デフォルトの名無しさん2011/11/27(日) 17:01:06.12
>>84
Rubyだと、obj.f1 = 'abc' あるいは obj.f1! abc と書けるよ
JavaよりもRubyのほうが簡潔なコードが書けることは一目瞭然じゃないのかな?
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)と統合されている。
一言で言えば「過去に通った道」だね
77 :デフォルトの名無しさん2011/11/27(日) 16:28:06.25
コンパイル時拡張があれば、動的拡張はいらないって話なんで
そこんところを勘違いしないように。
79 :デフォルトの名無しさん2011/11/27(日) 16:30:35.89
Smalltalkなんかはそうなってるってだけで、
どうしても実行時に拡張しなければいけないことなんてないでしょ。
特にコンパイル時に拡張できればほとんどの問題が解決する。

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

「ソフトウェア工学」は矛盾語法か?-アラン・ケイ
http://metatoys.org/oxymoron/oxymoron.html
82 :デフォルトの名無しさん2011/11/27(日) 16:39:19.22
>>80
要約すると、コンパイル時拡張では最初からやり直しになりがちだしデータも作り直しになるから
例えばSmalltalkみたいに30年間動き続けるとか長期運用に耐えるソフトウエアは作れない。
83 :デフォルトの名無しさん2011/11/27(日) 16:44:16.01
最初からやり直しになるとかデータも作り直しとか
どこの世界の話だよ
86 :デフォルトの名無しさん2011/11/27(日) 16:53:44.90
> それよりか、データベース定義からコンパイル時にクラスを作ってくれたほうがいいんだが。

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

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

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

一種のジェネレータみたいだけど、実際にコードを生成しなくても別の定義ファイルから
コンパイル時に直接クラスを作れるわけか、それってかなり良くない?
94 :デフォルトの名無しさん2011/11/27(日) 17:31:07.91
>>86
>yamlで書いたテーブル定義からもクラスを定義できるってこと?

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

・Rubyist Magazine - プログラマーのための YAML 入門 (実践編)
  http://jp.rubyist.net/magazine/?0011-YAML
87 :デフォルトの名無しさん2011/11/27(日) 16:56:13.10
コンパイル時拡張が出来れば、コンパイル時に
データベースに接続して、クラス生成なんてことも可能だろうね。

これだと、しっかり型チェックができるから
更に優れているのではないか。
90 :デフォルトの名無しさん2011/11/27(日) 17:01:33.50
データベースのフィールドなんか、コード補完できないところだけど、
コンパイル時拡張があれば、コード補完できるようになるかもしれないな。
95 :デフォルトの名無しさん2011/11/27(日) 17:35:34.82
ドメインモデル貧血症を地でいく展開だね☆
99 :デフォルトの名無しさん2011/11/27(日) 17:58:29.89
>>95
ドメインモデル貧血症 = トランザクションスクリプトで
特に日本でよく使われる、優れた方法の一つなんだが・・・
96 :デフォルトの名無しさん2011/11/27(日) 17:43:50.36
むしろRubyの場合、IDE側がRubyそのものを動かせば案外上手く行くんじゃ?
あの言語、実行途中でクラス作成や追加や修正できて
インスタンスも同じく作成追加修正できるし
あるオブジェクトが現在持っているメソッドの一覧とかも出せるんじゃん
97 :デフォルトの名無しさん2011/11/27(日) 17:49:22.90
実行時拡張の議論でわかったことは、
ORマッパーやダイナミックローダを使うだけのドカタは、
それらの機構を実現する基礎となっている実行時拡張を不要と言い切る。

天に唾するとは、このことだなw
100 :デフォルトの名無しさん2011/11/27(日) 17:59:21.82
>>97
結局、コンパイル時拡張があれば
実行時拡張は必要ないって結論になってるんだが、
だって過去に通った道というだけで反論は一つもない。
102 :デフォルトの名無しさん2011/11/27(日) 18:00:34.53
>>97
まあ、静的型付け言語でもソフトウェアアーキテクチャとかフレームワーク設計に
関わっていれば常識なんだけど、それをドカタに想像(イメージ)させようとすること
そのものに無理があったんじゃないかと思われ....
98 :デフォルトの名無しさん2011/11/27(日) 17:57:24.20
だからドカタに動的言語を使わせるのは自殺行為だと何度言えば
101 :デフォルトの名無しさん2011/11/27(日) 18:00:08.33
>>98
またお前か。Javaは動的言語だって。
動的型付け言語と動的言語をごっちゃ混ぜにしているお前は
馬鹿としか見られてないぞw
109 :デフォルトの名無しさん2011/11/27(日) 18:30:13.41
>>101
お前ぜんぜん分かってねーな。真の動的言語はSmalltalkだけ!
103 :デフォルトの名無しさん2011/11/27(日) 18:02:56.23
まあさ、コンパイル時拡張があれば
実行時拡張が不要って結論は出てるからね。
111 :デフォルトの名無しさん2011/11/27(日) 18:33:31.83
>>103
日本語お上手ですね。何日前から習い始めましたか?
104 :デフォルトの名無しさん2011/11/27(日) 18:03:25.79
えと、結局どういう時に実行時拡張がいるんだっけ?
107 :デフォルトの名無しさん2011/11/27(日) 18:10:50.20
>>104
ここにもドカタが一人www
106 :デフォルトの名無しさん2011/11/27(日) 18:04:18.59
実行時拡張で何が出来るのかといえば、
結局シンタックスシューレベルの事しか出なかったね。
108 :デフォルトの名無しさん2011/11/27(日) 18:16:07.19
実行時拡張の例がハッシュのキーの
代わりってんだから笑うしかないだろ。
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'

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

もうドカタの相手は疲れたよ.... >>パトラッシュ
110 :デフォルトの名無しさん2011/11/27(日) 18:33:24.34
もはや、どうやってドカタが想像可能なレベルまで落とし込んだ
具体例を出せるかってゲームになりつあるな。
112 :デフォルトの名無しさん2011/11/27(日) 18:47:26.86
>>110
具体例出せないんだw
114 :デフォルトの名無しさん2011/11/27(日) 19:11:24.83
  --> テーブルの各フィールドはハッシュへ与えるキーとして
   「間接的」かつ「冗長」に書ける

なにも問題ないんじゃね?
115 :デフォルトの名無しさん2011/11/27(日) 19:12:27.09
ほらね。冗長かどうかって話に持っていっちゃうから、
シンタックスシュガーだねっで終わっちゃう。
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のコードすら満足に書けないからだよ
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を、ね。
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 みたいな具体的な(適切な)例外が発生するんじゃないのか?
132 :デフォルトの名無しさん2011/11/27(日) 21:03:38.71
>>130
RubyではNullが返ってきて関係ない所でエラーになるんだよなw
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クラスであれば、そうだね
141 :デフォルトの名無しさん2011/11/27(日) 21:28:16.77
>>137
だから何度も繰り返すけど、もしもJavaやC#でも obj.set_f1('abc') あるいは obj.f1 = 'abc'
のようなコードが書ければ、静的なコンパイル時型検査ができる訳だ

そして、もしそうなら「やっぱり静的型付け言語のほうがイイネ!!」という
誰もが納得する結論になるんだよ
143 :デフォルトの名無しさん2011/11/27(日) 21:35:07.14
>>141
だから、それをやりたければ、コンパイル時拡張があればできるよね。
って話になったんだろ。
145 :デフォルトの名無しさん2011/11/27(日) 21:36:26.39
>>141

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

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

いかなる場合でも、できない言語と比べて、
出来る言語のほうが優れてるよね。
151 :デフォルトの名無しさん2011/11/27(日) 21:42:21.80
>>143
だから、コンパイル時拡張は「絵に書いた餅ダネ」って話になったんだろ
172 :デフォルトの名無しさん2011/11/28(月) 01:29:17.87
>>145
>やっぱり自覚はしてるんだ。 
>静的なコンパイル時検査ができたほうが優れていると。

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

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

OOPを自慢する若手ジャバラが古参コボラを揶揄するのと同じ構図
そんなジャバラやコボラもドングリの背比べ、同じドカタ同士の低次元な争い
116 :デフォルトの名無しさん2011/11/27(日) 19:24:35.06
冗長かどうか気にする感性があったら
Javaドカタやってないって話だよ
117 :デフォルトの名無しさん2011/11/27(日) 19:34:00.40
>>116
バランスの問題だよ。

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

でもな冗長である代わりに、逆にコードを書くのが楽になってる面もある。
122 :デフォルトの名無しさん2011/11/27(日) 20:05:30.29
そもそも「実行時に検出できるからいい」って言う奴は、大規模開発したことない奴だろ。
128 :デフォルトの名無しさん2011/11/27(日) 20:46:07.67
本当に実行時に変えたいって要望は殆ど無いからね。
ほとんどの問題は最初から変わっていれば問題ないはず。
ソースコードを修正することで解決出来る問題ばかり。

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

本当に欲しいものは、動的型付けではなく、
オリジナルのファイルを書き換えることなく、コンパイル時に
メモリ上でファイル(正確にはパースした結果のオブジェクト)を変更して
そこからコンパイルを行う、コンパイル時拡張だということに
人々が気づくのはいつだろうね。
133 :デフォルトの名無しさん2011/11/27(日) 21:05:31.24
>>128
そういった仮説を前提にした主張は、実験的でもいいから
具体的な言語処理系が登場しない限り、誰も耳を貸さないだろうな

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

もしも>>128が三歳児なら、「ヨシヨシ、イーコチャンデスネー」って
頭をナデナデしてあげるよw
134 :デフォルトの名無しさん2011/11/27(日) 21:07:53.21
>>133
おまわりさん こいつです
131 :デフォルトの名無しさん2011/11/27(日) 21:02:33.51
動的型付け言語の機能は、冗長にはなるが
本質的には静的型付け言語でできないことはない。

だが、逆に静的型付け言語でできる、静的検査は
動的型付け言語ではどうしてもできない事がある。
165 :デフォルトの名無しさん2011/11/28(月) 00:37:45.94
>>131
動的型付き言語に静的型チェックを入れれば出来ることを
「どうしてもできない事」とはこれいかに。

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

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

制約を付けない物にできることが制約のある物にできないことはあっても、逆はない。
139 :デフォルトの名無しさん2011/11/27(日) 21:25:27.69
Javaの標準Hashクラスを設計した奴は頭オカシイ
nullを値として突っ込めるのにキーに対応する値が無いときもnull返すとか
気が狂ってるとしか思えん。何のメリットがあるんだよ
142 :デフォルトの名無しさん2011/11/27(日) 21:34:07.73
>>139
それで、あんたはどの言語のハッシュが理想だと言ってるの?
147 :デフォルトの名無しさん2011/11/27(日) 21:37:26.56
>>142
まずは自分がどのハッシュで満足してるか言えよw
148 :デフォルトの名無しさん2011/11/27(日) 21:38:03.16
>>147
いう相手が間違ってるw

そういうことは満足してないやつに聞けよ。
150 :デフォルトの名無しさん2011/11/27(日) 21:40:02.28
>>148
Javaで満足しているという返事と解釈した。w
140 :デフォルトの名無しさん2011/11/27(日) 21:27:25.39
F#3.0のType Providerってまったく知らんけど今このスレで語られてるような機能なんじゃね?
144 :デフォルトの名無しさん2011/11/27(日) 21:35:49.48
別に例外を投げるのでも良いし、option型でも良いし
Maybeモナドでも良いんじゃない?
でもnull返すのはねーよ
146 :デフォルトの名無しさん2011/11/27(日) 21:37:23.27
>>144
だから、”標準のハッシュ” がnullを返さない言語はなにか聞いてるんだけど。
149 :デフォルトの名無しさん2011/11/27(日) 21:39:29.94
>>146
Java以外は大抵例外が発生するか、デフォルト値を指定できるか、Maybe的なやつを使うだろ。
むしろJava以外でnullが言語を知りたいわw
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
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
デフォルト値を設定できれば問題ない理屈がわかんね
有用な場合もあるけど無理なパターンもあるだろ
161 :デフォルトの名無しさん2011/11/27(日) 22:51:55.87
> Mapインターフェイスをジェネリクスで使っているかぎり
> 結局は同じ問題に突き当たるという罠w
ならないんだが?
183 :デフォルトの名無しさん2011/11/28(月) 05:50:01.13
>>161
ああドカタ君にはまだ解らないか…
難しいこと言って、ゴメンね♪
184 :デフォルトの名無しさん2011/11/28(月) 06:57:12.81
>>183
「同じ問題」の例示を求む。
189 :デフォルトの名無しさん2011/11/28(月) 17:13:56.43
>>184
静的型付けではMap<K,V>のV型の値しかデフォルト値として与えられないから
マップを引けたかどうかを返り値のみから確定させる一般的方法がない。

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

だからJavaでは返り値のみで判定するなと警告されている。
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 を実装する
163 :デフォルトの名無しさん2011/11/28(月) 00:22:46.76
ガチで速度の必要な下から中位のトコは静的な言語
中から高位の層は動的な言語
使い捨てプログラムなんかも動的な言語
164 :デフォルトの名無しさん2011/11/28(月) 00:31:08.44
そういやRubyが遅いという理由で
TwitterはScalaに変更したらしいね。
JVM上で動く静的型付け言語
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
実行時には型情報を無視してても?
171 :デフォルトの名無しさん2011/11/28(月) 01:20:29.25
>>168
実行時に型情報を無視するといえばC++がそうだ。
RTTIを有効にしなければ、型情報そのものが存在しないからな。

それでも静的型付け言語だろう。
169 :デフォルトの名無しさん2011/11/28(月) 00:49:37.62
つまりあれか、ここでは型付けの静的、動的ではなくて、
静的(コンパイル時)型チェック機構の有無だけを問うているのか?
170 :デフォルトの名無しさん2011/11/28(月) 01:08:43.08
オプショナルな静的型チェック機構を持つObjective-CとかStrongtalkとかDartとかは
どっちに入るの? これらは静的型付きか動的型付きかって言ったら後者なんだけれども。
173 :デフォルトの名無しさん2011/11/28(月) 01:38:12.77
動的型付け言語の柔軟性の利点なんて
動的型付けのデメリットから比べれば
ミジンコみたいなもんだから
174 :デフォルトの名無しさん2011/11/28(月) 01:41:59.06
> まっとうな静的型付け言語であれば、動的結合時の型検査やcaseの網羅性検査は、
> コンパイル時に(静的に)実行されるのが当たり前

まっとうな静的型付け言語の例をあげてください。
176 :デフォルトの名無しさん2011/11/28(月) 01:52:51.47
>>174
既存の静的型チェック機構は大なり小なりなんらかの問題を抱えているもんなんじゃないの?
175 :デフォルトの名無しさん2011/11/28(月) 01:50:47.66
静的型チェックを導入することで諦めなければならないことが無い問題領域なら
静的型チェック機構があれば便利なのは自明じゃないの?
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でも分岐できるようになったものの、整数型の場合の動作と揃えて
網羅していない場合もエラーにならない、そういう判断になっただけの話。
180 :デフォルトの名無しさん2011/11/28(月) 02:25:35.33
>>178
せっかくenum使ったswitchの網羅性をチェックしても、
enum型変数の値をnullにするだけで
ぬるぽ発生してどの分岐も通らないJavaは素晴らしい
182 :デフォルトの名無しさん2011/11/28(月) 05:46:05.30
>>180
nullケースも必須にすればいいだけ。
188 :デフォルトの名無しさん2011/11/28(月) 16:25:16.15
>>178
>JavaでもEnum値で分岐するswitch文は網羅性を検証できるよ。

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

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

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

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

 明日は晴れでしょう。しかし曇ることもあります。地域によっては雨かもしれません。
207 :デフォルトの名無しさん2011/11/29(火) 03:47:46.34
>>188
出来る。Eclipseなどの外部ツールを使えば出来る。
明日の天気は雨ですが内陸部では晴れるでしょう。そんな感じ。

言語としてJavaはswitch文でのenumの網羅性は要求していない。
しかしコーディングの規約として網羅性を強制したいのであれば、それをツールで
支援することは何も妨げられないということ。
Cでもgccはswitch文でのenumの網羅性を検証するオプションがある。
179 :デフォルトの名無しさん2011/11/28(月) 02:18:06.48
まとめ
- 大事なのは、静的型付きであることより静的型チェック機構の有無。
- ドカタに任せられるレベルのコードでは動的型付きのメリットは皆無。というか変に使われると逆に困る
- したがって、静的型チェック機構による制約も気にならないしメリットのほうがはるかに大きい。
- 制約を増やせばより確実な型チェックが可能になるが、その分ルールや出来ない事や場合によっては記述も増える。
- 出来ない事や記述の増加は問題ないが、ルールが増えてしまうと当然ドカタは使えなくなるから本末転倒。
- だからドカタ向けにはJavaやC#程度の型チェックでおk。
181 :デフォルトの名無しさん2011/11/28(月) 02:33:12.34
そりゃ非nullを静的に検証する問題だから直交した話だわな。
185 :デフォルトの名無しさん2011/11/28(月) 07:16:41.29
>>181
非nullを静的に検証することができるの?
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>は馬鹿で結構。馬鹿だから普通はやらない。
195 :デフォルトの名無しさん2011/11/28(月) 20:26:35.68
>>192
ジェネリクス導入前のJavaみたいなコードになりそうだな
その頃から使ってるから書けるけども、静的型には程遠かったなあ…
194 :デフォルトの名無しさん2011/11/28(月) 20:16:30.98
JavaもC++みたいにmap<K,V>の総称型Vのデフォルトコンストラクタを使って
インスタンス生成してデフォルト値として返せたら良かったね
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オブジェクトを用意する手間が要らなくて
良かったねってこと
200 :デフォルトの名無しさん2011/11/28(月) 21:27:57.07
>>197
う〜ん、確かにそれは出来ないなぁ。
替わりの策としてはファクトリを用意せずにClass<V>を渡すバージョンは
作ることが出来そうだけれども、デフォルトコンストラクタの存在確認が
実行時になってしまうのがいやんなかんじ。
198 :デフォルトの名無しさん2011/11/28(月) 21:20:15.92
そういうのは、自作ユーティリティライブラリを
作ればいいだけだから、すごく小さな問題でしかないな。
199 :デフォルトの名無しさん2011/11/28(月) 21:26:47.02
さすが冗長言語Javaのドカタやってるだけあるなw
良く訓練されてやがるww
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が体勢を立て直すのはもう遅すぎるかもしれない。
208 :デフォルトの名無しさん2011/11/29(火) 05:01:39.17
switch文の網羅性をチェックしたところで、
ドカタは空のdefault枝を書いて /* おまじない */とかコメントつけるだけ。
209 :デフォルトの名無しさん2011/11/29(火) 19:52:15.88
>>208
そういうプログラマ個人に依存した話は却下します。
どんな言語を使おうが、その人がやるなら同じ事ですから。
212 :デフォルトの名無しさん2011/11/30(水) 00:00:03.75
>>208
>ドカタは空のdefault枝を書いて /* おまじない */とかコメントつけるだけ。

それこそツールではじけばいいだけやん。
215 :デフォルトの名無しさん2011/11/30(水) 04:58:11.20
>>212
本当にデフォルトは処理無しな場合とどう区別する?
210 :デフォルトの名無しさん2011/11/29(火) 23:00:34.42
しかし水は低きに流れる
土カッチにもマトモなのもいれば
果てしなく杜撰とか低レベルなのも
211 :デフォルトの名無しさん2011/11/29(火) 23:38:56.00
>>210
頭大丈夫?
214 :デフォルトの名無しさん2011/11/30(水) 02:25:14.82
今のお金は、悪貨だとでもいうのか?
実際は悪貨のほうが駆逐されてるだろ。
現実見ろよ。
216 :デフォルトの名無しさん2011/11/30(水) 07:11:35.21
>>214
金貨銀貨は既に過去のもの
つまり駆逐済み
218 :デフォルトの名無しさん2011/11/30(水) 10:05:30.62
いやそんなのは分かってる上だろ、どう見ても。
理論が飛躍して言葉遊びの域に達してるだけで。

>>214は新言語が旧言語の悪いところを潰していってるのではないかと言い、
>>216は正直良く分からんが、
これまでの通貨の歴史を紐解けば今の言語が悪貨であることが示唆されると言ってるんじゃないのか。
221 :デフォルトの名無しさん2011/11/30(水) 20:30:19.95
>>218
概ねそのとおり。

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

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

だから、「悪貨は良貨を駆逐する。」なんてことをいう人は、
正しいか間違ってるかを考えずに、思考停止しているだけの馬鹿と俺は判断する。
217 :デフォルトの名無しさん2011/11/30(水) 09:45:24.91
ふう 馬鹿だな。 http://www.proverb.jp/proverb247.html
こんなリンクを貼らないといけないなんて中学生じゃあるまいし。
219 :デフォルトの名無しさん2011/11/30(水) 16:51:37.54
まあ含みの多い言葉だしな
dos/windows,x86,真性ドカタと本物グラマ、
php等例には事欠かない
逆は真ではないけど
222 :デフォルトの名無しさん2011/11/30(水) 20:33:42.90
思考停止というよりか、悔しさが含まれてるように見えるな。

勝利したものに対して「勝ったほうが負けなんだ!」って言ってるみたいな感じw
223 :デフォルトの名無しさん2011/11/30(水) 20:37:02.90
そもそもJavaは良貨だよ
ドカタの脳みそに入る言語の中では
225 :デフォルトの名無しさん2011/11/30(水) 20:51:47.34
動的も静的も違わないだろ。
なぜならば機械的に動的 ⇒ 静的の変換が可能だからだ。
型が無限にあれば静的にできない可能性があるが、実用上ではありえない。
229 :デフォルトの名無しさん2011/11/30(水) 21:56:52.54
>>225
動的に型を定義可能な言語の場合は?
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つがないと、型チェックはできないからね。
コードのどこかで型情報がなくなったりしたら
意味なくなっちゃうし。

結局、プロジェクトの全部の箇所にちゃんと型を明記しないといけなくなるんだけど。
236 :デフォルトの名無しさん2011/12/01(木) 07:18:28.53
>>228
> この3つがないと、型チェックはできないからね。

できます。
237 :デフォルトの名無しさん2011/12/01(木) 08:14:36.46
まあ、>>228は型推論を知らない、知りたくない、
見ない、見たくない、聞こえない、聞きたくない.... ヤシなんだろw
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
お前型推論を誤解してないか?

型推論ってのは、型書くのを省略出来るだけで、
型を書いてるのと全く一緒なんだが。
230 :デフォルトの名無しさん2011/11/30(水) 23:56:08.45
頭悪くてよく分からん。
動的な型付けでしかできないメリットをコードで見せて。
234 :デフォルトの名無しさん2011/12/01(木) 05:48:37.92
>>230
eval
256 :デフォルトの名無しさん2011/12/01(木) 23:05:18.58
>>234
evalは目的じゃなくて手段でしょ?

なんのためにevalを使うの?
Perlで例外をトラップするために使うは答えになってないよ。
284 :デフォルトの名無しさん2011/12/03(土) 12:50:27.33
>>234
それのメリットって何ですか?
233 :デフォルトの名無しさん2011/12/01(木) 02:24:05.21
"1" + 1 は "2" でないと違和感がある。
"11" や 2 だとおかしい。
255 :デフォルトの名無しさん2011/12/01(木) 22:39:39.44
>>233
エラーだろjk
235 :デフォルトの名無しさん2011/12/01(木) 06:58:10.57
動的な言語のスパゲティは
静的な言語よりキツいのは確か
238 :デフォルトの名無しさん2011/12/01(木) 08:39:19.24
ドカタの脳みそに入る言語のリストに型推論のある言語は入ってない
240 :デフォルトの名無しさん2011/12/01(木) 10:04:09.76
>>238 静的型付きでなければ(キリッ
ていうからなにかと思えば、Javaのことだった、ってのが
お約束パターン過ぎてあきれるよね。
241 :デフォルトの名無しさん2011/12/01(木) 11:25:03.25
>>240
次の二つの階級の話が混じってるから同じパターンのループになってしまう。

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


だからドカタでも使える言語を明らかにした方が良い。
Javaは鉄板として、あと何があるのか。
257 :デフォルトの名無しさん2011/12/01(木) 23:10:54.65
>>241
> だからドカタでも使える言語を明らかにした方が良い。
> Javaは鉄板として、あと何があるのか。

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

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

動的型付け言語はよく使われてるといえるのは、Ruby、Perl、PHP、JavaScript、Pythonぐらいか?
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ドカタ「今マイナーな言語も流行ればドカタ言語になる(キリッ」
251 :デフォルトの名無しさん2011/12/01(木) 17:02:29.83
同じことができる代わりがいくらでもいるような人達の事じゃないの?
仮にその人がいなくなっても、代わりはすぐに補充できる。

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

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

最初に思いついたのはショータイム
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<>(); // 右のダイヤモンドオペレータ内を省略可
286 :デフォルトの名無しさん2011/12/03(土) 17:19:23.19
動的型付け言語は、evalや実行時型拡張を制限して
型推論を付ければ静的型付け言語にできる。
もちろん制限付きであってもJavaよりずっと簡潔なコードになる。

一方Javaには >>263 みたいな型推論しか無いんだから、
Javaのドカタが型推論を憎む気持ちは分かるよ。
すっぱい葡萄ってやつだね。
290 :デフォルトの名無しさん2011/12/03(土) 21:12:30.21
>>286
動的にし型がわからないという大きな問題が
解決できない限り、動的型付け言語に未来はないよ。
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
それは型が自由に作れない言語だから・・・
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にはクラスやオブジェクトもあって、オブジェクトを引数に取る関数が書けるけど、
構造的部分型を採用してるから型注釈は必須じゃない(列多相が型推論される)
267 :デフォルトの名無しさん2011/12/02(金) 00:26:43.88
全ての関数や変数に型を明記する必要がある
→ プログラムのどこかで型を明記する必要がある
→ どこにも明記してなくても明記してるのと同じ ← いまここ
268 :デフォルトの名無しさん2011/12/02(金) 00:50:51.61
> どこにも明記してなくても明記してるのと同じ

だれがそんな事言ったんだ?
271 :デフォルトの名無しさん2011/12/02(金) 06:34:08.19
型推論ってのは、型を書かなくてもいいってことじゃなくて、
型の中にパラメトリックな多相があっても、
矛盾のないように型パラメータを具体化して
型の整合性を検証できるということ。

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

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

ほんとドカチンは頭が悪いな
273 :デフォルトの名無しさん2011/12/02(金) 07:05:58.09
ずっと型注釈無しで型推論が可能かどうかを議論してたのにね
無知を晒したから話を変えようとしてるのかな?
275 :デフォルトの名無しさん2011/12/02(金) 08:41:13.23
とまあ、またつまらないドカタ罵倒の流れにするしか脳がないわけだ。
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
282 :デフォルトの名無しさん2011/12/02(金) 22:14:02.81
明日はドカタは無意味なオープンソースカンファレンスなんかにいって
一日無駄に過ごすんだろうなw
285 :デフォルトの名無しさん2011/12/03(土) 15:14:54.07
>>282 自身が、自分の住んでる世界以外を全く把握できない、という典型的なドカタ病である件
283 :デフォルトの名無しさん2011/12/03(土) 08:51:02.93
え?Javaとオープンソースカンファレンスに何の関係が?
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って知ってるか?
294 :デフォルトの名無しさん2011/12/04(日) 08:06:33.19
>>289
今回はJava関連の特別なイベントがあるのかと思った
いくら暇でもそんな下らないセッション聴きに福岡まで行かないだろ
287 :デフォルトの名無しさん2011/12/03(土) 17:54:26.78
まあ、動的型付け言語プログラマはテストを書けば
安全なプログラムを作れるのを知ってるので、
そういう制限付きの言語処理系に対する需要は少ないけどな
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以上に現在がある言語もそう無いと思うけど。
295 :デフォルトの名無しさん2011/12/04(日) 10:08:46.95
>>293
完全に下降線だが?
298 :デフォルトの名無しさん2011/12/04(日) 10:20:32.60
>>295
認識が甘いよ。
他の動的型付け言語で、

デスクトップアプリ作れますか?
3Dバリバリのアプリ作れますか?
組み込みアプリ作れますか?
API仕様は決まっていますか?(規格がありますか?)
そのAPI仕様に従った実装がいくつもありますか?(競争がありますか?)
ライブラリは個人が作って放置されてるようなものではなく、ちゃんと大きな所でメンテナンスされてますか?
300 :デフォルトの名無しさん2011/12/04(日) 10:22:04.33
>>298
自分の無知を晒すのって、楽しい?
302 :デフォルトの名無しさん2011/12/04(日) 10:23:48.60
>>300
えと、頑張れば出来ますって話をしたいのかな?
307 :デフォルトの名無しさん2011/12/04(日) 10:30:43.97
>>298
>デスクトップアプリ作れますか?
>3Dバリバリのアプリ作れますか?
>組み込みアプリ作れますか?
>API仕様は決まっていますか?(規格がありますか?)
>そのAPI仕様に従った実装がいくつもありますか?(競争がありますか?)
>ライブラリは個人が作って放置されてるようなものではなく、ちゃんと大きな所でメンテナンスされてますか?

という質問よりも「1ヶ月でリリースできますか?」という質問に重きがおかれる時代だということでは。
もちろん用途によるわけだが、「何よりも開発期間の短さ」が求められる仕事の割合は高まっていると感じる。
310 :デフォルトの名無しさん2011/12/04(日) 10:33:32.17
>>307
railsならブログが10分でできます。

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

え? オリジナルのもの?
そんなものが10分なんかで出来るわけがないじゃないですかw
動的型付け言語を使ったって、短期間でリリースできることはないんだよ。
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にしがみつくドカタか…
可哀想だが、自己責任だよな…
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
308 :デフォルトの名無しさん2011/12/04(日) 10:31:06.19
>>301
そこに静的型付け言語と、動的型付け言語のシェアのグラフがでてるけど、
静的型付け言語の方が、2倍以上使われてるのは当たり前として、

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

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

あと動的型付け言語がやっぱりそこまでのメリットがないよねって
気付き始めたんだろう。
304 :デフォルトの名無しさん2011/12/04(日) 10:25:15.10
>301
ここってなんでいつも C と C++ を分けて集計してるんだろうね
305 :デフォルトの名無しさん2011/12/04(日) 10:26:41.75
>>304
C/C++なものを両方にカウントするためだろ?
309 :デフォルトの名無しさん2011/12/04(日) 10:32:28.42
検索ベースのランキングだから、「C/C++について」と書いてあるページはCとC++の両方にカウントされるだろうな。
311 :デフォルトの名無しさん2011/12/04(日) 10:34:27.58
そこのグラフ、JavaとC++に統計的に有為なレベルで下降トレンドがあって笑えない
313 :デフォルトの名無しさん2011/12/04(日) 10:36:55.98
>>311
動的型付け言語のエース
PHPのおかげですね。
312 :デフォルトの名無しさん2011/12/04(日) 10:35:00.32
TIOBEが言語の将来性をあらわすなんていう馬鹿な解釈している阿呆なんて
この世に存在しているのか!?
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
326 :デフォルトの名無しさん2011/12/04(日) 11:36:05.48
>>316
Railsバブルがあって
やっとそれがはじけて
元の状態に落ち着いた感じ屋根
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
319 :デフォルトの名無しさん2011/12/04(日) 10:50:09.56
>>317
C# は Windows アプリ開発という一定のパイの中で移行しているだけ。
Objective-C は iphone アプリ開発のため。

そのケースはどちらも、ターゲットによって開発言語がほぼ決まってしまう例。
言語の長所短所は二の次だと思う。
318 :デフォルトの名無しさん2011/12/04(日) 10:48:11.71
Objective-CはC互換の部分は静的型付けだけど、
オブジェクトシステムは動的型付けですよ
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言語は組み込みに強いからモバイルとかにも搭載されてるよ。
330 :デフォルトの名無しさん2011/12/04(日) 12:00:10.15
>>322
C言語は動的型付け言語でライブラリを作ったが遅いから、
C言語で書きなおすかって用途に使われてるんだよw
325 :デフォルトの名無しさん2011/12/04(日) 11:19:59.01
OpenJDKはオープンソース。
OpenJDKはOracleが買ってない。
OracleはJava SE 7をOpenJDKをベースに切り替えた

ここらへんは常識なんで知っといてね。
329 :デフォルトの名無しさん2011/12/04(日) 11:57:34.36
OpenOffice → LiberaOfficeにフォーク
Java → OpenJDKメインに変更
MySQL → ?
VirtualBox → ?
GlassFish → ?
NetBeans → ?
332 :デフォルトの名無しさん2011/12/04(日) 12:21:24.13
>>329
こうしてみるとオラクルが片っ端からOSS敵対買収しまくってるのがわかるな
331 :デフォルトの名無しさん2011/12/04(日) 12:05:02.36
まあ C で書いて各言語のバインディングを提供するというのは定石ですね。
334 :デフォルトの名無しさん2011/12/04(日) 13:46:01.06
×動的言語
○動的型付け言語

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

動的型付け言語と言えばPHPなのかな。
あれも馬鹿用言語らしいが。
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みたいなもの。
353 :デフォルトの名無しさん2011/12/04(日) 16:24:44.60
初っぱなから>>345説が完全否定されてるwww
349 :デフォルトの名無しさん2011/12/04(日) 15:31:59.31
このあなりで多義語ないしはコンテキスト依存だと気づけるよね
それに気づかず議論したがる奴はバカなの?死ぬの?
350 :デフォルトの名無しさん2011/12/04(日) 15:32:09.59
どんな言語にも静的性はあるし
どんな言語にも動的性もある
その上でその言語が何を指向しているかが問題だろうに

Cを動的言語だとか、なんだよその中二病はw
352 :デフォルトの名無しさん2011/12/04(日) 15:53:14.40
2ch に書き込む前に、直訳でいいから "dynamic language" で検索して
検索結果のトップに出てくる wikipedia を見るくらいしないのかね。
そうすれば、寄付金募集のすぐ下にデカデカと注意喚起があって
http://en.wikipedia.org/wiki/Talk:Dynamic_programming_language
このくらい議論の余地のある言葉なんだなあと、すぐに分かると思うのだが。
2ch での議論もいいと思うが、2ch しか見ないようじゃ終わってるぞ。
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
動的言語がどんなもんかもわからんといってるのに、違いがわかるって...。

論理的思考力のない人なのか?
360 :デフォルトの名無しさん2011/12/04(日) 19:52:05.21
monoってかなりLinuxで使われてるよな。
ソニーもゲーム機にC#使うし。
361 :デフォルトの名無しさん2011/12/04(日) 20:04:29.51
国語審議会の議事録見ると動的言語の範疇にVBA、VBSは入るのにVB.NETは
入っていないんだよね。
ってことは言語の特性だけで決まらないってことじゃないかな。
363 :デフォルトの名無しさん2011/12/04(日) 20:21:59.62
動的言語かはおいといて、VBSには型がないから
動的型付け言語っていうのは正しいな。
367 :デフォルトの名無しさん2011/12/04(日) 22:05:12.45
>>363
変数にゃ型ないけど、値にはあるよ
まあ本当の意味で型がない言語って汗(とマシン語)くらいのものだとは思うけど
368 :デフォルトの名無しさん2011/12/04(日) 22:09:27.09
>>367
> 変数にゃ型ないけど、値にはあるよ

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

372 :デフォルトの名無しさん2011/12/05(月) 07:46:44.60
>>367
アセンブリ言語にも型はあるぞ。
レジスタも直値もアドレッシングも間接アドレッシングも型だらけだ。
364 :デフォルトの名無しさん2011/12/04(日) 20:22:57.82
どこの国の話ともわからないのに
人格攻撃にもっていくのはイクナイ
366 :デフォルトの名無しさん2011/12/04(日) 21:50:15.63
>>364
アナタハニホンゴノフジユウナハントウシュッシンシャデスカ?
365 :デフォルトの名無しさん2011/12/04(日) 20:24:49.34
そりゃ書いてないのだからわからないわなw

じゃあ書けと。
370 :デフォルトの名無しさん2011/12/05(月) 01:01:57.00
昔は自己書き換えで動く
アセンブラプログラムや
BASICもあったからな
不正にシステムすら書き換え可能なwinは
超動的システムだ
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 : ...

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

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

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チェックを型で分岐とか呼ぶのか?
388 :デフォルトの名無しさん2011/12/06(火) 14:24:37.28
>>384
リストかどうかという型チェックをnullチェックと変わらんな、ですか
Scheme読めないんならそう言えばいいのに
389 :デフォルトの名無しさん2011/12/06(火) 14:24:57.61
>>383
大量と呼べるほど多くはねえよw
398 :デフォルトの名無しさん2011/12/06(火) 14:40:18.58
>>377
>型で分岐せずに済ませるのが動的型付けのコードだよ。
とりあえずこのサンプルを出してみて比較すると良いんじゃないのかな。
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系マクロを意識したものなのにね。
403 :デフォルトの名無しさん2011/12/06(火) 15:15:59.46
>>401
Pythonのwith構文は機能的にはより狭く制限された
Rubyのブロックつきメソッドという感じだね

用途がRubyのブロックつきメソッドより限定される(ほぼRAII専用という感じで
iteratorみたいなものは作れない)のと、単純に後発なのでRubyのものほど
多用されてない感じ
(Pythonのwithは2.5以降で使えるけど2.5だと__future__からimportしないといけない)
でも便利は便利なので、わりと普通に使われてもいると思う
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
ユニットテストぐらいしろよ。
412 :デフォルトの名無しさん2011/12/07(水) 03:43:06.89
>>410
はあ?型を決め打ちしない上でUnitTestするのが当然だろ?おまえ馬鹿か?
421 :デフォルトの名無しさん2011/12/07(水) 09:36:35.50
>>413
厳密には代数データ型でのパターンマッチの場合
「型」としては一つで、値やコンストラクタによって分岐するので、
確かに「型で分岐する」のと同じではない

しかし、それを代数データ型の無いLispで同等のコードを翻訳すると
まさに「型で分岐する」>>378のようなコードになるわけで、
>>378を認めて>>374を認めないというのなら、>>408の主張は全く意味不明
>>378とisinstanceの一体何が違うんだ?
430 :デフォルトの名無しさん2011/12/07(水) 11:10:28.81
>>374
isinstanceの是非は横に置いといて、
あなたのコードが突っ込み所満載なのは事実だよ。
宣言部とか==Trueとか。
432 :デフォルトの名無しさん2011/12/07(水) 11:12:55.01
>>430
確かによくわからんコードだ
defineで関数を定義する動的型付け言語で一番メジャーなのってSchemeか?
でもどう見てもSchemeのコードではないしな
まあただの例ということなんだろうけど

375 :デフォルトの名無しさん2011/12/06(火) 12:57:51.93
型チェックが関数で行うから面倒だ感じるかもしれないけど、
奇数と偶数を分けて考える程度の面倒さだからさほど問題はない。
型チェックもデータの奇数偶数も データの仕分けという意味では同じなので。
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
つーか、どんな型のものでも入れられるリストとか実際何に使うんだよ
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も書けねーのか?
394 :デフォルトの名無しさん2011/12/06(火) 14:33:20.21
>>391のほうが筋が通ってるな
396 :デフォルトの名無しさん2011/12/06(火) 14:36:32.56
>>391
意味が分からん……よく読めよ
「pairかそうでないか」のテストをしているだろ
pairとpairでないもの(atom)は同類じゃない
392 :デフォルトの名無しさん2011/12/06(火) 14:30:37.26
いや、複数の型というのは分かる。直和型はよく使う
でも「何でも」となると用途があんまり無くね?

あと、静的型でも型消去を使えば
どんな型でもリストにぶち込むことは出来る
393 :デフォルトの名無しさん2011/12/06(火) 14:31:46.38
多態メソッドよりisinstance使え
とか書いてあるpythonのテキストがあったら
是非とも晒してみろw
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
407 :デフォルトの名無しさん2011/12/06(火) 21:37:33.69
>>405
何を憤ってるのか知らんが、静的関数型言語では普通
>>378や>>404は代数データ型で型定義してパターンマッチで分岐するだろ?
395 :デフォルトの名無しさん2011/12/06(火) 14:34:22.75
それらは用途が違うので、そう書いてあったらその本はバカだろうな
用途が違うのに、常に多態メソッドを用いるべきだという主張もバカだが
(ついでにOOPLのことしか考えていない点で視野狭窄)
399 :デフォルトの名無しさん2011/12/06(火) 14:49:48.30
一応言っておくが、
pair?はconsや、consからなるlistのようなものに対しては真を返し、
atomに対しては偽を返すテストね
402 :デフォルトの名無しさん2011/12/06(火) 15:12:14.10
unionしたデータを扱う静的言語ならHaskellは綺麗にやってるよね。
condやifを書かなくても多態性を使えるからなんだろうけど。
lisp系でもClojureなら、そうゆうやり方もできるけど。
411 :デフォルトの名無しさん2011/12/07(水) 02:14:19.91
おいおい
パターンマッチが良くて型で分岐するのはダメって意味不明
直和型のパターンマッチなんてまさに型を決め打ちするコードじゃねーか

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

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
それがわからないなら動的型言語でライブラリ公開しないほうがいい

マジで
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 型) の値を受け取って

期待される型の値しか受け取らないようにメソッドを設計し、
そのメソッドに期待される型の値が渡されていることはコンパイラが保証する。
422 :デフォルトの名無しさん2011/12/07(水) 09:42:23.88
C++やJavaには関数型のパターンマッチとまったく同じものはないけど
オーバーロードという静的ディスパッチはあるわな(C++にはテンプレートもある)

多くの動的型言語には同じ機構はない(そもそも同名の関数を多重定義できない)ので
似たことをやりたければ自分で手動でディスパッチすることになるんじゃないのか?
それこそ実行時型や引数の個数によって
474 :デフォルトの名無しさん2011/12/09(金) 01:01:51.05
>>422
呼ぶメソッド名を変更すりゃいいだけの話
475 :デフォルトの名無しさん2011/12/09(金) 01:53:03.83
>>474
何を言ってるの…。
479 :デフォルトの名無しさん2011/12/09(金) 03:09:30.65
>>475
オーバーロードってメソッド名を変更する手間を省くくらいの意味しか無い機能だと思ってるが違うのか
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
680 :デフォルトの名無しさん2011/12/11(日) 11:20:48.12
>>678
そのObject型にキャストするという素晴らしいアイデアで
>>423と同じコード書いてみて
682 :デフォルトの名無しさん2011/12/11(日) 11:28:52.72
>>680
それは、Objectにキャストしないで実装できるだろw
インターフェース持たせればいい。
688 :デフォルトの名無しさん2011/12/11(日) 11:37:25.72
>>682
え?
694 :デフォルトの名無しさん2011/12/11(日) 11:48:23.06
>>682
Scala の implicit def なら分かるが、インターフェース?
何を言ってるんだ?
424 :デフォルトの名無しさん2011/12/07(水) 10:53:16.29
374だが、読解力と論理展開に呆れてるから今後スルーするよ。でも不愉快だよね。
374に注意書きで:
動的は型チェックを行う場所(関数)を熟考して決めていく必要がある。
(すべての関数で型チェックをする必要も無いので。)当然、最適化も手動に
なってくるから、こちらも静的よりは頭を使う。
--
と書いてるのにな。静的は静的で頭を使うから 静的よりか〜というのは撤回
しておくよ。HaskellとLispは熟考が必要な言語だし。
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のコードでは当たり前に出てくるパターンだわな
なんか一人がんばってる人いるみたいだけど
433 :デフォルトの名無しさん2011/12/07(水) 11:18:09.26
>>430
擬似コードをかいてるだけだから。突っ込みどころがあるなら、
貴方が良いと思うコードを示すといいんですよ。じゃあ見せておくれ。
>>429も触れてるけど、あのコードはListの中に、いろんな型をいれる
のが普通のLispのものからだよ。
もし、Listの中に1つの型しかないようなデータならばあのような
形にはしないだろうが、いろんな物が入ってる場合は、柔軟に対処する
方法かな。
ここではオブジェクト指向や多態性のことは擬似コードでは想定してないよ。
431 :デフォルトの名無しさん2011/12/07(水) 11:12:47.30
SICP読んだなら、せめてtype discriminationとpattern matchingとconditional executionの区別ぐらいはつくようになれよw
434 :デフォルトの名無しさん2011/12/07(水) 11:19:52.08
>>431
単に言語のレベルで直和型やパターンマッチを提供しないLispでそれと同じことを
やろうと思ったら実行時の条件分岐になるって話じゃねーのか?
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を使えばいいよ
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 で調べてるんだよね
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だらけだろうな
それを動的型付けの欠点と言うのはアサッテだが
450 :デフォルトの名無しさん2011/12/08(木) 11:07:58.44
twitterは技術力がある方の会社だと思ってたんだがちゃうの?
もっとも動的言語はMT車みたいなもんだからな。
451 :デフォルトの名無しさん2011/12/08(木) 11:21:56.70
>>450
技術力の問題ってより、大規模開発の特性ってことじゃないの
amazonのコードベースも糞の山みたいに言われてたと思う

現実に世界規模のサービスを動かしている人たちの言うことだから、少なくとも
2chの名無しの言うことよりは説得力がある
455 :デフォルトの名無しさん2011/12/08(木) 12:37:00.62
>>450
うんそれはわかってるよ。

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

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

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

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

ScalaからJavaに戻した途端のあの叩きようを見てマジ引いたわ
467 :デフォルトの名無しさん2011/12/08(木) 19:03:50.27
>>462
英語のメーリングリストとか、フォーラムは別にそんな感じは無くて、どっちかと言うと「事実が勝つ」って感じだけどな。
排外的って例えばどこ?
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# を使えるやつはドカタではないとか。


何人のプログラマをプロジェクトに従事させるか知らないけれど、
経験者が集まらないか集めても高いとかじゃないかと。
468 :デフォルトの名無しさん2011/12/08(木) 20:48:16.46
>>466
ただ向上心という問題だけだろうか?名古屋みたいな土地なら岡村は
増えそうだが。周りにおらんだろ?
469 :デフォルトの名無しさん2011/12/08(木) 23:00:44.63
関数型の知識なんて木構造に対するmapとfilterが書けるくらいで十分
491 :デフォルトの名無しさん2011/12/09(金) 07:51:49.10
>>469 FizzBuzzすら満足に書けない土方が多いのに……
関数型が普及しないわけだ
496 :デフォルトの名無しさん2011/12/09(金) 11:17:35.99
>>491
思い込みで話してませんか? ほんとにいるんだろうか?
現場でFizzBuzz書けない奴って。
472 :デフォルトの名無しさん2011/12/09(金) 00:20:40.43
C#でDynamicJSONを使ってみて、動的も静的も偏りすぎ、大事なのはバランス感覚だと悟った
473 :デフォルトの名無しさん2011/12/09(金) 00:24:19.73
でも動的型付け言語だと、バランスを取ること
つまり静的と動的を両方使うことができないんだよな。
484 :デフォルトの名無しさん2011/12/09(金) 06:00:29.77
>>473
つ 型注釈
つ 動的型検査
486 :デフォルトの名無しさん2011/12/09(金) 06:06:08.63
>>473
両方を満たせないのは静的型付け言語でしょ。
動的型付け言語は型注釈でコンパイル時検査も実行時検査も出来る。
でも静的型付け言語ではヘテロなオブジェクトを作れない。
476 :デフォルトの名無しさん2011/12/09(金) 02:13:09.05
動的型なら組んでる時は常に型を意識する羽目になるから、
「ミスするやつはドカタ(キリ」とか思ってる馬鹿でもなきゃ、
堅牢性が必要な部分の界面では素直にis、has使うと思うんだけど。
478 :デフォルトの名無しさん2011/12/09(金) 02:55:33.19
>>477
「全部」には入れないまでも、堅牢性が必要な場面の界面ではやる必要がある、
ということで、>>476の言っていることと別に矛盾はしないのでは

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

普通に考えれば界面が限定されていればチェックが必要なコードも
限定されるはずだけれども
twitterで型チェックだらけ、とかいうのは、要は界面の面積がものすごく大きいって
ことだろう
kernelの例でいうと本来の意味での界面はシステムコールになるけれども
多数の開発者で分担して作っている大規模システムでは、他の開発者がある意味で
信用できずに、システム内部で他の奴が作ってる部分との間にも
(バグと戦うために)結局界面というものが必要になってくる
twitterの話というのは、そういうことかと思った
481 :4772011/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にしたのかどうかとは別次元の話
485 :デフォルトの名無しさん2011/12/09(金) 06:02:26.25
>>482
おまえの質問が馬鹿避けに引っ掛かったことに気付け馬鹿
487 :デフォルトの名無しさん2011/12/09(金) 06:09:58.38
>>485
で、どうやってやるの?
495 :デフォルトの名無しさん2011/12/09(金) 10:51:29.39
>>487
型注釈でもいいし、多態で分岐してもいいし、例外捕まえてもいいし、、、

むしろ1つも思い付かないほうが不思議だ
517 :デフォルトの名無しさん2011/12/09(金) 15:10:05.91
>>495
>型注釈でもいいし
その注釈を静的にコード検証するために使うのか実行時に型チェックするために
使うのかどちらか知らないけど、後者だったら結局内部的にはinstanceofの類を
使って判定されるじゃん。表に見えないだけで単なるシンタックスシュガー。

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

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

カチッとした部分を書くのにinstanseOfの類を使うなと言うのが無理筋。
これですむのであればとっとと使って次の作業に進んだ方が良い。
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でま同じだろ馬鹿。

馬鹿避けなんて簡単だ、お前を配員しなければいい。
525 :デフォルトの名無しさん2011/12/09(金) 16:50:02.41
>>521
だから「後者なら」と限定をつけているのにその辺りは読まないんだね。

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

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

>>523
破壊的な処理ならその処理を呼び出す前に値の検証をするのが当然。
で、その検証はどうやるのさ。
規約で特定の型を要求しているようなAPIを呼び出す場合とか。
532 :デフォルトの名無しさん2011/12/09(金) 18:18:00.42
>>527は「破壊的な処理の途中で得られた値への」って書いてあるのが読めないようだ。
コードの読解力も推して知るべしだな...
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の類を使いましょうって話
なんだけれどもな。
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
書いてない文字が読めちゃう人でつか?
477 :デフォルトの名無しさん2011/12/09(金) 02:35:58.51
Cだって静的型付けだけど
ポインタにぬるぽが来たら問題起こすだろ
そのためにポインタを引数にとる関数の全部に
ぬるぽチェック入れてたらオーバーヘッドだらけになるからやらない
動的型付けで引数チェックいちいちしないのもそれと同じ
480 :デフォルトの名無しさん2011/12/09(金) 03:16:03.20
Cでnullチェックしないことが多いのは、JavaやC#みたいな言語と違って
そんなことをやる意味がほとんどないからだろう

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

なので、Cで引数として与えられたポインタが単にぬるぽかどうか確認するだけでは
屁の役にもたたず、何の意味もない
493 :デフォルトの名無しさん2011/12/09(金) 08:50:19.78
>>480
0/1 でしか考えられない、典型的な馬鹿乙。
488 :デフォルトの名無しさん2011/12/09(金) 06:29:10.94
〜もできる、〜もできる、と並べたてても、たった一つの「しないこともできる」が
すべてを台無しにするパターンじゃないのかな。
まあたった一つじゃないんだけども。
490 :デフォルトの名無しさん2011/12/09(金) 07:39:27.00
動的型付けの言語はプログラマ性善説に頭からどっぷり漬かって安穏としている。
静的型付けの言語はプログラマ性悪説に凝り固まって奪える限りの自由を奪う。


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

今の関数型言語が普及しない事を嘆いているヒマがあれば土方でも使える
関数型言語の設計でも考えれば良いのにね。
動的型は土方には使えないとか宣っている連中も似たようなものだ。
498 :デフォルトの名無しさん2011/12/09(金) 11:28:13.67
動的型付けの弱点はインテリセンス等の開発サポートツールの作成のしようが無い所だろうな。
性悪とか性善とか正直どうでもいいし気にしないけれど
重機あるのにノミとトンカチでトンネル掘るような作業をするのには正直耐えられない。
501 :デフォルトの名無しさん2011/12/09(金) 11:33:14.38
>>499
きついだろうけど、引数の省略ってあまり使わないから。

ちなみに、>>498 は単なる IDE 依存症の馬鹿。
499 :デフォルトの名無しさん2011/12/09(金) 11:29:55.28
引数の省略もインテリセンスにはきついんじゃないのか
C++は性的暴行
502 :デフォルトの名無しさん2011/12/09(金) 11:33:20.99
>>499
引数省略は障害にならないようです、C#は見事に問題なし。
インテリセンス以外にも、リファクタリングツールやテストツールも型無しは地獄だね。
500 :デフォルトの名無しさん2011/12/09(金) 11:31:16.72
開発サポートツールの作成のしようが無い
あるいは物凄く困難になって実質存在しないか不完全な言語も嫌い
動的型付けも嫌いだけれどincludeやC言語系defineなんかは最悪だから全滅して欲しい
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使わない俺カッコイー系の爺さん、仕事の邪魔だから会社やめてくれ
お前の所で何時もスケジュールが滞っているんだよ
507 :デフォルトの名無しさん2011/12/09(金) 12:29:21.14
で、IDEの機能の多くは動的型付け言語が発祥だね、
っていつもの話にループするわけだ。

ドカチンは進歩しねえなw
516 :デフォルトの名無しさん2011/12/09(金) 15:03:29.07
>>507
IDE自体が現在でも、動的機能の塊として動いてるからなあ。
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
自宅警備員です
541 :デフォルトの名無しさん2011/12/09(金) 20:07:48.76
>>510
これにまともに反論できるやつ居ないのかよ
543 :デフォルトの名無しさん2011/12/09(金) 20:42:49.25
>>541
> COBOLやFlex/as3プログラマーが定時退社で月給150万円もらってる

反論する価値もないと思うが。
514 :デフォルトの名無しさん2011/12/09(金) 14:42:29.61
動的型付けでも型注釈のある言語はそれを大事なところで大いに使ってもらえば
良いと思うのだけれども、それでも型消去されたリストやmapしか持っていない
ようであれば片手落ちだと思う。
515 :デフォルトの名無しさん2011/12/09(金) 14:58:54.94
>>514
人権団体によって使用禁止にされた表現を含んでいます。
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
524 :デフォルトの名無しさん2011/12/09(金) 16:43:29.24
518でどれだけ釣れるかと思ったが二人か。この二人って
図星だったんだろうな。気の毒。

ということで程度が低いと思った"イデ"の話は別の所でやってくれ。
526 :デフォルトの名無しさん2011/12/09(金) 16:58:34.13
負けたら「釣りだったんだよ!」でOK。
ここ試験に出るからなっ!
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と同じ。
さぁ型の判定をしないで、予期せぬ型が渡ってくることをどう防ぐんだよオラオラ
って流れなのか?
533 :デフォルトの名無しさん2011/12/09(金) 18:20:09.06
>>531
そう。
彼は多態による分類とクラス階層による分類の違いが解らないからしい。
542 :デフォルトの名無しさん2011/12/09(金) 20:13:30.41
俺は動的言語ならとことん動的にいくなあ
ベストエフォートが通じない場面じゃそもそも使わん
で、そんな俺がRubyでしばしばやる方法は…

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

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

んで、その後に書いた関数の引数チェックなどは
引数を始めて使用する際にto○○を呼びつつ使用
550 :デフォルトの名無しさん2011/12/09(金) 21:44:13.56
instanceof なしでどうやって引数チェックするんだよ!

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

普通にその通りだと思うけど、アノテーションでもメソッド叩くのでも例外処理でも
処理できないような引数チェックの具体例ぷりーず!
554 :デフォルトの名無しさん2011/12/09(金) 23:20:21.55
>>550
う〜ん・・・

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

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

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

それでも多態とか例外で頑張るのかなぁ・・・
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を直書きするのは
下策中の下策だと何度も指摘されていますよね?
564 :デフォルトの名無しさん2011/12/10(土) 09:37:00.08
>>561
では>>554の例に対するベターな解法よろしく。
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ね。
572 :デフォルトの名無しさん2011/12/10(土) 17:17:58.42
>>569
自分へのレスは全部同一人物が書いたと思い込むタイプの人?
573 :デフォルトの名無しさん2011/12/10(土) 17:23:38.43
>>572
どうしてそう思うの?
568がそもそもどういう流れで>>554が出てきたのか話の繋がりを読めていないか
読めていてもいささか理不尽なことになっているので、親切にわざわざ要点の引用
までして話の経緯を示したのに。
582 :デフォルトの名無しさん2011/12/10(土) 17:44:32.40
>>573
「なんじゃそりゃ。
つまり「動的型でinstanceofが有効な場面」は存在するしそういう場合は
instanceofを使えば良いって事でFAね。 」

↑これが「経緯を説明」なのか?
本気でそう思っているのなら、プログラミング言語以前の言語教育の問題だなw
585 :デフォルトの名無しさん2011/12/10(土) 17:48:20.84
>>582
そうね。次回からはもっと丁寧に書くよ。ちなみに、

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

に対する反論とかはない?
587 :デフォルトの名無しさん2011/12/10(土) 17:49:28.11
>>585
反論以前に皆に呆れられてることに気付けよ。マジで。
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万のドカタなんだから。
593 :デフォルトの名無しさん2011/12/10(土) 20:18:06.40
>>591
やっぱり、そういうことにしないと
気がすまないの?w
552 :デフォルトの名無しさん2011/12/09(金) 21:58:57.44
静的型付け言語の発想は簡単な部分の開発を
型に押し込めたコーディングにしてしまうから
開発がつまらなくなる。

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

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


instanceof での分岐と単純な多態って、
人間が書くはずだったコードをコンピュータに書かせているだけのような気がしてしまう。
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が教えてくれたから
563 :デフォルトの名無しさん2011/12/10(土) 09:35:11.08
型無し言語の自由度はある種アセンブラの自由度と似た所がある
柔軟性は肯定できるが、その柔軟性が生産性を阻害しているから制限を加えようとしたのに先祖帰りした印象。
565 :デフォルトの名無しさん2011/12/10(土) 10:55:38.34
下っ端に自由なんていらん。
自由が欲しければ実力をつけろ。
566 :デフォルトの名無しさん2011/12/10(土) 11:12:38.25
メソッドを呼ぶ前に引数の型チェックなんてしたら
メソッドを呼びだしを行ってる変数で多態できなくなるじゃん
570 :デフォルトの名無しさん2011/12/10(土) 17:05:36.52
動的型付け言語ってさ
メソッドに想定してない型のオブジェクト渡したら
どうなるの?
576 :デフォルトの名無しさん2011/12/10(土) 17:31:06.32
>>570
引数としてdict型を期待しているメソッドが、
そのメソッドの中でget()メソッドだけ使っているなら、
get()メソッドを独自の実装した型の値を渡しても、ちゃんと動くよ。

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

だからクラス階層やインターフェイス型の宣言に縛られることなく、
メソッドを書いた人が期待した型以外の型でも、そのメソッドの要求さえ満たせば
ちゃんと動作するよ。
578 :デフォルトの名無しさん2011/12/10(土) 17:38:36.88
>>576
それは都合のいい例だけど、
都合の悪い例では、中途半端に動くよね?

たとえばメソッドの中でfooとbarを使っているけど、
barしか実装してない独自の型を渡した時。
586 :デフォルトの名無しさん2011/12/10(土) 17:48:39.10
>>578
どんな言語でも、お前みたいなクソ馬鹿野郎がバグ仕込めば動かなくなるが?
604 :デフォルトの名無しさん2011/12/11(日) 01:15:16.70
>>597
>通常と異なる型の値を渡す場合のテストは
>通常と異なる型の値を渡すコードのテストで十分

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

って書いてるんだから型で精査したら駄目なんじゃないの?
571 :デフォルトの名無しさん2011/12/10(土) 17:12:18.15
そのメソッド内でオブジェクトのメソッドとか呼ぼうとしたらそんなメソッドねーよexceptionが飛ぶ
たまたま同名のメソッドとか持ってたら動いてるけど挙動がおかしいみたいになる可能性もある
574 :デフォルトの名無しさん2011/12/10(土) 17:24:26.40
>>571
その場合ユニットテストはどうするんですか?

もしかして、正常なオブジェクトを渡した時だけしかテストしないの?
594 :デフォルトの名無しさん2011/12/10(土) 20:21:01.82
>>574
動的言語で引数に間違ったオブジェクトを入れたら
エラーにすればいいじゃん。

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

ま、普通に静的言語を使ったほうがいいと思うけどね。
597 :デフォルトの名無しさん2011/12/10(土) 22:31:47.03
>>574
通常と異なる型の値を渡す場合のテストは
通常と異なる型の値を渡すコードのテストで十分

おまえはfinalでないクラスを引数の型にしたとき
どうやってテストするんだい?
598 :デフォルトの名無しさん2011/12/10(土) 22:33:53.18
>>594
そうだね、
型のチェックを決め打ちで直書きするようなバッドプラクティスをするような人は
素直にJavaでも使っていればいいのでは?
正直、あなたのようなダメコーダーが混ざると品質が落ちて迷惑だから、
ダメコーダーは全員Java使っていて欲しいと思う。
600 :デフォルトの名無しさん2011/12/10(土) 23:46:58.92
>>598
今はダメコーダー率が高いのはPHP。あとはやっぱりMS系の言語。
Javaは最近50万強でそれなりの人が来る。
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

内にも外にも無能なのは今の日本の政治は朝鮮が行っているから
帰化人だらけの野田内閣をみてみろよ
577 :デフォルトの名無しさん2011/12/10(土) 17:37:23.28
> だからクラス階層やインターフェイス型の宣言に縛られることなく、

これが飲み込めてないから、動的型付け言語でinstanceofを使いたいって思うんだろうな
nominalな型システムでもないのに、多態を継承関係にあるクラスだけに限定するなんて馬鹿馬鹿しい
588 :デフォルトの名無しさん2011/12/10(土) 17:52:32.89
>>577
そゆこと。staticでnominalな型しか理解できないのだろう。
ましてやdynamic typingはstructuralなtype systemよりも
遥かに柔軟だということ理解できないのだろう。

おそらく、Javaにはない概念は理解できないということ。
つまり、典型的なドカタ。
579 :デフォルトの名無しさん2011/12/10(土) 17:40:42.42
> 動的型付け言語の場合にはそのメソッドで使うメソッドだけサポートすればいい。

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

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

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

って書いてあるんだぜ。

だから毎回ライブラリがアップデートしたら
メソッドの仕様を確認しないといけない。
584 :デフォルトの名無しさん2011/12/10(土) 17:47:27.57
>>579
仕様書なんてなくてもIDEがちゃんと教えてくれるよ。
581 :5802011/12/10(土) 17:42:38.49
もちろん目視で。
583 :デフォルトの名無しさん2011/12/10(土) 17:46:51.37
>>581
なあ、静的厨って、みんなお前みたいな馬鹿なのか?

IDEの機能の多くが動的型言語から出てきたことの意味がまるで分かってないな。
592 :デフォルトの名無しさん2011/12/10(土) 18:01:16.69
instanceofを使いたくなるような状況になったら、
動的型のコードの設計として間違ってるサインだわな。

なんか、一人だけムキになってる人がいるみたいだけど、
彼はJavaでも書いてれば幸せなんじゃないの?
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
花王の社長は反日○○人
599 :デフォルトの名無しさん2011/12/10(土) 23:12:36.86
動的型付け言語は効率が悪い => 実はJavaと同じように設計・コーディングしてました

この流れは酷いw
601 :デフォルトの名無しさん2011/12/10(土) 23:48:23.92
というような話も含めてできれば面白いんだけど。
「コーダー」を馬鹿にするけど「コーダー」の経験の無い人が開発を語るなと言いたい。
602 :デフォルトの名無しさん2011/12/11(日) 00:33:27.00
コーダーでも出来るような作業を
俺は頑張ってるんだって表現したい。

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

もっと上の立場(アーキテクト)になればいいのにって思うよ。
603 :デフォルトの名無しさん2011/12/11(日) 00:53:57.43
気にすんな。 コーダーをああだこーだなんていう気はない。
605 :デフォルトの名無しさん2011/12/11(日) 01:30:19.64
単にメソッド名が同じで挙動が意図したものと違うメソッドを持つオブジェクトを渡して
ちゃんと変な挙動になるかどうかをテストすれば完璧じゃねw
616 :デフォルトの名無しさん2011/12/11(日) 07:16:09.99
>>605
静的型でも、ちゃんと継承して変な挙動のメソッドを実装したクラス作って
そいつのインスタンスを渡したときに
ちゃんと変な挙動になるかどうかをテストすれば完璧だね
606 :デフォルトの名無しさん2011/12/11(日) 01:30:48.00
難しいよね。普通に考えれば変な型を渡したらエラーになるべき。
それも一切の副作用なしで。

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

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

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

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

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

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

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

動的型付け言語でもちゃんと型チェックすればいいんだけど、
そうすると静的型付け言語よりも面倒になるから意味がなくなる。
614 :デフォルトの名無しさん2011/12/11(日) 05:43:55.92
>>607
> そうすると静的型付け言語よりも面倒になるから

そんなことないよ。
型アノテーションの仕組みを仕込めばいいだけ。
静的型言語で動的型的なことをするほうが遥かに面倒。
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の役割分担も、柔軟に考えたほうがいい。
623 :デフォルトの名無しさん2011/12/11(日) 07:50:19.24
>>621
そういう、「〜〜すればいい」「〜〜できる」「〜〜してもいい」
というようなテクニックを、プロジェクトごとに、あるいは会社ごとに、
いちいち再発明しなければいけないというのは、非常に効率が悪い。
標準、あるいはコミュニティによるデファクトスタンダードでも構わないが、
ともかくフレームワークとして提供されていてほしい。

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

やればいい、できる、これはコスト無視の趣味グラマの発想。
ドカタにとっては時間=金なので、最初に天秤ありき。
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
間違った引数の網羅ってなんだ?
普通は正しい値だけ通すだろ。
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#でも不完全だが実装されている。
コード中に引数や戻り値があるべき条件を書いておくと
コンパイラがそのコードを抽出して必要な位置に移動する仕組み。

引数に定数を渡した場合で仕様の範囲を外していたなど、コンパイル時に明らかなミスを除去できればデバッグは楽だね。
612 :デフォルトの名無しさん2011/12/11(日) 04:06:37.19
どんな値が渡ってきても正しい値だけ通すようなチェックって数値や文字列ならいいけどクラスとかを引数の型にすると難しいだろ
613 :デフォルトの名無しさん2011/12/11(日) 04:56:00.09
頭ん中でこういうクラスのオブジェクトが来るだろうと決めうちしてゴリゴリ
書いているだけなのが殆どでしょ。
想定してしたシグネチャのメソッドが無くても勝手に例外投げるから良いだろ、
みたいな感じ。
615 :デフォルトの名無しさん2011/12/11(日) 05:45:32.43
>>613
そうそう、Javaプログラマはシグネチャさえ合ってればいいと
思ってるからコードの品質が低いよね。
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
「無ければ作る」と「無いから使わない」の違いだな。

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

仕事では、「美しい」というのはユーザにとっての価値にならない。
「金」のためのプログラミングなら、汚くても車輪が揃っている言語の方がよい。
「金」と「楽しさ」と両方いいとこ取りしようとするのは感心しない。
632 :デフォルトの名無しさん2011/12/11(日) 08:35:16.45
>>629
> 仕事では、「美しい」というのはユーザにとっての価値にならない。

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

デコレータ系のようなメタプログラミングライブラリや
コードチェッカー系やプリプロセッサ系のツールは
蓄積するごとに質の高い仕事ができるようになる。
趣味でやってるならともかく、仕事でプログラミングするんなら
当然皆やってることだろ。ドカタ以外は。
633 :デフォルトの名無しさん2011/12/11(日) 08:36:24.99
>>632
xUnit とか自分の組織で再実装してますか?そういう問題なのですが。
636 :デフォルトの名無しさん2011/12/11(日) 08:38:14.73
>>633
なんでそこで再発明の話になるわけ?どこまで馬鹿なん?
639 :デフォルトの名無しさん2011/12/11(日) 08:40:30.58
>>629
俺は好きな言語でプロトタイプ開発&フレームワーク開発&仕様決定をやって
すごく楽しいのに、下っ端連中は給料1/3でJava使わされてるわ
641 :デフォルトの名無しさん2011/12/11(日) 08:42:27.66
>>639
>プロトタイプ開発&フレームワーク開発&仕様決定

その好きな言語が動的型付け言語なら、スレタイどおりで語るに落ちたというところだが。
645 :デフォルトの名無しさん2011/12/11(日) 08:50:36.00
>>641
フレームワークは大規模開発ではないと言いたい?
どこまでユトリなんだよ・・・
651 :デフォルトの名無しさん2011/12/11(日) 08:54:39.65
>>645
フレームワークは小規模であるべき。
オレオレフレームワークが巨大になるのは大企業でありがちだが、それは駄目な例。
660 :デフォルトの名無しさん2011/12/11(日) 09:00:20.42
>>651
Hadoopとかもクソなんですか?
631 :デフォルトの名無しさん2011/12/11(日) 08:23:34.10
>型アノテーションをコメントに埋め込んで、
>IDEが設定に応じてそれを関数本体部に埋め直してもいい。

こういうの、あるの?
634 :デフォルトの名無しさん2011/12/11(日) 08:37:38.27
Javaドカタはエクセルの仕様書に書いてあることをJavaの文法に書き直すだけ。

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

この基本理念を理解できていない人?
638 :デフォルトの名無しさん2011/12/11(日) 08:39:58.67
>>635
そうだよね、動的型付け言語では良いプラクティスを支援する
ちょっとしたコードを共有する習慣があるのは、普通のことだよね。

Javaドカタには理解できないだろうけど。
637 :デフォルトの名無しさん2011/12/11(日) 08:39:42.43
どのようなモノがOSSとして共有されているかというところに
各言語が何を目指しているかの指向性が出るのであって、

それが、Javaは比較的、ビジネスを指向している。
動的型付け言語はJavaに比べると、そうではない。
比較のために言えば、関数型言語とか論外。
640 :デフォルトの名無しさん2011/12/11(日) 08:41:04.76
>型アノテーションをコメントに埋め込んで、
>IDEが設定に応じてそれを関数本体部に埋め直してもいい。

これ共有されてますか?具体例を無視しないで教えて。
643 :デフォルトの名無しさん2011/12/11(日) 08:49:10.05
>>640
さあ、他人はどうか知らんけど、オレは10年前から愛用してるよ。

コメントに検査コードを埋め込んで、それを実行するというアイデア自体は昔からある。
昔はCで行われていたし、
Eiffelの表明検査のON/OFFもコンパイラが同じことしてる。
他にも関数や手続きの冒頭のコメントに検査コードを埋めておくことは
結構多くの言語で実践されているプラクティスだと思うが?
644 :デフォルトの名無しさん2011/12/11(日) 08:50:21.35
>>643
それを何故公開しないのですか?
648 :デフォルトの名無しさん2011/12/11(日) 08:51:39.34
>>644
キミはどんなツールを公開しているんだい?
他人にクレクレ言ってばかりいないで、

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

 考 え て み ろ よ 。
652 :デフォルトの名無しさん2011/12/11(日) 08:55:33.79
>>648

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

というの発想をしなければ使えない言語は仕事では使えない。
659 :デフォルトの名無しさん2011/12/11(日) 08:58:17.30
>>652
「仕事」の前に「ドカチン」が抜けてますよ!
642 :デフォルトの名無しさん2011/12/11(日) 08:42:57.83
動的型付け言語で、そこまでを素早くやって、下っ端連中がJavaで大規模開発するということだろう。
647 :デフォルトの名無しさん2011/12/11(日) 08:51:03.09
てか、給料の話なら動的型付け言語を使う人の方が高いでしょう。
動的型付け言語の方が設計段階でのプロトタイピングといった
軽さ、素早さの求められる作業に向いていて、
上流工程の方が給料が高いという慣習と相関があるからですね。

大規模小規模という話とは関係がないのでは、
というかむしろ、動的型付け言語を使う人の方が給料が高いというのは、
動的型付け言語が小規模開発向けだということの証左ですよ。
給料の安い下流工程の方が大規模になるのだから。
650 :デフォルトの名無しさん2011/12/11(日) 08:52:52.98
>>647
うわ、わかりやすいドカタ思考w

上流とか下流とか関係ねーよ
質の高い仕事をしたら高い工賃をとれる
それだけの話
653 :デフォルトの名無しさん2011/12/11(日) 08:56:27.92
>>650
金の話なら、自分はプログラムを書かないので結構給料は高い。
658 :デフォルトの名無しさん2011/12/11(日) 08:57:27.91
>>653
なるほど、プログラマじゃないから動的型付けの良さがわからないのか。
664 :デフォルトの名無しさん2011/12/11(日) 09:10:53.19
>>658
自分でもコード書く仕事してる連中と、
下っ端率いるのが仕事の牢名主では
言語に対する評価軸が違うのは当然
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
テストツールの類は最低でもチーム内では共有されていないと意味ないしな。
661 :デフォルトの名無しさん2011/12/11(日) 09:01:35.96
個人的には、フィールドや関数のシグネチチャに const 修飾子を書けない言語は恐い。
662 :デフォルトの名無しさん2011/12/11(日) 09:04:37.50
>>661
関数型言語でも使ってろよ、書くまでも無く問答無用で全部constだw
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) の実行をエラーでも例外でもいいので弾いてほしい。
型とは無関係。
663 :デフォルトの名無しさん2011/12/11(日) 09:05:53.17
OSSとして共有されているフレームワークと企業内フレームワークを区別しないからややこしくなる。
オレオレフレームワークが巨大なのはよくない。

なぜOSSならよくてオレオレなら駄目かといえば
OSSは「〜〜を使える人」という条件を付けてもプログラマが集まるが
企業内フレームワークでそれをやるとアウトソースしにくくなるから。
667 :デフォルトの名無しさん2011/12/11(日) 09:16:30.58
>>663
本当にわかりやすいドカタ思考だな
HadoopだってHBaseだってMongoDBだって元はオレオレフレームワークだろが
668 :デフォルトの名無しさん2011/12/11(日) 09:20:33.34
>>667
そうだよ。元はね。
公開したというのが本質。
670 :デフォルトの名無しさん2011/12/11(日) 09:24:17.80
>>668
さらに補強すると公開しただけではなく公開後も生き残った選抜済みの
OSSであり、当面は死なないだろうという事も期待できるのが重要。

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

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

ドカタでなければ普通に区別できるはずだが、
どうもこのスレには区別できない人がいるらしい。
666 :デフォルトの名無しさん2011/12/11(日) 09:16:19.32
freezeの類を持っている言語なら結構実行時エラーとして弾けると思うけれども
でもスレタイとは直交したネタでもある。
669 :デフォルトの名無しさん2011/12/11(日) 09:22:47.03
>>666
俺も理論的には直交している気がするが、
今現在世の中で使われている言語、という条件をつけると直交していないと思う。
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
そういうことなら動的型付言語のほうが大規模開発に向くな。
赤の他人のオレオレクラスやオレオレインターフェースへの絶対服従を要求される静的型付言語より
柔軟に自分のコードに置き換えていける動的型付言語のほうがずっとマシ。
679 :デフォルトの名無しさん2011/12/11(日) 11:06:45.70
>>676
柔軟に自分のコードって・・・
お前、自分一人で開発してんのか?
それは小規模っていうんだぞ。


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

あと、奴隷根性は卒業しろ。絶対服従を要求される。
それはお前がやってることの立場が低いからだ。
要求する立場(アーキテクト)になれ。
678 :デフォルトの名無しさん2011/12/11(日) 11:04:05.54
型アノテーションってさ、
要するに静的型付け言語になれってことじゃないかw

静的型付け言語で動的型付け言語みたいなことをするのは簡単。
実際に出来る。Object型にキャストすればいいだけ。
685 :デフォルトの名無しさん2011/12/11(日) 11:34:12.94
>>678
動的な型を勘違いしてないか?
686 :デフォルトの名無しさん2011/12/11(日) 11:36:16.89
>>685
あってるよ。
動的な型なんて必要性は殆ど無く、
インターフェースがあれば代用可能なもの。

どうしても必要な場合ってのはまず無いが
そういう時にはキャストすれば良い。
681 :デフォルトの名無しさん2011/12/11(日) 11:25:32.11
叩き台を叩いて壊すのが専門という人はどこでも厄介なものです
683 :デフォルトの名無しさん2011/12/11(日) 11:29:39.11
「大規模なソフトウェア」と「大規模な開発」は全く違う
前者は LOC で計測される概念
後者は人数・組織数・年数で計測される概念
684 :デフォルトの名無しさん2011/12/11(日) 11:34:01.52
大規模なソフトウェアってのは殆ど無い。
なぜなら大規模なのは機能が多いだけだからだ。

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

こんな所で俺の腕の見せ所だなんて言ってるのが
動的ドカタ。単純作業を本当に単純作業にすると
腕の見せ所がなくなるから強く反対している。
687 :デフォルトの名無しさん2011/12/11(日) 11:36:49.58
動的型付は正直良くないと思うが、動的型付を理解できずにただ吠えている奴がいるので嫌な気分。
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
自演ですか?
理解できないのを誤魔化さないように。
692 :6902011/12/11(日) 11:45:03.43
>>691
違いますが。

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

叩き台を良くする人=eval 以外の「インターフェースや継承なんかで対応できないもの」を書く。
叩き台を叩いて壊す人=691
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 比が抜群に高まるということが経験的にわかっているので、
興味のあるスレッドを登録して個人的に運用中です。

マイクロソフト ワイヤレス ブルートラック マウス Arc Touch Mouse RVF-00006
マイクロソフト ワイヤレス ブルートラック マウス Arc Touch Mouse RVF-00006