15/12/15 13:23:08.06 Rib62xXq.net
オブジェクト指向は愚かな考え。排便メソッドを実装した人間クラスから美少女クラスが作れない。
URLリンク(twitter.com)
研究グループは、血管新生注において血管が伸長する際の血管内皮細胞注運動を制御するしくみを、生物学と数理モデル・
コンピュータシミュレーションを融合させた先端的な研究手法により明らかにしました。
生物は、最小の機能単位である細胞が寄り集まった多細胞体です。しかし、細胞の集まりが、組織や器官といった
秩序ある形態や構造をつくり機能するしくみはほとんど分かっていません。中でも血管は、体中の全組織に十分な
酸素や栄養源を効率よく供給するため、組織や組織の間に入り込み、血管外の環境との相互作用により、巧妙な
枝分かれ構造をとっています。
これまでに本研究グループは、新しく血管がつくられる(血管新生)際の細胞の動きに着目し、特に血管内皮細胞の
動きをリアルタイムで可視化し、定量的に捉えることを可能にしてきました。
今回さらに、血管の伸長を制御するしくみについて、細胞が自発的に自らを制御して動く過程(自律的過程)と、
隣接した細胞から適宜影響を受けて動く過程(協調的過程)がうまく共存することで、全体の動きが巧みに統制
されていることを世界に先駆けて実証しました。
興味深いことに、血管内皮細胞が前後したり、お互いに追い抜きあったりという血管新生で見られる複雑な細胞集団の
動きを制御している中枢部分は、細胞一つ一つの動き(スピードと方向性)の「確率的な変化」として十分説明できる
ことをコンピュータシミュレーションで実証しました。
URLリンク(www.jst.go.jp)
前スレ
オブジェクト指向は愚かな考え。この世は計算式
スレリンク(tech板)
2:デフォルトの名無しさん
15/12/15 13:23:59.26 Rib62xXq.net
前スレ
オブジェクト指向は愚かな考え。この世は計算式
スレリンク(tech板)
3:デフォルトの名無しさん
15/12/15 13:24:32.37 Rib62xXq.net
このスレ
オブジェクト指向は愚かな考え。この世は計算式 ★2
スレリンク(tech板)
4:デフォルトの名無しさん
15/12/15 13:24:54.73 Ln94sVRZ.net
>>1の参考
URLリンク(mysearch.ritlweb.com)
5:デフォルトの名無しさん
15/12/16 01:25:36.21 017P2otv.net
結局、Smalltalkが最強という結論でFA?
6:デフォルトの名無しさん
15/12/16 01:35:54.96 R3uzXom/.net
前スレ>>999
意味がないってことはないですよ。
動的遅延結合をモットーとするSmalltalkでは、コンパイル時間を短くするのはもちろん、
コンパイルが通らないエラーを含めてソフトウェアが動作しなくなる時間をできるだけ無くす必要があるので。
それに、エラーがでなくなるように修正するのと、スタブが生じないように修正するのとで
本質は変わらんでしょう。
あとSmalltalkはコンパイル処理も自身のプロセス内で動的に行なうしくみなので
「コンパイル時に」と「動的に」は矛盾しません。
7:デフォルトの名無しさん
15/12/16 01:55:51.94 mFWCIMTJ.net
>>5
個人的には、Smalltalkerが度々ハッスルして他の人たちが辟易してる構図に見える
系譜としてのobj-cと成功例としてのiOSが引き合いに出されると、だいたい客観的な反論が出されてSmalltalkerが黙るという構図じゃなかったかな。
8:Objective-Cの人
15/12/16 02:15:28.68 hnVuOn0r.net
? Objective-Cのメッセージングはsmalltalk由来というか
smalltalkそのまんまとは聞いてるが、俺はsmalltalk自体は
弄ったことないから知らんよ?
そもそも、Objective-Cの話に対してまともなレスは一個も返ってきてなくて
「だからマカーは!」だけしか言ってこないから(ああ、知らんのだ…)で流してるし。
9:Objective-Cの人
15/12/16 02:34:00.21 hnVuOn0r.net
動的静的もなんも、そもそもObjective-Cはインスタンスの管理に
参照カウント形式(呼んだらインスタンス内のカウンタに+1終わったら-1、0になったら誰も使ってないから解放するシステム)
を使用してるから、コンパイル時に「ここで呼んで、ここで解放して」と
ひととおりオブジェクトの生成消滅を追跡してエラー探してエラーメッセージ吐くから
定期的に言い出してる「動的だとエラーがわかんねぇだろ!」って謎の思い込み発言の意味がわからんし。
動的だと単に動的にインスタンスが他でなんとかしてる可能性があるから
コンパイル時の「ここで呼んでも居ねぇんじゃね?」が静的だと致命的エラーになるところが単に
「ここで呼んでも居ない可能性あるよね?」ってワーニングになるだけだし
ワーニング読んでプログラマーが自分で内容判断するだけだろ。
10:デフォルトの名無しさん
15/12/16 02:38:50.14 mFWCIMTJ.net
いやすまん。火種蒔きたい訳ではないのでその認識に訂正、謝罪の上で同調しておきます
個人的には、ゴールのない議論になっちゃってるのを最優先な問題、課題として提示したいw
前スレの流れだと、「ruby派ぶっ倒してやったわ」とか「ほら関数型が最強だろボケが」とか個々人が全く別種の達成感を感じているのではなかろうか。
11:Objective-Cの人
15/12/16 02:44:48.13 hnVuOn0r.net
もひとつ、考え方が違うなーと思ったのはむかし分野違いのプログラマーと話してて
え?Objective-Cのインスタンスに定義されてないメッセージ(メソッド)が送られた時?
単純にインスタンスは"そんな命令は知りません"ってただ無視してふつうに動作続けるよ?
って言ったらそれじゃバグが見つからない!とか謎の発言をして固まってたこと。
いや、やれ!って命令して反応返らないんだからすぐわかるだろうそれ。
12:デフォルトの名無しさん
15/12/16 02:53:40.58 UIvh2pdg.net
>ただ無視してふつうに動作続けるよ?
この説明だとダメだろ
13:Objective-Cの人
15/12/16 02:54:06.15 hnVuOn0r.net
>>10
だいたい途中からわざと議論にならない妙なこと書いてスレ伸ばしてる子がいるから
そういう期間は眺めてる。動的静的の理解がおかしいしあれは絡みようがない。
14:uy ◆Qawu9.2l1E
15/12/16 03:55:57.26 1rtzXOsl.net
またrubyが勝ってしまったわけね
そうだと思った
15:デフォルトの名無しさん
15/12/16 04:26:33.21 SEae+C8u.net
>>11
> いや、やれ!って命令して反応返らないんだからすぐわかるだろうそれ。
え? 「やれ!って命令して反応返らなかったら」わかると思ってるの?
反応が返るかどうかを、誰が調べてるんだよ?
命令が正しく実行されたか調べるコードを書かないと
行けないってことで、それ面倒なだけだし、それを忘れると
バグの元になるじゃん。
16:デフォルトの名無しさん
15/12/16 04:27:05.13 SEae+C8u.net
それに副作用を持つ関数は、戻り値voidだったりするしさ。
>>11はちょっと想像力が足りないみたい。
17:デフォルトの名無しさん
15/12/16 06:03:16.00 dzfkExTj.net
>>7
だーかーらー、
おまえはまず自分の無知を自覚しろってw
18:uy ◆Qawu9.2l1E
15/12/16 06:55:38.58 L2apS2Qu.net
vim scriptもメソッド見つからない時って強引に走らせ続けるんだっけ?
19:デフォルトの名無しさん
15/12/16 08:12:16.73 FTfTBK6H.net
オブジェクト指向は愚かな考え。
20:デフォルトの名無しさん
15/12/16 08:29:39.35 7uqbUkJH.net
Objective-cの記述量ほんと嫌い
21:デフォルトの名無しさん
15/12/16 08:41:12.56 fgV80IeN.net
>>15
まぁ普通はそうおもうわな
んで、Obj-Cの人としては「どうすれば良いのか知ってる」からそれが分かるといってるようだから
まずはそれ書いたらいいんじゃねーかな
たぶん、例外ははけるけど基本はそれはcatchするのではなくfinally的なレベルではけるよってだけ
だと思うけど
22:デフォルトの名無しさん
15/12/16 08:43:16.65 fgV80IeN.net
まぁでも「呼び出したのに呼ばれてないけどその後も続行する」なんてインタプリタ言語以外で
そんな動きされんの迷惑だわ
23:デフォルトの名無しさん
15/12/16 08:56:33.85 SEae+C8u.net
例外が出てるのにそれを握りつぶすのは悪いやり方だけど、
メソッドがなくても動くのは、、例外が出てるのにそれを
例外を握りつぶすのと同じ。
プログラムは書いたとおりに動くが、
書いた通りに動くことが、正解じゃない。
仕様通りに動くことが正解であり、動いているからって
仕様通りの動きでなければ、それはバグ。
言っとくけど、仕様っていうのは言語仕様じゃないぞ。
アプリの仕様だ。
24:デフォルトの名無しさん
15/12/16 09:05:12.96 fgV80IeN.net
>>23
せやね
25:デフォルトの名無しさん
15/12/16 09:28:12.04 AqyIi4A0.net
ソースコードが仕様書で、それが停止せずに動くなら
バグなんて存在しないって立場だろ
Obj-Cで素人アプリ作ってる奴ならそれでも良いじゃん
26:デフォルトの名無しさん
15/12/16 11:03:03.62 Ulco0f/2.net
仕様以外の動きはバグ?
すごいよな
そうなるとOS仕様+アプリ仕様を精査しなければ
27:デフォルトの名無しさん
15/12/16 11:17:18.63 eqSTcsSB.net
レールから外れて脱線するかもしれないが、そのままどこかへ走り去る心配はない列車と、
どこ行くかわからない自動車の違いみたいなものかと想像していたよ。
28:unrecognized selector to instance
15/12/16 11:42:30.84 etXhzojx.net
>>11
Objective-Cは、存在しないメソッド呼んだら落ちるがな。
いったいどんな環境の話だよ。
29:デフォルトの名無しさん
15/12/16 11:43:49.25 v8L8DVNA.net
人間に飛べと命令すると地球が爆発する言語
30:デフォルトの名無しさん
15/12/16 12:09:43.96 SEae+C8u.net
>>29
それ何のたとえ?w
センスが無いね
31:デフォルトの名無しさん
15/12/16 14:50:10.61 nvDs2EAX.net
オブジェクト指向って肥大化すると
あるインスタンスのメソッドを使う際に、
そのインスタンスのプロパティのプロパティのプロパティのプロパティのプロパティが影響したりしてデバッグが大変だったりするよね。
32:デフォルトの名無しさん
15/12/16 14:53:17.28 eqSTcsSB.net
ひでぶ
33:デフォルトの名無しさん
15/12/16 14:56:01.55 etXhzojx.net
>>31
そうならないように作る必要があるね。
その例だと、そのプロパティのオブジェクトに外からは直接さわれないようにするとか、
1階層で断ち切る必要がある。
34:デフォルトの名無しさん
15/12/16 21:06:02.90 uNQnNzO9.net
>>28
Obj-Cの動作だと存在しないのを呼んだから落ちるんじゃなくて
存在しないメソッドを呼んでも応答しないから
返り値がnullで"呼んだクラスが"処理できなくて落ちてるんだろう
35:デフォルトの名無しさん
15/12/16 21:43:54.69 u9Ia4Qec.net
Obj-Cは良いところはCの上位互換なところで、
悪いところはSmalltalkに影響を受けてるところ
36:デフォルトの名無しさん
15/12/16 22:06:58.45 6HcXJhed.net
それが本当ならSwiftを「Objective-c without c」と喧伝してたApple最悪やな
37:デフォルトの名無しさん
15/12/16 22:47:07.63 DoMVf2Rv.net
Smalltalkerには皆こっぴどく虐められてんだな…
38:デフォルトの名無しさん
15/12/16 23:01:47.94 etXhzojx.net
>>34
メッセージの送信側オブジェクトには処理は戻らない。
ランタイムが例外投げてcatchされなければ終了。
39:デフォルトの名無しさん
15/12/16 23:14:18.71 zYgiBPWI.net
「静的型付け」言語しか知らない奴に、「動的型付け」言語の話をしたって分かるはずがないじゃん
例えるなら、野球の試合をサッカーのルールで解説するようなもんだ
40:デフォルトの名無しさん
15/12/17 00:44:59.09 gwKZvSId.net
>>38
それはC++やJavaやRubyを含めた
オブジェクト指向言語の一般的な動きだ。
Objective-C特有の話をしなさいよ
41:デフォルトの名無しさん
15/12/17 00:45:32.82 Kcx2I8yF.net
>>40
同じだっつうのw
42:デフォルトの名無しさん
15/12/17 00:46:15.76 gwKZvSId.net
>>39
> 「静的型付け」言語しか知らない奴に、「動的型付け」言語の話をしたって分かるはずがないじゃん
なるほど。動的型付け言語の話しか知らない奴に
静的型付けの話をしてもわからないっていいたいわけだなw
43:デフォルトの名無しさん
15/12/17 00:46:47.66 gwKZvSId.net
>>41
Objective-Cは他のオブジェクト指向言語よりも凄いって話じゃなかったのか?
44:デフォルトの名無しさん
15/12/17 00:47:42.76 Kcx2I8yF.net
>>43
誰が凄いって言ったんだ?
45:デフォルトの名無しさん
15/12/17 01:01:08.15 9iUNReL+.net
>>33
プロパティとなっているオブジェクトの状態の数だけテストしないとならないのは辛い
46:デフォルトの名無しさん
15/12/17 01:03:31.69 Kcx2I8yF.net
>>45
オブジェクトごとにテストすれば良くね?
47:デフォルトの名無しさん
15/12/17 01:04:21.44 Z0rIjNHq.net
「動的型付け」言語を使ってる人は大概「静的型付け」言語をつかったことがあるだろ。
その逆は真ならざるが
48:デフォルトの名無しさん
15/12/17 01:04:26.64 gwKZvSId.net
>>45
関数型であっても、データはデータベースに保存するし、
そのデータ=オブジェクトの状態なので結局テストが大変なのは同じ。
49:デフォルトの名無しさん
15/12/17 01:07:33.17 9iUNReL+.net
>>35-36
1986年
ブラッド・コックスとトム・ラブがObjective-Cを作り、「この言語は
50:Cのメモリ安全性とSmalltalkの高速性を合わせたものだ」と宣言する。 現代の歴史家は2人が失読症ではないかと疑っている。 Smalltalkが人気なさすぎたのでCのライブラリを使えるようにしたんだろうな。
51:デフォルトの名無しさん
15/12/17 01:10:40.77 9iUNReL+.net
>>43
Cのライブラリを使えるようにした代償としてCの悪い部分も取り込んでしまった。
Mac使ってるプログラマも増えたことだしCを切り捨て理想型に戻りましょうという事だろうね。
52:デフォルトの名無しさん
15/12/17 01:11:22.61 9iUNReL+.net
>>48
確かに
53:デフォルトの名無しさん
15/12/17 01:19:27.22 sxT+KKiu.net
>>50
Smalltalk成分のほうが微塵も残ってない件
54:デフォルトの名無しさん
15/12/17 01:27:57.55 aNh2v0Tb.net
>>49
ネタ文章を説明なく貼るのよそうぜw
55:デフォルトの名無しさん
15/12/17 01:44:31.81 9iUNReL+.net
>>52
メソッド名の長さは残ってるだろ
56:デフォルトの名無しさん
15/12/17 02:30:11.56 FyqR5n97.net
>>53
>>49は「不完全にしておよそ正しくないプログラミング言語小史」でググりゃ全文みつかると思うけど
プログラマーなら誰でもわかる微妙に間違った説明をしてクスリとさせるのが目的のプログラマージョーク…
…っぽいナニカ(の一部)なんだよな。
1983 – ビョーン・ストラウストラップが耳にしたことのあるあらゆるものをCに詰め込んでC++を作る。
出来上がった言語はあまりに複雑であったため、プログラムは未来に送って人工知能Skynetでコンパイルする必要があった。
莫大なビルド時間を要したのである。Skynetがそのようなサービスを行っている動機は明らかでないが、
未来のスポークスパーソンは、「そんなこと気にしなくていいぜ、ベイビー」と、オーストリア訛りのある単調な口調で答えている。
Skynetは体裁を装ったバッファオーバーランに過ぎないのではないかと予想する向きもある。
とか、どー反応すりゃいいのかわからんレベルの中から抜き出して>>49張られても、アンサイクロペディアを
ソースにしてコピペしてくる奴みてるみたいなもんで…
57:デフォルトの名無しさん
15/12/17 03:26:39.43 ICf+3Sgs.net
どの方法がいいか試作し研究する視点を与えてくれる(C++系の)オブジェクト指向は素晴らしい
スモールトーク系のオブジェクト指向はゴミ
58:デフォルトの名無しさん
15/12/17 07:11:27.89 zm+NMMJN.net
「C++の設計と進化」を知ろうとしない人にはC++はクソ機能満載言語にしか見えないし
URLリンク(www.amazon.co.jp)
「Smalltalkの底を流れる設計思想」がわからんうちはSmalltalkもクソ引き籠もり環境にしか見えない
URLリンク(web.archive.org)
59:デフォルトの名無しさん
15/12/17 08:11:57.67 z5VUeQHx.net
>>42
よく気がついたな
その通りだ
>>47
君は、>>42と違って、ちょっと程度が低いようだね
60:デフォルトの名無しさん
15/12/17 12:01:03.95 BgKGnUH4.net
>>55
だいたいあってるじゃん
61:デフォルトの名無しさん
15/12/17 12:02:01.19 xmtXrbaY.net
>>58
ぼくちゃん、ようちでちゅね
62:デフォルトの名無しさん
15/12/17 14:14:39.01 Gw5Yeqz+.net
>>58
よかったでちゅね~
63:デフォルトの名無しさん
15/12/17 14:54:32.35 BhqjqAUv.net
それで、具体的にどうやるのか書かないの?これ
反応が返らないって画面眺めてりゃわかんの?
11 名前:Objective-Cの人 [sage] :2015/12/16(水) 02:44:48.13 ID:hnVuOn0r
もひとつ、考え方が違うなーと思ったのはむかし分野違いのプログラマーと話してて
え?Objective-Cのインスタンスに定義されてないメッセージ(メソッド)が送られた時?
単純にインスタンスは"そんな命令は知りません"ってただ無視してふつうに動作続けるよ?
って言ったらそれじゃバグが見つからない!とか謎の発言をして固まってたこと。
いや、やれ!って命令して反応返らないんだからすぐわかるだろうそれ。
64:デフォルトの名無しさん
15/12/17 14:56:10.94 BhqjqAUv.net
もしかして、これ?
9 名前:Objective-Cの人 [sage] :2015/12/16(水) 02:34:00.21 ID:hnVuOn0r
動的静的もなんも、そもそもObjective-Cはインスタンスの管理に
参照カウント形式(呼んだらインスタンス内のカウンタに+1終わったら-1、0になったら誰も使ってないから解放するシステム)
を使用してるから、コンパイル時に「ここで呼んで、ここで解放して」と
ひととおりオブジェクトの生成消滅を追跡してエラー探してエラーメッセージ吐くから
定期的に言い出してる「動的だとエラーがわかんねぇだろ!」って謎の思い込み発言の意味がわからんし。
動的だと単に動的にインスタンスが他でなんとかしてる可能性があるから
コンパイル時の「ここで呼んでも居ねぇんじゃね?」が静的だと致命的エラーになるところが単に
「ここで呼んでも居ない可能性あるよね?」ってワーニングになるだけだし
ワーニング読んでプログラマーが自分で内容判断するだけだろ。
65:デフォルトの名無しさん
15/12/17 15:06:11.33 Kcx2I8yF.net
>>62
だから、>>11は間違ってるの。ランタイムが例外を投げます。
あとObj-Cは、受信側のインスタンスが無い場合(nil)は、何も起きない事が保証されてる。
66:デフォルトの名無しさん
15/12/17 16:01:30.96 jTZkH1z9.net
それ便利なこともあるけど、JavaやCならセグフォで気づけるバグも気付けなかったりするよね
かといって毎回ifでチェックするか?っていう
やっぱりMaybeが至高
67:デフォルトの名無しさん
15/12/17 16:09:57.39 uUwsUuhV.net
>>64
あぁ、なんだ
やっぱ例外になるんか、分かったありがと
68:デフォルトの名無しさん
15/12/17 16:11:43.69 s5+Nn1UK.net
ポインターがnullptrのときとそれ以外のときってことのことを難しく言ってるだけだよな。
69:デフォルトの名無しさん
15/12/17 21:02:07.06 TfrmoFMM.net
>>63
> コンパイル時の「ここで呼んでも居ねぇんじゃね?」が静的だと致命的エラーになるところが単に
> 「ここで呼んでも居ない可能性あるよね?」ってワーニングになるだけだし
> ワーニング読んでプログラマーが自分で内容判断するだけだろ。
え? 静的にエラーになる(動的でもエラーになる)場所が
実機で稼働させたとき、ワーニングが出て
リリース後に、プログラマが飛んでいって修正するの?
なんで静的に見つけられなかったのさ?w
70:デフォルトの名無しさん
15/12/17 23:39:08.84 LWfeKYVc.net
動的だろうと、静的だろうと、エラーはエラーだろ
71:デフォルトの名無しさん
15/12/18 00:08:54.65 OvzannQF.net
開発中のコンパイル段階でエラーが見つかるのと
本番稼働中にエラーが見つかるのでは
影響の大きさが違いすぎるだろ?
72:デフォルトの名無しさん
15/12/18 00:13:02.71 k38RLsj8.net
>>70
ん?
コンパイルが通ったら本番稼働中にエラーは出ないのか?
ずいぶんお気楽な開発してるなぁ...
73:デフォルトの名無しさん
15/12/18 00:17:03.49 OvzannQF.net
>>71
誰もそんな事は言っていないので、
そう読めてしまうなら小学校から国語をやり直すことを勧める
74:デフォルトの名無しさん
15/12/18 00:38:27.47 k38RLsj8.net
>>72
> 開発中のコンパイル段階でエラーが見つかるのと
> 本番稼働中にエラーが見つかるのでは
> 影響の大きさが違いすぎるだろ?
どこに、コンパイル後の事が書いてるんだ?
そのまま、テストせずに本番稼働させているようにしか読めないのだが?
まさか、エスパーモードで、コンパイルの後はテストだろって事なのか?
テストするのは、動的言語でも静的言語でもやることだし、それ以前に、どこまで行っても、エラーはエラーだ
75:デフォルトの名無しさん
15/12/18 01:00:19.51 4xDk7IkO.net
え?
ビルドしたら自動でテスト走るだろ?
76:デフォルトの名無しさん
15/12/18 01:15:10.90 7Erpdy7Z.net
>>70
そのとおりだな。
>>71
> コンパイルが通ったら本番稼働中にエラーは出ないのか?
今話しているのは、他のエラーのことじゃない。
型が違うことで発生するエラーの話。
>>74
> ビルドしたら自動でテスト走るだろ?
テストっていうのはプログラマが書くんだぞ。
小人さんが勝手にテストを書いてくれるわけじゃない。
そりゃ完璧なテストがあれば、バグは一つもでることはないだろうよw
動的言語は特に、実行時に型が判断されるので、
実行するまでバグがわからない。
77:デフォルトの名無しさん
15/12/18 01:24:34.58 7Erpdy7Z.net
>>73
> テストするのは、動的言語でも静的言語でもやることだし、
確かにテストするのは、動的言語でも静的言語でもやることだが、完璧なテストっていうのはない。
テストが足りずにバグが入り込んでしまうミスをしてしまうことは有るわけで
安全策は二重、三重とある方がいい。
そもそも、他の型を入れた時にエラーになるか?っていうテストなんて書いているか?
書いていないだろう? それはテストしてないってことだよ。
引数に想定以外の型が入ることがありえないテストも書いてるわけないな。
ソフトウェアの全部の部分を調べて、引数すべてが正しいことを調べる方法がない。
やってるのは、ある引数や変数に想定通りの型を入れた時に想定通りの動きをする。
というテストだけだろう? 不正な型がはいることがないことを保証するテストは書けないんだよ。
78:デフォルトの名無しさん
15/12/18 01:40:18.80 VJfWDduP.net
>>75
> テストっていうのはプログラマが書くんだぞ。
> 小人さんが勝手にテストを書いてくれるわけじゃない。
前時代的なやり方に囚われているお前が>>74におちょくられてるだけだよwww
79:デフォルトの名無しさん
15/12/18 01:42:15.57 7Erpdy7Z.net
>>77
? 何か反論を期待したのだが、
それで何が前時代的なのかの説明すらないのか?
少しは内容があることを言えよw
80:デフォルトの名無しさん
15/12/18 02:36:11.32 7Erpdy7Z.net
やっぱりだんまりかw
ついでだからもう一回重要な点を言っておくか。
変数に想定した型のみが入るようにすることはできる。
変数ごとに、この型以外が入ってきたらエラーにすればいいだけ。
それを動的型でやるのはナンセンスだよなw
で、もっと重要なのは、変数に想定した型以外を入れようとする行為(バグ)
例えば、関数の引数に(バグ)で不正な型を入れて呼び出すコード。
これを書いてしまうことをテストで検出することは出来ない。
ややこしいだろうから簡潔に言うと
・不正な型が入ってきたらエラーにする・・・可能
・不正な型を入れようとする・・・動的では検出不可能
動的型では入ってきた後にエラーにすることはできるが、入れようとすることを防ぐことは出来ない。
そしてこれをテストで検出することも出来ない。別の言い方をすると前者は単体テストの範疇だが、
後者は結合テストの範疇だからだ。結合テストの一部を型システムはテストできる。
81:デフォルトの名無しさん
15/12/18 02:51:26.86 M9A20KwY.net
全部が全部、引数の型が限定されてるわけでも無いしな。
汎用型を使うものもある。要はvoid*だ。
82:デフォルトの名無しさん
15/12/18 03:08:35.75 Y0b/Op+d.net
>>78
システムを修正するたびに手作業でテストしてんの?ビルド時に自動テストしろよwww
83:デフォルトの名無しさん
15/12/18 03:13:52.32 7Erpdy7Z.net
>>81
え? 誰が自動テストしてないって言ってるんだ?
ん~?もしかして自動テストのテスト内容っていうのは
プログラマが書いているって言うことの意味がわかってないの?
そう考えると辻褄が合うからそうなんだろうな。
84:uy ◆Qawu9.2l1E
15/12/18 04:10:27.24 LS3OaJlp.net
ジャップイライラw
85:デフォルトの名無しさん
15/12/18 05:19:05.90 tbWYHKuT.net
>>79
おまえは本当にバカだなあw
静的型だろうが動的型だろうが、テストは「入ってきた後に」検出するものだw
この業界から足洗ったほうがいいんじゃないの?周囲が迷惑してるよ?
86:デフォルトの名無しさん
15/12/18 05:20:50.65 tbWYHKuT.net
>>76
>そもそも、他の型を入れた時にエラーになるか?っていうテストなんて書いているか?
書かないバカはお前だけだw
87:デフォルトの名無しさん
15/12/18 05:28:11.93 7Erpdy7Z.net
> 静的型だろうが動的型だろうが、テストは「入ってきた後に」検出するものだw
だからいくらテストをやった所で、
入ってくる前のテストにはならんってことなんだが?
静的型だと、そもそも入らなくしてくれる。
88:デフォルトの名無しさん
15/12/18 05:29:44.45 7Erpdy7Z.net
>>85
> 書かないバカはお前だけだw
じゃあオープンソースのコードで、他の型を入れた時に
エラーになるかをテストしているものを簡単に探しだせそうだね。
証拠として見せてみてよ。
早くお願いねーw
89:デフォルトの名無しさん
15/12/18 05:49:57.26 7Erpdy7Z.net
またトンズラかなw
90:デフォルトの名無しさん
15/12/18 07:48:33.02 i13cEfwD.net
テストの自動化ってテストの「実行」だけのことなのか。つまんねえ話だな。
91:デフォルトの名無しさん
15/12/18 07:51:24.94 HeX3slfp.net
>>84
79の言いたいことは、静的な型ならコンパイルエラーになる、だよ。
92:デフォルトの名無しさん
15/12/18 08:09:44.92 i13cEfwD.net
コンパイルエラーは尊い
93:デフォルトの名無しさん
15/12/18 08:13:50.45 k38RLsj8.net
動的な型付けの利点は、型によらず全ての処理を等しく実行出来ること
94:デフォルトの名無しさん
15/12/18 08:37:24.37 jlCbbYEY.net
>>92
すまん、テンプレートでよくね?
95:デフォルトの名無しさん
15/12/18 08:51:10.88 5/sh8mBQ.net
動的ならあたりまえにできることをテンプレートとか始めたんで
それは流れ逆じゃね?
96:デフォルトの名無しさん
15/12/18 08:51:52.19 gk961EIG.net
お前らってホントにお前らだな。
97:デフォルトの名無しさん
15/12/18 09:24:29.93 P6kUmH+Q.net
どっちでもいいよ。
なんか自分が糞なコードしか書けないのを言語のせいにしてるだけにしか思えんが。
糞コードが発生する理由は動的とか静的とかそんな理由ではないことにいい加減気づいて欲しい。
98:デフォルトの名無しさん
15/12/18 09:59:10.68 SRTwlmwS.net
静的型言語なら、最近はIDEが偉いから
型をミスっていたり、メソッド名をtypoしていたりしたら
コンパイルするまでもなく、打ち込んだ段階でIDEが教えてくれるよ
99:デフォルトの名無しさん
15/12/18 10:37:33.92 i13cEfwD.net
>>96
というより動的だと良コードを書いてもテストの負担が小さくならないと想像しているのでは?
それが正しいかどうかは知らん。
100:デフォルトの名無しさん
15/12/18 10:42:44.66 Lwsmy/pl.net
>>96
一人でやってんならそれでいいんでない
チームでやるなら言語選定は重要だろ
101:デフォルトの名無しさん
15/12/18 10:42:51.99 tbWYHKuT.net
>>96
>糞コードが発生する理由は動的とか静的とかそんな理由ではないことにいい加減気づいて欲しい。
ほんとそれ。マトモな奴は両方できる。
静的型言語エバンジェリストでもちゃんとした人は動的言語の経験があるし
動的言語エバンジェリストでもちゃんとした人は静的型言語の経験がある。
102:デフォルトの名無しさん
15/12/18 11:08:16.14 c5QtSCUZ.net
マトモじゃない奴がいる環境ではどうすればいいですか?
103:デフォルトの名無しさん
15/12/18 12:13:04.41 7Erpdy7Z.net
まともな人でもミスをしないかといえば、ミスはするわけで、
それをすぐに検出できる方がいいな。
104:デフォルトの名無しさん
15/12/18 12:50:31.99 tbWYHKuT.net
それを言い出すと、
「Smalltalkならコードをセーブした瞬間にテストを走らせることができる」
とか言われるだけだぞ?
105:デフォルトの名無しさん
15/12/18 12:51:30.31 tbWYHKuT.net
それを言い出すと、
「Smalltalkならコードをセーブした瞬間にテストを走らせることができる」
とか言われるだけだぞ?
106:デフォルトの名無しさん
15/12/18 12:52:43.39 tbWYHKuT.net
それを言い出すと、
「Smalltalkならコードをセーブした瞬間にテストを走らせることができる」
とか言われるだけだぞ?
107:デフォルトの名無しさん
15/12/18 12:59:52.46 4xDk7IkO.net
テストでバグとか仕様違いを出すと怒る現場は勘弁。
なんのためのテストだ。
一発成功の方が怖いわ。
108:デフォルトの名無しさん
15/12/18 13:16:09.82 7Erpdy7Z.net
>>105
> 「Smalltalkならコードをセーブした瞬間にテストを走らせることができる」
テストを走らせるのはどうでもいいんだよ。
そんなのは他の言語でもできるし。
で、テストっていうのは、謎の小人さんが
勝手に完璧にチェックしてくれるわけじゃないんだわ。
テストの内容はプログラマが書くもので、プログラマはミスをするもの。
だから「テストがあれば~」というのは「バグなく漏れもなくテストを実装していれば~」と
言ってるのと同じ。テストを走らせるてもテストが完璧であることを保証することにはならない。
それに静的型チェックと同等のことをテストを記述するのは困難なんだわ。
ソースコードの全ての関数呼び出しのコードを解析しないと、
不正な呼び出しをしている場所を検出することは出来ない。
109:デフォルトの名無しさん
15/12/18 13:53:07.69 47x3yklW.net
>>107
なんかSmalltalkのことを言うと過剰反応されるのでこういうこと言うのなんだけど、以下参考まで。
> ソースコードの全ての関数呼び出しのコードを解析しないと、
> 不正な呼び出しをしている場所を検出することは出来ない。
Smalltalkではメソッドもオブジェクトだから、それが他のどのメソッドをコールしているかはプロパティとして得られるし、
他のどのメソッドからコールされているかもわかるから、ソースコードを精査せずとも可能性のあるメソッドは
全部列挙できるので、静的型付きな人が心配するほど大変な作業じゃないよ
(もちろん命名重要だし、メタプログラミングとか駆使した凝った呼び方も避けなくちゃこの機能は使えないけど)
110:デフォルトの名無しさん
15/12/18 13:56:10.38 7Erpdy7Z.net
>>108
一番重要な情報がわからない。
ある関数の第一引数は、○型であり、
この型以外を渡している関数を取得する。
という方法がない。
111:デフォルトの名無しさん
15/12/18 13:58:15.96 7Erpdy7Z.net
少し訂正するわ
ある関数の第一引数は、○型であり、
この型と互換性がある型以外を渡している関数を取得する。
という方法がない。
互換性が有る型っていうのは、○型と○型を継承した型のことね。
112:デフォルトの名無しさん
15/12/18 13:58:48.93 SRTwlmwS.net
静的方言語なら、型のミスやメソッド名のtypoは
コンパイルするまでもなく入力した瞬間にIDEが教えてくれるよ
例えばVSなら間違っているところの下に赤の波線が表示される
編集中にすぐにミスとわかるからその場で書きなおせば
誰にも知られることなくあっという間に修正できる
ミスはなるべく早期に発見できたほうが良いでしょ
113:デフォルトの名無しさん
15/12/18 14:00:53.93 7Erpdy7Z.net
>>111
そのとおりだね。
赤線が引かれるから、そこに問題が有ることがはっきりする。
仮にそれがテストで見つかったとしても「そこ」を教えてくれるわけじゃない。
テストが失敗した。なぜだ? とプログラマが原因を推測し探しまわる。
たかがtypoごときで、バグ調査と同様のことが必要になるのは
効率が悪すぎる。でtypoって誰でもするんだよ。
114:デフォルトの名無しさん
15/12/18 14:03:52.82 nMQi/7zb.net
男の癖にIDEを使うとは情けない。vimかemacs以外あり得ない。
115:デフォルトの名無しさん
15/12/18 14:07:50.78 7Erpdy7Z.net
vimかemacs使っていても、IDEと同じことはできるでしょ?
IDEに比べて劣ってるわけじゃないんだしさー(・∀・)ニヤニヤ
116:デフォルトの名無しさん
15/12/18 14:10:23.72 47x3yklW.net
タイポに赤線が引かれるくらいならSmalltalkでも普通にやってくれるけどね…
URLリンク(www.youtube.com)
117:デフォルトの名無しさん
15/12/18 14:14:21.38 7Erpdy7Z.net
正確に言うと、静的型ほど多くのことはわからないが、
ローカル変数程度や、どこのクラスにも存在しないメソッド等、
型情報とは無関係のことに関しては、赤線を引いてくれる。
118:デフォルトの名無しさん
15/12/18 14:15:27.01 7Erpdy7Z.net
あ、>>116はSmalltalkの話ね。
119:デフォルトの名無しさん
15/12/18 14:22:32.85 47x3yklW.net
あと、コード中にリテラルの代入とかのヒントがあれば、ちょっとした型追跡はやれるから
メソッド名の列挙も静的型付けの人が心配するほど大量に列挙されることもないしね。
120:デフォルトの名無しさん
15/12/18 14:28:36.57 7Erpdy7Z.net
ま、所詮劣化機能だよw
121:デフォルトの名無しさん
15/12/18 14:40:57.56 47x3yklW.net
Smalltalkは、先にも書いたメソッドも含め、プログラムの要素が全てオブジェクトで、なおかつ
それら簡易のOODBのような感じでIDE内で管理されているから、プログラムから情報を引き出すのも
データベース感覚で可能かつ気軽にできるところは使っていてすごく面白い。
わかりやすい単純な(でも他言語では理解されにくい)ところでは、ソースコードテキストもメソッドオブジェクトの
属性にすぎないとか。
(Integer >> #factorial) getSource
=> a Text for 'factorial
"Answer the factorial of the receiver."
self = 0 ifTrue: [^ 1].
self > 0 ifTrue: [^ self * (self - 1) factorial].
self error: ''Not valid for negative integers'''
この手の「オブジェクトに訊ねる」スタイルによって、クラスブラウザとかデバッガがそこそこ高機能なのに
作りがすごくシンプルになっていてよく驚かされたりするのも、Smalltalkを使う楽しみのひとつ。
122:デフォルトの名無しさん
15/12/18 14:55:55.75 47x3yklW.net
>>110
Smalltalkでは型には頓着しないからそういう抽出はできないね(Strongtalkでもないかぎり)。
ま、知っていて貶めるのが目的だろうけど、以下念のため。
極端な話、Smalltalkでエラーっていうのは「メッセージの処理のしかたがわかりません」だけだから
その場違いなオブジェクトがノーティファイアをあげたときに捕まえてあげるしかない。
でもSmalltalkでの開発の真骨頂はここからで、至れりつくせりのデバッガが全力でサポートしてくれる。
その威力は強力で、Smalltalk教育においてしばしばデバッガ使用禁止のしばりがつくレベルだったりする。
123:デフォルトの名無しさん
15/12/18 15:04:05.73 7Erpdy7Z.net
「至れりつくせりのデバッガが全力でサポートしてくれる」
で、具体的に、何をサポートしてくれるのさ?w
当たり前の機能はかかなくていいよ。
124:デフォルトの名無しさん
15/12/18 15:15:21.62 NNkc/DqV.net
Smalltalkのヒトがドヤってる機能が
静的型のIDEから見るとあまりにショボくて、
それをいくら指摘されても理解しないところを見ると
分かり合うのは不可能だと思った
> 正確に言うと、静的型ほど多くのことはわからないが、
> ローカル変数程度や、どこのクラスにも存在しないメソッド等、
> 型情報とは無関係のことに関しては、赤線を引いてくれる。
125:デフォルトの名無しさん
15/12/18 15:20:04.19 47x3yklW.net
>>122
当たり前の機能は省くとして(のっけからデバッガのそれ自体の機能じゃなくて恐縮だけど)、
他ではあまり見られない機能としては、
デバッガ向けのコンパイルをしなくとも当然のようにフルで状況の情報が引き出せること
コンテキストやコンテキストスタックがファーストクラスオブジェクトだから
永続化して何度でも同じ状況を解析・検証できたり、すべての情報を引き出したり変更できること。
あと、動的特性としては、修正してコンパイル後、まったく同じスレッドで続行が可能なこと、あたり?
126:デフォルトの名無しさん
15/12/18 15:21:09.63 7Erpdy7Z.net
Smalltalkのデバッガの至れり尽くせりのサポートっていうのは
動的言語にしては至れり尽くせりってだけで、
静的言語では(デバッガ自身も強力だが)
デバッガも使わずにIDEの機能でできることだったりするw
127:デフォルトの名無しさん
15/12/18 15:25:08.02 7Erpdy7Z.net
>>124
> あと、動的特性としては、修正してコンパイル後、まったく同じスレッドで続行が可能なこと、あたり?
URLリンク(msdn.microsoft.com)(v=vs.80).aspx
> 概要: Visual C# 2005 の新しいデバッグ機能であるエディット コンティニュの使用方法の概説です。
> この機能を使用すると、アプリケーションのデバッグ中にコードに変更を加えて、その変更を適用できます。
> アプリケーションを閉じてリビルドし、もう一度実行する、という手順が必要なくなります。
128:デフォルトの名無しさん
15/12/18 15:28:16.80 47x3yklW.net
>>126
エディット コンティニュはデバッグ ビルドでのみ動作します。wwwww
129:デフォルトの名無しさん
15/12/18 15:31:00.77 7Erpdy7Z.net
常にデバッグビルドにしてればいいやん?
Smalltalkも似たよ
130:うなものなんだし。
131:デフォルトの名無しさん
15/12/18 15:35:37.08 47x3yklW.net
開き直ったなー
132:デフォルトの名無しさん
15/12/18 15:39:32.17 7Erpdy7Z.net
>>129
手段と目的がごっちゃになってるからねw
エディットコンテニューなんて開発時やればいい話であって
実運用中に使うことなんてない。
こんなこともできる。何に使うかわからないけど凄いでしょ!じゃ
なんの説得力もないわけでw
133:デフォルトの名無しさん
15/12/18 15:55:49.76 47x3yklW.net
いよいよ本腰入れて開き直ったな。w
実際役立って使う必要とされる機能なんだから「何に使うかわからない」はないだろ。さすがに。
端からSmalltalkや動的遅延結合性を貶めるのが目的だろうから言っても無駄だろうけど、
Smalltalkでのデバッグ時の思考を中断させない疾走感(と、他言語での隔靴掻痒感)は、
Smalltalkのデバッガが何かを知って解って使ってみないことには
特に他言語処理系の手練れにはなかなかわからないと思う
必ずしも機能の多寡ではないんだよね。
Live Debugging in Smalltalk
URLリンク(www.youtube.com)
134:デフォルトの名無しさん
15/12/18 16:01:44.79 7Erpdy7Z.net
>>131
はぁ? お前話をごちゃ混ぜにしすぎ。
最初に言ったよな?
「至れりつくせりのデバッガが全力でサポートしてくれる」
とは具体的に何かって? あれだけだろ?
ほぼすべて静的言語+IDE+デバッガで実現できてるじゃないか。
Smalltalkのデバッガ機能、全然すごくない。
135:デフォルトの名無しさん
15/12/18 16:05:29.03 7Erpdy7Z.net
自己レス
> はぁ? お前話をごちゃ混ぜにしすぎ。
何をごちゃ混ぜにしているかを書いてなかったな。
デバッガ機能は便利だよ。どの言語であっても。
Smalltalk特有のこともあるよ。
ただ、このふたつをごっちゃにして、Smalltalkのデバッガ機能は凄いって言うなよ。
どの言語でもデバッガ機能はすごい便利なんだよ。
デバッガだけじゃなくてIDEも思考を中断させない開発ができる。
別にSmalltalkのデバッガだけが凄いんじゃないんだよね。
そして静的言語+IDEの凄さはSmalltalkのデバッガでできること以上のことができる。
136:デフォルトの名無しさん
15/12/18 16:06:19.19 47x3yklW.net
わかった。わかった。もういいよ。おまえちょっと痛いよ。
137:デフォルトの名無しさん
15/12/18 16:06:29.32 SLQY/0qq.net
IDEじゃなくて静的解析のことを言っているのかな?
138:デフォルトの名無しさん
15/12/18 16:10:16.47 7Erpdy7Z.net
動的言語だと動的じゃないと出来ないことが静的にできる。
これはすごく便利な機能で、実行すればいいじゃないか?って
思うかもしれないが、それはぜんぜん違う。
実行するということは、その場所に来なければいけない。
プログラム実行コードは何万行、何十万行とあるわけで、その場所に来るだけなら
簡単でも、変数の中身まで考慮して「その行にそういう変数の中身で来る」場合を
考えると組み合わせは膨大な量になる。
実行しないでできるっていうことは、それがどれだけ膨大な量であっても
わかるということ。
139:デフォルトの名無しさん
15/12/18 16:12:07.58 47x3yklW.net
多少窮屈でも安心して過ごせる静的型の世界で安寧を得ることが今すごく重要なんだろ。わかるよ。
型には反対しないが、複雑さに悩まされない型システムを見たことはない。動的型付けはまだマシだ。
URLリンク(d.hatena.ne.jp)
だから我々は我々でSmalltalkを使ってヒャッハーしつつ、
型システムが今より賢くなって動的遅延結合性を許容するようになったら喜んでそっちに行くよ。
140:デフォルトの名無しさん
15/12/18 16:12:44.71 7Erpdy7Z.net
>>134
さいようならw
>>135
IDEは静的解析の情報を元に、実行すること無く情報を判断している。
これは極めて重要で、実行するまでの時間を大幅に削減することができる。
Smalltalkが実行した後のデバッガ機能を強化して
後手対応の幅を増やしたのとは逆で、
静的言語はIDEを強化することで、実行すること無く
根本的な解決ができるようになっている。
141:デフォルトの名無しさん
15/12/18 16:14:02.81 7Erpdy7Z.net
>>137
自分の言葉で説明できないから、他人の言葉を使って
自分が間違ってないと思い込んでるねw
その人は完璧人間でもないというのに。
142:デフォルトの名無しさん
15/12/18 16:15:11.62 SLQY/0qq.net
結局javaScriptが最強なわけだけどね。
143:デフォルトの名無しさん
15/12/18 16:15:40.07 7Erpdy7Z.net
ここまでの結論としては、Smalltalkのデバッガで何ができるのか?と聞いたら、
何も便利なことを言うことは出来なかったということだよ。
144:デフォルトの名無しさん
15/12/18 16:20:21.05 c5QtSCUZ.net
なんだこの品のない煽り合いは
145:デフォルトの名無しさん
15/12/18 16:20:53.12 47x3yklW.net
>>138
> 実行するまでの時間を大幅に削減する
また他人の言葉を鵜呑みにしてって言うだろうけど、実感があるから言うと
ソフトウェアシステムにおいて全コストの85% は成功裏に導入された後で必要になる
URLリンク(metatoys.org)
んだよね。だから実行するまでの時間を大幅に削減したところで(そのときは幸せかもしれないけれど)
結局、動かしてみて解ることのほうが多いから、全体から見たら誤差の範囲じゃない?
146:デフォルトの名無しさん
15/12/18 16:26:26.18 7Erpdy7Z.net
>>143
他人の言葉を鵜呑する以前に全然レイヤーが違う話をしてる。
システムをリリースした後で分かることがあるからなんだって言うんだ?
Windowsだって、リリースした後のユーザーのフィードバックを元に
改良しているだろ。
っていう話は全然レイヤーが違う。
147:デフォルトの名無しさん
15/12/18 16:26:54.71 47x3yklW.net
>>140
> 結局javaScriptが
おまえじゃねぇwww すわってろwww
URLリンク(pbs.twimg.com)
148:デフォルトの名無しさん
15/12/18 16:27:38.49 BjfgvjAr.net
オブジェクト指向は愚かな考え。この世は計算式 ★2
スレリンク(tech板)
149:デフォルトの名無しさん
15/12/18 16:29:03.31 7Erpdy7Z.net
「動かしてみてわかる事が多いから」という一言だけが(笑)
言語の話に関連しているから、ここだけ抜き取るにしても
動かしてみて(=動かすのには時間がかかる)わかることが多いからこそ
「時間がかかることが多い」ではなく、動かさないでわかるようにすることが
「時間がかかることを少なくする」ことにつながる。
150:デフォルトの名無しさん
15/12/18 16:30:07.85 tbWYHKuT.net
>>107
>そんなのは他の言語でもできるし。
ダウト。それは言語の問題ではなく開発環境の問題だ。
そしてそんなことをしている開発環境はSmalltalkぐらいしか見当たらない。
151:デフォルトの名無しさん
15/12/18 16:31:55.76 7Erpdy7Z.net
>>148
開発環境が実現可能な機能は言語によって決まるのだから
無関係ではない。
開発環境と言語を切り離して考えてるから、
開発環境が強化できないんだよ。
目的は何? 開発環境を使わないという縛りありで頑張ることではない。
使えるものはなんでも使って開発することだ。
152:デフォルトの名無しさん
15/12/18 16:33:50.41 SLQY/0qq.net
静的解析って実はコンパイラと同じ技術を使っていて実は実行してないように見せかけて実行してるんだよね。
153:デフォルトの名無しさん
15/12/18 16:41:48.59 SRTwlmwS.net
>>150
IDEの静的解析がコンパイラと同じ技術を使っているのは当たり前
構文解析するんだからな
しかし
「実はコンパイラと同じ技術を使っていて実は実行してないように見せかけて実行してる」
これはおかしな言い回しだな
だって、コンパイラはソースコードをコンパイルするだけで実行はしないからな
コンパイラと同じ技術==プログラムを実行
ってのはおかしな発想だ
もう少しまともな言葉で指摘すると
構文解析や意味解析をすることと、プログラムを実行する事は別物だ
154:デフォルトの名無しさん
15/12/18 16:43:35.89 7Erpdy7Z.net
>>150が言ってるのは
構文解析や意味解析を実行する事 = プログラムを実行する事
どちらも実行してるでしょ?
ねー、一緒だよ。(*´・ω・)(・ω・`*)ネー
155:デフォルトの名無しさん
15/12/18 16:48:32.95 SRTwlmwS.net
全然違うし
プログラムを実行するためには明確なインスタンスを与えなければならない
かたや、構文解析にはインスタンスはいらない
インスタンスがなくてもわかる、言い換えればプログラムを実行しなくてもわかる、エラーがあるから
コンパイルエラーというものが存在している
156:デフォルトの名無しさん
15/12/18 16:54:10.35 SRTwlmwS.net
a+b という式があったとして
この式がどういう構造になっているか静的に構文解析することと
実際にa+bを計算するために実行することとは
全くの別物ということがわからない知能のままで32スレも書き込んでいたのかと思うと
頭が痛くなるな
157:デフォルトの名無しさん
15/12/18 16:54:12.86 SLQY/0qq.net
コードを見て頭の中で実行できなかったらプログミングなんて出来ない。>>153 は一行ずつコンパイルしてプログラムを書いているのかな?
158:デフォルトの名無しさん
15/12/18 17:00:07.74 SRTwlmwS.net
言っていることが全く意味不明
コンパイルと出来上がったプログラムを実行することは別物なのは当たり前
構文解析や意味解析は対象のプログラムを実行してはいない
このことは、コンパイルエラーとランタイムエラーという2つのエラーが有ることからも明白
コンパイルエラーはプログラムを実行せずともわかるエラー
ランタイムエラーはプログラムを実行しなければわからないエラー
2つに分かれているということは、別物だということ
159:デフォルトの名無しさん
15/12/18 17:02:58.30 SLQY/0qq.net
部分実行はしてるよ。完全実行はしてないだけで。しかも専用のインタープリターで実行するからリンカとかコンパイラーとか無関係なんだよね。
160:デフォルトの名無しさん
15/12/18 17:14:17.63 SLQY/0qq.net
>>156 あなたはちょっと文章が長いから馬鹿だと思われたくなかったら短く縮めたほうが良い。
161:デフォルトの名無しさん
15/12/18 17:42:12.82 SRTwlmwS.net
そもそもからして>>150は自分で「静的解析」と言っているわけで
静的解析なのに実行していたらそれは動的解析の手法だから
そもそも言葉の定義が怪しいんだよね
162:デフォルトの名無しさん
15/12/18 18:03:20.55 i13cEfwD.net
まあ、ランタイムエラーよりコンパイルエラーの方が尊い、で言い尽くされるな。(個人の感想です)
163:デフォルトの名無しさん
15/12/18 18:08:17.19 V1Ii3Ho8.net
静的も動的も適材適所だけど、入力補完の快適さはどうしても静的言語の勝ちだからなぁ
あの気持ちよさはやみつきになる
164:デフォルトの名無しさん
15/12/18 18:12:08.05 OysfGD3G.net
>>161
これ本当に同意
静的言語から入ると動的言語の補完の無能さに恐れ入る
165:デフォルトの名無しさん
15/12/18 18:19:29.16 47x3yklW.net
>>162
後学のため、実際に試してPharo Smalltalkとも比較したいので、
どの静的言語のなんというIDEから入って、
どの動的言語のなんというIDEの補完の無能さに恐れ入ったか教えてもらうことできます?
166:デフォルトの名無しさん
15/12/18 20:03:52.18 7Erpdy7Z.net
動的言語でも補完はできるよ(笑)
できるできないの話じゃなくて、
できることの量、正確さが、動的言語では圧倒的に少ない。
そういう話だからね。
補完以外もそうだけどさ。
167:デフォルトの名無しさん
15/12/18 20:04:50.48 7Erpdy7Z.net
あと、補完ができるにしても、実行時にしか出来ない。
という欠点も有るよね。
実行時にしか出来ないから、補完するためだけに
実行しなければいけない。
168:デフォルトの名無しさん
15/12/18 20:06:22.22 ZY6DzZKi.net
>>163
数値オブジェクトに対して文字列オブジェクトのメソッドまで補完候補に出てくるようなゴミは論外なんだよ引っ込んでろ
169:デフォルトの名無しさん
15/12/18 20:27:55.99 47x3yklW.net
>>166
ひどいなぁ…。で、試したのは Pharo Smalltalk のどのバージョン?
ちなみに手元の Pharo 4.0 だと
| num |
num := 1.23.
num
まで入れて as と打っても文字列オブジェクトのメソッド名は出てこないけど?
170:デフォルトの名無しさん
15/12/18 20:29:21.85 47x3yklW.net
>>165
え、どういうこと? コードをパーズして抽象構文木にするのも実行なの?
171:デフォルトの名無しさん
15/12/18 20:40:03.63 ZY6DzZKi.net
>>167
意地悪に書けばこういうことだよ
実行すれば分かるのは165も書いてるだろ
function foo() {
if (false) { bar(1) }
}
function bar(num) {
num.ここで補完
}
172:デフォルトの名無しさん
15/12/18 20:43:48.66 ZY6DzZKi.net
別に169のコードに意味があると言いたいわけじゃなくて、
あれでも数値メソッドだけ補完できるなら実行しなくても補完できてると言えるだけだぞ
勘違いすんなよ
173:デフォルトの名無しさん
15/12/18 21:31:26.55 7Erpdy7Z.net
>>168
(静的な)コードをパーズして抽象構文木にするだけで
なんで動的に決まるオブジェクトの中に関する補完ができると思うのか?
静的に補完できないから、動的に補完するしかないんだろ?
174:デフォルトの名無しさん
15/12/18 21:32:07.91 DSnroAdk.net
>>131
お前の言ってることは「本番中に発生したらダメ」っていわれてんの分からんのかな?
175:デフォルトの名無しさん
15/12/18 21:33:48.00 SLQY/0qq.net
パース
176:デフォルトの名無しさん
15/12/18 21:34:19.00 DSnroAdk.net
本番ってのはお前の言ってることは「解決済み」でなければならないし、デバッグ中なら他の手段でなんとかなるレベル
実にくだらんし、そんなことを高らかに言ってると他のユーザーにも迷惑千万
177:デフォルトの名無しさん
15/12/18 21:51:31.46 k38RLsj8.net
えーと、静的型付けの言語を使ってる奴は、単なる土方ってことでOKって話しなのか?
178:デフォルトの名無しさん
15/12/18 22:00:03.43 7Erpdy7Z.net
>>175
理由は? キッチリした仕事をやる=土方という定義なのかね?w
179:デフォルトの名無しさん
15/12/18 22:04:15.15 47x3yklW.net
>>169
たしかにそれは意地が悪い。w
180:デフォルトの名無しさん
15/12/18 22:09:28.58 k38RLsj8.net
>>176
ここまでで書かれている内容を要約すると、「静的型付けの言語では、typoをチェックしてくれる」って事だけなんだが?
181:デフォルトの名無しさん
15/12/18 22:20:39.15 ZY6DzZKi.net
静的型ならコンパイラがあればメモ帳でもできるtypoチェックと
IDE等のサポートが必要な補完を一緒にするなんてセンス無さすぎ
182:デフォルトの名無しさん
15/12/18 22:21:45.22 7Erpdy7Z.net
>>178
いや、だからなんでtypoをチェックしてくれる道具を使うと土方なのさ?
typoをチェックしてない道具を使って、typoと格闘する俺凄いとかそういう話?w
あと、それからtypoってよくあるミスであり、typoが原因で
大きなバグになることも有る。そして静的型が調べてくれるのは
typoだけじゃないからね。他にも説明しろっていうのなら説明するけど。
183:デフォルトの名無しさん
15/12/18 22:28:26.64 LnB+58/e.net
静的型と動的型っていいとこ取りはできないの?
オブジェクト指向と関数型ならできるのに。
184:デフォルトの名無しさん
15/12/18 22:32:25.87 7Erpdy7Z.net
>>181
できるよ。
ただし、有る情報を捨てるのと、無い情報を補完するのを比べると、
無い情報を補完するのは大変。
静的型で動的型風にするには、オブジェクト型で扱って
特定の型に強制的にキャストすればいい。
あとリフレクションの機能を使ったり、
Javaだとバイトコードを変更したりもできるね。
185:デフォルトの名無しさん
15/12/18 22:43:59.79 7Erpdy7Z.net
ぶっちゃけ動的型のメリットってタイプ数が少ないってだけで、
そもそもタイプ数の違いなんて、大した事じゃないし
その減ったタイプ数は、静的型の可読性の高さ+補完で相殺される程度だろう。
動的にクラスをいじれるというけれど、それってソースコードがあれば
ソースコードにパッチを当てれば良い程度の話だったりする。
186:デフォルトの名無しさん
15/12/18 22:44:30.19 LnB+58/e.net
>>182
うーん、あまりいいとこ取りとは思えないな...
187:デフォルトの名無しさん
15/12/18 22:47:37.08 k38RLsj8.net
>>180
ごめん、typoで困ったことがないから全く理解ができん
188:デフォルトの名無しさん
15/12/18 22:55:36.10 7Erpdy7Z.net
>>185
> ごめん、typoで困ったことがないから全く理解ができん
それが上級者と初心者の違いだね。
静的型のありがたさがわからないのは、経験が足りないからだって
分かったじゃないかw
URLリンク(cpplover.blogspot.jp)
> このコミットは、Makefileの中で、OpenSSLでheatbeatを無効にするマクロを定義するよう、
> コンパイラーオプションを指定するものだ。ただし、無効にするマクロは、
> OPENSSL_NO_HEARTBEATSなのに、このコミットで定義されているマクロは、
> OPENSSL_NO_HEARTBEATだ。なんと、typoをしている。これでは何の意味もない。
189:デフォルトの名無しさん
15/12/18 22:56:39.43 47x3yklW.net
たしかに
Smalltalk でも typo で困ることはない
190:デフォルトの名無しさん
15/12/18 22:58:14.53 7Erpdy7Z.net
困ることがないのは、単に経験不足ってだけなんだよね。
巨大なシステムを複数の人で作る。最初に開発した人以外がいじる。
そうなってくると、些細なミスでも、原因の調査に時間がかかるんだ。
数百行程度の小さいスクリプトをいじっている程度なら、
大して時間もかからず、困ると感じないだろうけどさw
191:デフォルトの名無しさん
15/12/18 23:08:19.10 k38RLsj8.net
Option Explicitをtypo対策に使う事を推奨する馬鹿と同じ匂いがする...
192:デフォルトの名無しさん
15/12/18 23:10:41.85 qLDL3KKH.net
「静的言語のメリットはIDEのおかげでtypoがないことなのだぁ!どぉだぁ!?」
「…」
「動的言語はいっぱいタイプするからタイプミスが多いんだろ?ん!ん?」
「…」
ギャグ漫画日和かこれ。
193:デフォルトの名無しさん
15/12/18 23:13:51.90 XVaxeCrB.net
>>189
そんなにおかしなことじゃないと思うけどなあ
194:デフォルトの名無しさん
15/12/18 23:14:23.82 XVaxeCrB.net
>>190
タイプミスは重要だよ
195:デフォルトの名無しさん
15/12/18 23:14:54.43 6PgNGDd6.net
プログラマはMacを使ってるってマジ?
スレリンク(news板)
196:デフォルトの名無しさん
15/12/18 23:29:42.98 k38RLsj8.net
>>192
タイプミスは、ロジックを追えば必ず見つかるミス
怖いのはタイプミスではないtypo
197:デフォルトの名無しさん
15/12/18 23:43:17.54 XVaxeCrB.net
>>194
そりゃいつかは見つかるだろうが、それにかける労力が大きいだろ。
198:デフォルトの名無しさん
15/12/18 23:47:14.07 7Erpdy7Z.net
だいたい、動的言語でも「できる」という話に持って行こうとするんだよなw
重要なのは「簡単に」できるかどうかであって。
199:デフォルトの名無しさん
15/12/18 23:48:52.66 XVaxeCrB.net
>>196
だねー。
200:デフォルトの名無しさん
15/12/18 23:54:41.63 k38RLsj8.net
タイプミスを調べるのに大した労力なんていらんがな...
リレーシーケンスの配線ミスを探す方が遥かに大変だよ
201:デフォルトの名無しさん
15/12/19 00:00:09.78 APSLa6hA.net
> タイプミスを調べるのに大した労力なんていらんがな...
な、経験が全然足りないんだよw
202:デフォルトの名無しさん
15/12/19 00:05:06.20 EQ0D2wf/.net
俺タイプミスしねーからわかんねーなその気持ち。静的だからね。
203:デフォルトの名無しさん
15/12/19 00:15:43.81 APSLa6hA.net
静的でも手抜きして、例えばyaml形式の設定ファイルを読み込んで、
アプリの全体から文字列でyamlファイルのデータにアクセスするような
コードを書いていると同じようにタイプミスすることあるよ。
こういうのは、設定オブジェクトを作って、内部ではyamlでもjsonでも
対応可能な設計にしておくと、アプリからは設定オブジェクトのメソッドや
プロパティを参照するだけになるから、間違いが無くなる。
(正確にはタイプミスが起こりえる場所を設定オブジェクトに押し込められる)
更に設定オブジェクトのリファクタリングで名前や階層を変えたり
単一値を複数値扱えるような変更があっても、設定オブジェクトを変更すると
それに依存する場所全てを明らかにしてくれる。
204:デフォルトの名無しさん
15/12/19 00:46:06.06 u/d4wrI0.net
適当な範囲でのテストを書いてないからタイポがどうとかこだわるんだろう。
たしかにテストがない場合の静的チェックは相当嬉しいものがあるが。
テストがまともにある場合に動的と静的の違いなんて 5 %以下だよ。
205:デフォルトの名無しさん
15/12/19 01:17:50.15 APSLa6hA.net
テスト万能説はやめろよw
どんなテストを書くっていうのか?
タイポしてないことを確かめるテストは書けない。
できるとしたら、何かのテストのついでとして、エラーが起きれば
タイポではないか? ということになるが、エラーが出たあとに、
ん? なんでエラーになった? バグかな?ってコードを調べるのも馬鹿らしい。
タイポしていてもエラーにならないことだってある。
そもそも、完璧なテストは書けるのか?って話もある。
適当な範囲のテストを書いてないからというが、タイポはミスだ。
人間はミスをする。ならばテストを書くことに対してもミスするだろう。
ミス無くテストを書いたという保証は得られない。
プロトタイプ的な実験コードに対してもテストを書くのか?という話もある。
テストを書く=時間がかかる だ。
テストは誰かが勝手に作ってくれるものじゃない。
テストを書く時点でコストがかかっている。
206:デフォルトの名無しさん
15/12/19 01:21:33.29 +ddvqKbr.net
出来なくても悔しくないもんって意見ばかりのところ恐縮ですが
Pythonはtypoも補完も静的解析できるからね(eval除く)
一緒にしないでね
207:デフォルトの名無しさん
15/12/19 01:24:52.39 nEJLJZaD.net
むしろ、できるの普通だから動的だとできねぇ!って言ってる人の仮想敵がわからんw
208:デフォルトの名無しさん
15/12/19 01:26:24.39 dNXWfsX0.net
そもそも静的型言語なら最近はIDEが偉いから
typoぐらいならコンパイルするまでもなくIDEが教えてくれる
VSなら間違っているところのコードの下にリアルタイムで赤の波線が出る
これでもかってぐらいわかりやすく教えてくれる
コンパイルする前の、まさに編集している段階でエラーがわかるから
その場でサクっと直せば良いだけ
コンパイルして、さらにテストして初めてtypoが分かるのと比べると
生産性が段違いだ
209:デフォルトの名無しさん
15/12/19 01:28:40.84 APSLa6hA.net
今はタイポの話をしたが、型チェックに関して言えば、
型チェックはテストでは検出できない。
なぜならば、これは関数の呼び出し方の間違いだからだ。
テストとは通常、関数が与えられた引数で正しい答えを返すことをテストする。
与える引数は正しいことが前提となっている。
例えばある関数の引数の数が変わったとしよう。テストも引数の数を変えるだろう。
しかし、実際のコードの呼び出し部分、ここの引数を変えるのを忘れたら、
テストは通るのに実際のコードでエラーが発生することになる。
もちろん呼び出し側のテストがしっかり書かれていればそちらでエラーが出るだろう。
つまり、Aという関数の仕様を変えた時、その関数を使用している場所全て、
関数B、C、D、E・・・でエラーが発生する。さあ大変なデバッグ作業の始まりだ!
もし、これらの関数でテストに見逃しがあったりしたならば、バグになるのは明白だ。
これは適当な範囲でのテストを書いてないからという程度ですむ話じゃない。
完璧なテストを書かないかぎり、呼び出し方が間違っていないかどうかはわからない。
完璧なテストを書けばいい?もし世の中に完璧なテストが有るならば、バグは一切無いだろうなw
210:デフォルトの名無しさん
15/12/19 01:29:47.38 APSLa6hA.net
>>204
> Pythonはtypoも補完も静的解析できるからね
できるできないの話じゃない。
できる量が違うという話。
静的で出来ることの「一部」が出来たからって
何も凄くはないんだよ。
211:デフォルトの名無しさん
15/12/19 01:36:22.40 P/E9W26M.net
>>204
どうやんの?
212:デフォルトの名無しさん
15/12/19 01:47:54.86 +ddvqKbr.net
>>208
出来ないコード出してみ
>>209
jedi-vim
213:デフォルトの名無しさん
15/12/19 02:13:01.48 APSLa6hA.net
>>210
Java
void func(String str) {
str. ← 補完できる
}
Python
def func(str):
str. ←補完できない
214:デフォルトの名無しさん
15/12/19 02:38:39.06 wzwqX1ml.net
>>211
それは無理だけど、動的型は関係なかったね
静的型でも型推論に必要な情報ないからね
def func(str: str) なら出来るよ
215:デフォルトの名無しさん
15/12/19 02:42:51.49 VdM6quSm.net
それはwww
216:デフォルトの名無しさん
15/12/19 02:45:46.18 APSLa6hA.net
>>212
型推論っていうのは、型が断定できるときに記述を省略できる
"追加機能" であって、型推論を持ち出す意味が無いんだが。
で、動的型むりでしょ?w
静的型はできるでしょw
ほら、言ったとおり。
217:デフォルトの名無しさん
15/12/19 02:55:03.23 APSLa6hA.net
動的型の「できる」っていうのは、ローカル変数など
大概狭い範囲での話なんだよね。
どちらかと言えば、狭い範囲のものは、その場所だけ
注意してみればいいからそこまで必要ない。
静的型の型チェックが便利なのは、広い範囲の依存関係の矛盾を暴き出すことだから
こういうのは単体テストが主である自動テストではテストがしづらい部分。
つまり、関数の引数とかクラスの継承関係とかオブジェクトのメソッドとか
そういう「インターフェース」に関わる部分の矛盾のテストができる。
218:デフォルトの名無しさん
15/12/19 02:58:01.15 OdWxPmQd.net
haskellやocamlでは、取り敢えず関数名と引数だけ書いて(型は書かない)
中身はundefinedやassert falseにしておき(つまり、まだ実装しない)
関数を呼び出す側を先に実装する手法をとる事が良くある。
いわゆるトップダウン型の実装ね。関数型と相性が良いけど、仕様が明確な大規模開発にも向いてる。
で、そのときは呼び出し側の使われ方から型推論できるから
引数の型を書かなくても型推論できる。
ドカタ言語使いには想像も出来ないだろうけど、そういう世界もあるってこと。
219:デフォルトの名無しさん
15/12/19 02:59:35.78 APSLa6hA.net
Javaでは、取り敢えず関数名と引数だけ書いて(型はObjectにしておく)
関数を呼び出す側を先に実装する手法をとる事が良くある。
それと何も変わらないNE!
220:デフォルトの名無しさん
15/12/19 03:01:04.70 OdWxPmQd.net
>>217
それObjectのメソッドだけしか補完出来ないけど?
221:デフォルトの名無しさん
15/12/19 03:02:59.96 APSLa6hA.net
>>216
その文章から、どういった理由でドカタ言語なのかわからないのは、
お前が、ドカタということで心の安定を保つためだと思ってるYO!
222:デフォルトの名無しさん
15/12/19 03:05:24.53 APSLa6hA.net
>>218
呼び出し側の使われ方から推論できるよ?
正確には「呼び出し側が使われた時」っていうのは
呼び出し側の型も決定したってことだから、
関数の実装をするときにその型に書きなおすだけでいい。
関数の実装するんだから、すぐ上の行を編集するだけ。
223:デフォルトの名無しさん
15/12/19 03:06:46.74 OdWxPmQd.net
>>219
どういった理由かも分からないのに、ドカタ言語と言われて
君はJavaを連想してしまったんだね。
話の流れ的にpythonでもsmalltalkでもおかしくなかったのに。
224:デフォルトの名無しさん
15/12/19 03:09:08.23 APSLa6hA.net
>>221
へ? Javaの話を今までしていたその続きをしただけだけどw
うわー、やっぱりこう他の言語をディスることで
心の安定を(笑)うわーwww
225:デフォルトの名無しさん
15/12/19 03:09:11.65 OdWxPmQd.net
>>220
計算機が正しく自動的にやってくれることを
手で書くのはアホのする事ですよ
typoしてIDEに赤線引かれちゃうかもよ?
226:デフォルトの名無しさん
15/12/19 03:10:20.46 APSLa6hA.net
>>223
> 計算機が正しく自動的にやってくれることを
呼び出し側を間違えたら、計算機は間違いますよw
計算機は、書いた通りに動く。
何が正しいかはプログラマが決めるもの。
227:デフォルトの名無しさん
15/12/19 03:12:18.93 APSLa6hA.net
呼び出し側から推論すると言っても、
呼び出し側が矛盾することだってあるしね。
fooという関数をintを引数にして呼び出している場所と
stringを引数にして呼び出している場所があったらどうなるのか。
定義は一箇所にするもの。
関数の定義こそが一箇所に絞り込める唯一の場所。
使ってる場所で、決めるっていうのは
間違いの元にしかならないよ。
228:デフォルトの名無しさん
15/12/19 03:15:03.21 OdWxPmQd.net
>>224
コンパイラが型推論して自動生成した型を見ても間違いに気がつかないなら
手で書いても間違ってるだろうね
229:デフォルトの名無しさん
15/12/19 03:16:20.72 OdWxPmQd.net
あ、もしかして型推論した結果を出力できるって知らなかったかな?
ゴメンね分からない話して。
230:デフォルトの名無しさん
15/12/19 03:20:44.63 APSLa6hA.net
静的型の型推論って機能はコンパイラが推論して
型が決定できた時に、記述を省略してくれる機能。
だから(推論が)正しいか、推論できないかの2つに別れる。
推論できた時、それは正しい。
だけど動的型の場合、推論は本当に推論でしか無いんだよね。
こうじゃないか?って思いました。コンパイラがいう。
だから、計算機は正しく自動的にやってくれるわけじゃない。
所詮、推論でしかない。
231:デフォルトの名無しさん
15/12/19 03:21:26.48 APSLa6hA.net
>>227
やっぱり正しく自動的にやってくれるんじゃないんですねwwww
232:デフォルトの名無しさん
15/12/19 03:24:05.57 srVmyYNw.net
>>228 静的型の型推論は推論できた時、それは正しい と 動的型の場合、所詮、推論でしかない この二つは整合するのかい?
234:デフォルトの名無しさん
15/12/19 03:30:45.67 OdWxPmQd.net
>>228
最後まで書き込んでたら勝ちってゲームしてるつもりかな?
もうちょっと中身のある事を書こうね。
関数型言語の型推論だと、複数の場所で矛盾する型を書いたら即座にエラーになるから間違いを早く発見できるし(>>217は型を書く段階まで発見できない)、
間違っていたときも型推論の出力を見ながら修正できる。
たしか、早くより少ない労力でエラーを発見できる方が優れてるんだよな?
235:デフォルトの名無しさん
15/12/19 04:45:37.26 ysM2oFx/.net
動的型の場合、型が矛盾することはない。
なぜなら、どんな型でも入れることが可能だからだ。
なお型が矛盾しないからといって、正しく動くわけじゃないw
236:デフォルトの名無しさん
15/12/19 05:08:30.90 srVmyYNw.net
型って厳密には何の型の話をしてる?
入れるって書いてるから変数型かな
237:デフォルトの名無しさん
15/12/19 05:20:10.46 ysM2oFx/.net
変数もだけど、それ以上に重要なのは
関数の引数の型。
238:デフォルトの名無しさん
15/12/19 06:11:42.29 uwvw3g3I.net
>>232
一方、静的型付言語でも、型が矛盾しないからといって、正しく動くわけでもないw
239:デフォルトの名無しさん
15/12/19 06:13:31.81 uwvw3g3I.net
>>231
静的型付関数型言語で型エラーの本当の原因を探すよりも
Smalltalkで実行時エラーの本当の原因を探すほうが遥かに簡単で間違えにくい。
240:デフォルトの名無しさん
15/12/19 07:30:05.05 TW2fFhuS.net
そもそも静的型付けのヒトは、コンパイルが通れば
型の不整合によるエラーはぜったい起こらないという前提なの?
そんなちゃんとした型システムの言語、あんたら使ったことないだろ
241:デフォルトの名無しさん
15/12/19 07:51:26.41 ysM2oFx/.net
>>237
1か0じゃない。出来る限りコンパイル時に解決してくれれば
動的に解決する問題が減る。
静的型で型の不整合が起きるコードなんて限られてるんだから、
その影響範囲を小さくすることで、動的なものを静的に
解決できるように設計するんだよ。
静的に解決するのと動的に解決するのとの差は大きく、
動的だとすべての実行パスを、実際に実行しないと信頼出来ないが
静的だと実行する必要が無いから、すべての実行パスを実行するコストが0になる。
242:デフォルトの名無しさん
15/12/19 09:07:04.58 P/E9W26M.net
>>210
俺もJedi-vim使ってるけどこれってどうやって配列の中身に補完かけんの?
何回やっても出来なくてPythonゴミだと思ってた
243:デフォルトの名無しさん
15/12/19 09:33:28.96 TW2fFhuS.net
>>238
> 1か0じゃない。
あんたらの言ってることは1か0かでしかないよ。w
ここでもすでに2つもやってる
> すべての実行パス
> コストが0
244:デフォルトの名無しさん
15/12/19 09:33:42.26 QugsHy5+.net
typo、typo言ってる奴が何を言ってるのか分かってきた
オブジェクト指向とか、関数型とかいう前に、構造化プログラミングが出来てないからtypoで困るのか
245:デフォルトの名無しさん
15/12/19 09:34:15.15 u/d4wrI0.net
>203
こいつまじでテスト書かないんだろうな。。
適当にその型のオブジェクト生成して引数で突っ込んでメソッドなり関数なり呼べばいいだけだろ。
型があってなけりゃ大概まともになんて動かんわ。
>そもそも、完璧なテストは書けるのか?って話もある。
テストでもプログラムでも「完璧な」なんてありえないんだよ。
確率や効率をいかにあげるかって話だ。
>テストを書く=時間がかかる だ。
当たり前だ。それなりの精度のもの作るならそうなる。
プロトで作るくらいの規模のもので型エラーでほとんど動かんもの作る奴なんてどっちにしろ
まともなものなんて作れんわ。
246:デフォルトの名無しさん
15/12/19 09:35:02.37 ysM2oFx/.net
なんで構造化プログラミングとtypoが関係有るんだ?
無関係なものを結びつけたがるよなw
まるで、そういう印象をあたえるのが目的かのようだwww
247:デフォルトの名無しさん
15/12/19 09:36:58.29 ysM2oFx/.net
>>242
> 適当にその型のオブジェクト生成して引数で突っ込んでメソッドなり関数なり呼べばいいだけだろ。
> 型があってなけりゃ大概まともになんて動かんわ。
わかってないねw
適当にその型のオブジェクト生成して突っ込むというテストコードを書いたからといって、
そのテストコード以外の部分には、当てはまらないんだよ。
テストコードだけがうまく動作するwww
> 型があってなけりゃ大概まともになんて動かんわ。
問題はそこからだな。まともに動かない。原因は何か?
デバッグ大変だぁw
248:デフォルトの名無しさん
15/12/19 09:38:45.80 ysM2oFx/.net
引数が違うっていうのは、呼び出し元と呼び出し先の
インターフェースの問題なのだから
単体テストでは見つけることが出来ないんだよ。
これは結合テストの範疇。
249:デフォルトの名無しさん
15/12/19 09:41:53.19 TW2fFhuS.net
結局、静的型付けのヒトの主張は
- 動的型付けで静的型付けのような完全なチェックは不可能
- 完全なチェックを妨げる言語機能は自分達には無価値
- 静的型付きはすばらしい。だからおまえ等が使わない理由が分からない。バカなの?
ただこれだけのこと
250:デフォルトの名無しさん
15/12/19 09:45:53.67 P/E9W26M.net
あと補完が素晴らしい
251:デフォルトの名無しさん
15/12/19 09:47:41.17 8SzZHE5V.net
動的型はダックタイピングを期待して故意に複数の型を許すこともある
だから、仕組み的に静的型付けより正確な補完ができることはありえない
>>216
戻り値にShowとかCloseとかのよくあるメソッド呼ぶだけだとどうしても補完は不足する
C#とかの補完は、加不足なく表示されるのがポイントで、リファレンスを参照する手間がないのがありがたい
>>181
dynamic型とかでできるよ
でも補完が効かないし、遅くなって静的コンパイル言語の利点を潰しちゃうからあんまり使われない
252:デフォルトの名無しさん
15/12/19 09:49:18.71 ysM2oFx/.net
>>246
> 結局、静的型付けのヒトの主張は
なるほどw 動的型の人の主張はそういう反論しかできないから
話をこれだけにしてくださいってことだなw
253:デフォルトの名無しさん
15/12/19 09:50:10.54 ysM2oFx/.net
この3つ以外の点には反論しなかったなーw
面白い反応だwww
254:デフォルトの名無しさん
15/12/19 10:09:02.79 QugsHy5+.net
>>243
typoが発見できないような広い範囲をテストするなんてことは基本的に有り得ない
255:デフォルトの名無しさん
15/12/19 10:10:22.76 l6AIqaac.net
静的型のヒトはいったい何が目的なんだ?
自分が理解できない動的な考え方の排斥か?
自分たちの土俵での優位性を主張したいだけなのか?
256:デフォルトの名無しさん
15/12/19 10:13:36.72 uwvw3g3I.net
>>248
>動的型はダックタイピングを期待して故意に複数の型を許すこともある
>だから、仕組み的に静的型付けより正確な補完ができることはありえない
ちがうなw
特定の型の引数しか扱えないような低性能な静的型と違って、
動的型は任意の型を取る能力を持っているから、
動的型のほうがより「正確に」可能な型に関係した補完が可能なんだよ。
257:デフォルトの名無しさん
15/12/19 10:21:30.79 8SzZHE5V.net
>>253
え?どういう補完を指して優れてるって言ってるの?
型にしばられすぎないことが利点の動的言語で静的言語並の補完したら良さを潰してるとしか思えないんだが
258:デフォルトの名無しさん
15/12/19 10:26:19.12 dtnFGkzr.net
補完なんて必要ない。IDEを使っていたころ補完にばかり頼っていたらforの書き方さえ分からなくなってた。漢字と一緒で読めるのと変換するのと、漢字を書けるのとは
全く別のことだと言うことがわかったよ。それ以降、補完に頼ることを止めて以来コードの質が上がったということは言うまでもない。
259:デフォルトの名無しさん
15/12/19 10:51:48.54 oOYHp+m9.net
補完に助けられてコンパイラの型エラーをつぶしつぶしでないとまともにコードすら書けない、それが土方。
260:デフォルトの名無しさん
15/12/19 10:56:29.09 P/E9W26M.net
補完ないとクラスのメソッド名全部覚えないといけないじゃん……
261:デフォルトの名無しさん
15/12/19 10:59:35.33 eeFVwRM7.net
補完とかタイポにそこまで拘る人って
一日二万行くらいコード書いてるのかな?
プログラミングの本質はタイピングじゃなくて設計なんだけどな
俺はemacsとabbrevだけで十数年食ってるよ
262:デフォルトの名無しさん
15/12/19 11:07:06.94 t89iAcrU.net
職業プログラマが2chに来て議論している...
263:デフォルトの名無しさん
15/12/19 11:07:11.55 l6AIqaac.net
>>249
読解力 and/or 論理的思考 も欠如して、かわいそうに…
ただ煽るだけしか能がないのか。そんなんでよくまともなコードを書けるな。
それともあれか、俺たちも我慢して型情報を書いて、それと引き替えに型安全と補完というメリットを得ている
お前らそれを馬鹿にして否定したり、あまつさえ俺には必要ない別のメリットを享受することなど許さないってか
264:デフォルトの名無しさん
15/12/19 12:35:58.10 wzwqX1ml.net
>>239
普通に配列の中身も補完できたよなーと思って試したらやっぱり出来たから、
そっちの環境がおかしいんじゃね?
265:デフォルトの名無しさん
15/12/19 13:21:35.87 dNXWfsX0.net
>>212のような機能は動的型言語が静的型言語から輸入した機能だから静的型の機能なわけだけど
動的型界隈においても静的型のメリットが評価されてきたってことでもあるが
それはともかくとして、>>212のような書き方をするとfuncはstrと派生クラスしか受け付けなくなるから
動的型の柔軟性が全く損なわれるわけだけどね
動的型言語なのにメタプログラミングもクソもないC言語レベルのコーディングを強いられるのはなんとも
一方で静的型言語で>>211のような型を指定しない書き方をするときは
ジェネリックやテンプレートを使うわけだけど、この場合コード補完こそ効かないけれど
静的に解決するので少なくとも型のミスやtypoのミスはコンパイルエラーになる
静的型言語のタイプセーフはジェネリックでも健在ということ
これは動的型言語の取ってつけたような貧弱な静的型システムでは実現できていない
しかし静的型のジェネリックは静的に解決するので動的なダックタイピングは出来ない
でも、動的なダックタイピングのような危険な行為は本当に必要なのかどうなのか
殆どの場合は静的なダックタイピングだけで十分だし、コンパイルエラーで検出できたほうが良い
動的な多態をしたければ、インターフェースを介して行ったほうが安全
266:デフォルトの名無しさん
15/12/19 13:24:08.37 dNXWfsX0.net
> >そもそも、完璧なテストは書けるのか?って話もある。
> テストでもプログラムでも「完璧な」なんてありえないんだよ。
> 確率や効率をいかにあげるかって話だ。
そこで静的型言語の出番
少しでもバグを減らすためには静的型言語が有用
267:デフォルトの名無しさん
15/12/19 13:38:36.46 a/6r0NiU.net
静的型付け言語の潜在開発生産性は今の100倍 ×5
スレリンク(tech板)
もうこっちでよくないか?
268:デフォルトの名無しさん
15/12/19 13:41:55.99 XdSebzRf.net
マイナンバー制度は受け取り拒否をすることで、破壊できます。
任意である通知カードの受け取りを政府広報が受け取れとCM
URLリンク(www.youtube.com)
マイナンバー通知カードを受け取ってしまっても、市町村に送り返そうURLリンク(www.youtube.com)
311東日本大震災は人口地震テロ さゆふらっとまうんど(平塚正幸)URLリンク(m.youtube.com)
マイナンバー通知カードの受け取りを拒否しようURLリンク(www.youtube.com)
269:デフォルトの名無しさん
15/12/19 13:43:56.73 a/6r0NiU.net
>>265
拒否する理由がない。
拒否するだけじゃただの反抗期。
すごくダサい。
270:デフォルトの名無しさん
15/12/19 13:54:09.76 dNXWfsX0.net
ここまで来て静的型言語のメリットは散々語られているが動的型言語のメリットはあまり語られていない事実
大体は動的にクラスを書き換え出来る、とかといった危険なメリットが有るぐらい
最近は動的型言語にも静的型の機能(の中途半端なもの)が
どんどん導入されてきていることから考えると
動的型言語界隈の人にとっても静的型のメリットは大きいということ
ただし、取ってつけたようなものなので、ジェネリックが無いわけだが・・
人間は完璧じゃないのでテストも完璧とは限らない
機械的に検出できるエラーは多ければ多いほどよい
俺らはコンピュータを使って普段色々なことを自動化するためにプログラムを書いているわけだから
我が身自身のエラーの検出も出来るだけ多くコンピュータで自動化しようというのは当然の事の流れ
他人の仕事は自動化しているのに、自分たちの仕事のエラー検出を自動化しないのは変な話
動的型言語は時代に逆行しているわけだ
最先端と勘違いしていた人たち、可哀想
271:デフォルトの名無しさん
15/12/19 14:06:24.99 srVmyYNw.net
できるだけ良い設計をしたいから動は静の機能を取り込む
できるだけ早く動作を確認したいから静は動の機能を取り込む
動作の確認はどう設計されたかの確認とも言える
272:デフォルトの名無しさん
15/12/19 14:08:42.41 a/6r0NiU.net
>>267
ruby on railsとか一時期流行ったよねー。
これからはlightweight languageだとか言ってね。
人力で型チェックのコード書くのだりーってことに気がついて下火になった。
273:デフォルトの名無しさん
15/12/19 14:19:06.48 6Pr5+KRd.net
動的なんて局所でスクリプト組み込めばいいだろ。
全部動的言語とか初心者かよ。
274:デフォルトの名無しさん
15/12/19 14:26:41.75 srVmyYNw.net
全部静的言語も設計が甘いと仕様変更に弱いところがある
静的言語でしっかり設計して動的に仕様に追従できるようにしたいものだ
275:デフォルトの名無しさん
15/12/19 16:05:53.13 QugsHy5+.net
ここまでで分かった静的言語の利点typo
276:デフォルトの名無しさん
15/12/19 17:18:06.84 TmayNbxK.net
javascriptはエラーを放置するからストレスなくインターネットをモザイク出来るんだよ
277:デフォルトの名無しさん
15/12/19 17:40:05.11 ysM2oFx/.net
> ここまでで分かった静的言語の利点typo
意訳
静的言語の利点はtypoだけなんだって思い込みたい
だって、それ以外の利点に反論することが出来ないんだもん。
278:デフォルトの名無しさん
15/12/19 17:58:11.97 xOPNzksg.net
なぜそう解釈したいの?w
279:デフォルトの名無しさん
15/12/19 18:11:56.47 ysM2oFx/.net
静的言語の利点はいろいろ出てるのに、
typoしか指摘してないからだよw
280:デフォルトの名無しさん
15/12/19 18:44:52.65 OdWxPmQd.net
smalltalkのような動的言語もhaskellのような静的型付け関数型言語も、
設計上のトレードオフで異なる方向性に進んだだけであって、
どちらにも良いところは一杯あるよ。それで良いじゃないか。
もちろんJavaにも良いところはある。ドカタでもコードらしき物が書けるところとか。
281:デフォルトの名無しさん
15/12/19 18:49:17.24 a/6r0NiU.net
>>277
Javaが普及した理由って文法がシンプルだから?
282:デフォルトの名無しさん
15/12/19 18:54:52.90 dNXWfsX0.net
VMのおかげ
283:デフォルトの名無しさん
15/12/19 18:55:37.15 srVmyYNw.net
たくさん使われたから普及しただけだし
たくさん使われたからドカタが生まれたよ
284:デフォルトの名無しさん
15/12/19 18:56:01.89 ysM2oFx/.net
能力が劣る人でも使える言語=その言語は優れている
こういう矛盾があるんだよなw
285:デフォルトの名無しさん
15/12/19 18:57:07.90 ysM2oFx/.net
>>280
その理屈だと、たくさん使われてる言語を使ってる人=ドカタってことになって
なぜドカタなのか?の理由がなくなるぞw
286:デフォルトの名無しさん
15/12/19 18:58:09.44 ysM2oFx/.net
自分が好きな言語が普及しないと悔しいだろう?
自分が嫌いな言語が普及すると悔しいだろ?
悔しかったら、叫べばいいんだよ。
お前のカーチャンデーべそ!
287:デフォルトの名無しさん
15/12/19 19:02:44.62 99cf/LSi.net
Windowsを使ってる奴はドカタ
それでいいじゃないか。
288:デフォルトの名無しさん
15/12/19 19:04:44.99 ysM2oFx/.net
本来のドカタの定義からは外れて、
低能な悪口になってしまってるよなw
ドカタとする理由はない。
単にドカタと呼ばれれば気分悪いだろう?
っていう気持ちだけで言ってるw
やーい、ドカタ(笑)、ドカタ(笑)
俺はドカタじゃないもん!
289:デフォルトの名無しさん
15/12/19 20:54:40.24 9zezTTvK.net
>>274
静的言語の利点はコードコントラクト
URLリンク(monobook.org)
290:デフォルトの名無しさん
15/12/19 21:32:04.90 VDGaUBLZ.net
スレタイの議論は興味あるし読みたいのだが、
静的か動的か(やっぱり静的サイキョ)みたいな
議論は適材適所という話でしかないしどうでもいいや。
291:デフォルトの名無しさん
15/12/19 22:54:29.05 9zezTTvK.net
学習コストとシングルスレッド性能でいえばオブジェクト指向
副作用の低減とマルチスレッド性能でいえば関数型
大事なのはバランス感覚。
中間が素晴らしい。
オブジェクト指向で関数型で基本静的で動的も使えunsafeも使えるC#が最強なんだな。
292:デフォルトの名無しさん
15/12/19 23:15:07.87 0/RlvyV4.net
Objective-Cはクソ
これだけは間違いない
293:デフォルトの名無しさん
15/12/19 23:15:59.92 25MZJC6Y.net
純粋関数型ってstaticオジサンと何が違うの?
294:デフォルトの名無しさん
15/12/19 23:46:59.99 99cf/LSi.net
C#なんてマイナー言語誰が使ってんだよ
295:デフォルトの名無しさん
15/12/19 23:55:31.17 GM3q6wlH.net
そらMS系とUnityユーザあたりでしょ
296:デフォルトの名無しさん
15/12/20 01:22:59.25 ei3pb2OR.net
クリスマスなのでXamarinが無料らしいぞ
URLリンク(realtime.search.yahoo.co.jp)
297:uy ◆Qawu9.2l1E
15/12/20 01:23:00.97 I1JEaeeo.net
>>288
バランスwwwwwwwwwwwwwwwww?WwWWWwWw
低能特有の曖昧でふわふわした表現ワロタwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
298:デフォルトの名無しさん
15/12/20 01:27:54.27 ei3pb2OR.net
基本はキッチリカッチリだろうけJSONなんかを扱う場面ではアホくさいしバランス感覚は重要じゃね。
299:デフォルトの名無しさん
15/12/20 02:21:28.75 IuSUOMsB.net
バランス大事だよほんとw
求められてる範疇で都合
300:よく使えるいいんだ。百点の理想郷なんかなんかいらんのよ クライアントないし上長の要望に立ち向かうってこと自体、曖昧でふわふわしたところにやんわりと釘を刺し続ける行為だしね 90点もいらない、10点の仕事を最安で求められたなら10点できっちり済ませるのが土方クオリティ
301:デフォルトの名無しさん
15/12/20 02:24:10.18 jqjYNF9z.net
曖昧な要望で10点なんてきっかり分かるわけ無いだろ。
矛盾したこと言ってるなよ。
302:デフォルトの名無しさん
15/12/20 02:39:17.80 IuSUOMsB.net
おお済まない。クライアントじゃなく、こちらの想定上の理想を100点という意味で書いてたつもりだった。
303:デフォルトの名無しさん
15/12/20 07:15:36.12 2L75ZkE+.net
いまだに「関数型はマルチスレッド(マルチプロセス)に強い」と思い込んでいる人がいるんだな。
20年前にはそんなものは神話だということがバレているわけだが。
304:デフォルトの名無しさん
15/12/20 07:17:27.87 2L75ZkE+.net
>>286
もしかして、動的型言語では契約プログラミングができないとでも思い込んでいる?
305:デフォルトの名無しさん
15/12/20 07:54:40.31 jqjYNF9z.net
なんでもそうだが、動的言語のできるは、
静的言語でできることの「一部」しかできない。
いっつもできるできないの話に持ち込んで
同じことができると錯覚させようとするんだよなぁw
306:デフォルトの名無しさん
15/12/20 08:43:25.14 gr0U1KS4.net
>>299
神話じゃなくってそれはどうすればいいのか知らないだけのことで、少なくとも完全にパッケージングされていれば
きにならないことだ
307:デフォルトの名無しさん
15/12/20 08:49:50.37 fsY0id6u.net
C# + EF使うとSQLのtypoすらほとんど無くなる
あれは感動
308:デフォルトの名無しさん
15/12/20 09:30:42.11 hK9ny108.net
なんでもそうだが、静的言語の「動的」にできるは、
動的言語でできることの「一部」ですらないまがいもん。
いっつもできるできないの話に持ち込んで
同じことができると錯覚させようとするんだよなぁw
それでそのことを指摘すると、動的な機能なんていらないとか
typoの修正が完全じゃなくなるとか、補完の精度が落ちるとか
挙げ句の果ては、動的だと動かさないと型チェックできないとか
0か1かの極論を展開して煙に巻こうとするんだよなぁw
で、さらにそれを指摘すると、それしか反論がなかったからとか開き直る。
さんざん動的のメリットを言ってもユースケース想像できなくて頭ごなしに拒否。
ドカタは世界が狭いから、静的型だとダメだから動的に移る人もいるって
わかんないんだよね
309:デフォルトの名無しさん
15/12/20 09:35:11.37 jqjYNF9z.net
それで言い返したつもりなんだろうけど、
静的言語でなんでも動的にできるなんて言ってないがねw
逆に静的に決めることが利点なわけで、動的でやろうとは思わない。
そりゃ動的にすることも出来なくはないけど、できればやりたくない。
310:デフォルトの名無しさん
15/12/20 10:57:03.24 bx1tuSu0.net
そうなんだよね
C#には動的型言語みたいな機能のdynamicがあるけど
静的型言語を使っておいて全部の変数をdynamicで書こうとは思わないよね
キャストもなるべくしないようにすべし、というのが静的型の文化
一方で最近の動的型言語は静的型の機能を吸収していっているが
とても中途半端でジェネリックが無い
まさに、動的型の静的機能は静的型言語でできることの一部ですら無いまがい物だね
311:デフォルトの名無しさん
15/12/20 11:15:20.03 NKmQ5FTU.net
>>304
想像はできてない、かも分からんが
お前も言えてないよ
312:デフォルトの名無しさん
15/12/20 11:29:25.89 OjtiikyN.net
動的の利点はプロトを素早く書けるってところだろ。
あとは稼働を止めずにリプレースできるとか。。
静的言語の問題点は
静的解析してりゃテストはいらんとか言い出す馬鹿が発生し易いってことかな。
313:デフォルトの名無しさん
15/12/20 11:47:57.68 jqjYNF9z.net
> あとは稼働を止めずにリプレースできるとか。。
"その方法" は、クラウドの時代になって様変わりしたけどねw
今はサーバーにログインして、一台一台ソースコードを更新なんて
危険なやり方でリプレースしたりしませんw
新しいバージョンにしたVMを作成して最終確認した後
接続先を新しいVMに切り替えるんですよ。
このやり方に動的の利点なんかありません。
314:デフォルトの名無しさん
15/12/20 11:49:22.93 jqjYNF9z.net
× 静的言語の問題点は静的解析してりゃテストはいらんとか言い出す馬鹿が発生し易いってことかな。
○ 静的言語の問題点は静的解析してりゃテストはいらんとか言い出すんでしょう?
とかいいだす、動的馬鹿が発生し易いってことかなw
静的だとテストはいらんと言ってるのは動的厨だけ。
315:デフォルトの名無しさん
15/12/20 11:56:38.95 ZootpjTa.net
静的でも値に対するテストはするよな?それは型チェックで分からないからな
で、値に対するテストに通れば、型チェックも通ってると思うんだけど、
なぜか静的ドカタは動的だと型のテストコードも必要と思い込んでるみたいなんだよね
なんで?
316:デフォルトの名無しさん
15/12/20 12:49:50.49 jqjYNF9z.net
>>311
いろいろと勘違いしてるねw
重要なのは、テストも含めた開発のコスト。問題点は早く見つかる方がコストは低くなる。
そしてもう一つ。型チェックというのは正確にはインターフェースのチェック。
引数(シグネチャ)が正しいこと。クラスの継承関係などが正しいこと。
インターフェースのチェックだけに限れば、静的型はほぼ完全にテストできている。
(ほぼというのは意図的に静的型の型安全性を捨てた場合を除くから)
テストコードというのは、単体テストが主で、これはインターフェースのテストではない。
単体テストでインターフェースのテストを静的型と同等レベルまで動的型でテストするには
漏れがないといえるレベル(少なくともカバッジ100%)の完全なテストが必要になる。
しかし漏れがないことを証明する方法はないし、そもそもテストに問題がないことを証明する方法もない。
ちなみに、カバレッジ100%を目指せと言うと、それはやめろと言われる(笑)
テストを書くというのはコストがかかる。メンテナンスするのにもコストは掛かる。
テストを書かなくてもテストを書いたのと同じ効果が得られるのであれば、それに越したことはない
それがテストの一部であったとしても、テストのコストを下げることになる。
テストはどれだけやっても十分とはいえないんだから多ければ多いほどいい。コストがかからない方法(静的)ならなおさらだ。
動的型は完璧なテストがあれば十分だというが、そのような完璧なテストは存在しない。
TDD再考 (1) ? テストファーストとユニットテストへの死刑宣告 ( URLリンク(ubiteku.oinker.me) )
TDD再考 (2) ? 何故、ほとんどのユニットテストは無駄なのか? ( URLリンク(ubiteku.oinker.me) )
テスト駆動開発(TDD)はもう終わっているのか? ( Part 1 URLリンク(postd.cc) )
テスト駆動開発(TDD)はもう終わっているのか? ( Part 2 URLリンク(postd.cc) )
317:デフォルトの名無しさん
15/12/20 12:51:46.50 akw4ximt.net
なんだかよくわからんがVisualC#™️を信仰するおっさんが
自分がVisualC#™️推しだってことは隠して
Microsoft™️ .NETフレームワーク専用言語の
「静的言語(=Visual C#™️)は世界一なんだぞぉ!」
って主張するスレってことでいいかね?
318:デフォルトの名無しさん
15/12/20 12:55:58.25 Ava23gur.net
>>312
あ、ドカタ界隈ではインターフェースのテストはしてないんだ
なるほどね
319:デフォルトの名無しさん
15/12/20 13:00:45.19 jqjYNF9z.net
>>314
インターフェースのテストをしてるんだw
書いてみてよ。
320:デフォルトの名無しさん
15/12/20 13:05:09.23 jqjYNF9z.net
インターフェースのテストの意味がわからないお馬鹿さんがいるようなので
具体的に説明する。
foo(TypeA a, TypeB b, TypeC c) という関数がある。
この関数を使っている所がソースコードのあちこちに存在する。
静的型付けであれば、このインターフェース、つまり引数の型が違うものを
全て教えてくれる。
>>314はこのインターフェースのテストを書くらしいw
俺は実行して見る以外のやり方を知らないよ。
実行すればわかる? そうだね。”漏れがなく完璧なテストがあればね"
さあテストを書くお仕事だ。テストを書くのはコストは掛かるぞ。
テストをメンテナンスするのにもコストは掛かるぞ。
静的型付けでは、このインターフェースのテストにはコストはかからない。
321:デフォルトの名無しさん
15/12/20 13:10:54.30 hK9ny108.net
>>312
> インターフェースのチェックだけに限れば、静的型はほぼ完全にテストできている。
逆だろ
静的型ではほぼ完全にチェックできることしか書けないように、
本来ソフトウエアにできることに制限を設けてるだけ
322:デフォルトの名無しさん
15/12/20 13:11:34.10 Ava23gur.net
>>316
ドカタ界隈ではその関数を使ってるソースコードの単体テストはしないんだ
なるほどね
323:デフォルトの名無しさん
15/12/20 13:22:25.74 jqjYNF9z.net
>>317
> 静的型ではほぼ完全にチェックできることしか書けないように、
> 本来ソフトウエアにできることに制限を設けてるだけ
プログラミングの進化に伴い、なんでもできるアセンブラから制限をかけることで、
より安全なコードが書けるように進化しているという事実をどう考えてるのか?
>>318
> ドカタ界隈ではその関数を使ってるソースコードの単体テストはしないんだ
だからいったろ?
静的型のインターフェースのテストと同等レベルのテストを行うには
完璧なテスト(カバレッジ100%)が必要。だがテストが完璧だと保証する方法はない。
テストにバグがないことを保証する方法もない。
そしてカバレッジ100%を目指せというと、それはやめとけと言われる(笑)
もちろんカバレッジ100%では完璧ではない。特に動的型付けでは
コードパスによって引数は大胆に変わる可能性があるし、コード自体も変わる可能性がある。
あるコードを実行したら、オレオレパッチで関数のシグネチャが変わることさえも。
テストはどれだけやっても確実にはならない。ソースコードの単体テストに加えて
静的型付けのコンパイルチェックがあれば、単体テストだけよりもさらに完璧になる。
鬼に金棒ってやつだ。
所詮お前は、単体テストがあれば十分だって考えてる
あまちゃんってこと。