[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2ch.scのread.cgiへ]
Update time : 08/30 02:18 / Filesize : 310 KB / Number-of Response : 1019
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

オブジェクト指向は愚かな考え。この世は計算式 ★2



1 名前:デフォルトの名無しさん [2015/12/15(火) 13:23:08.06 ID:Rib62xXq.net]
オブジェクト指向は愚かな考え。排便メソッドを実装した人間クラスから美少女クラスが作れない。
https://twitter.com/ProgrammingMono/status/665702678006140928

研究グループは、血管新生注において血管が伸長する際の血管内皮細胞注運動を制御するしくみを、生物学と数理モデル・
コンピュータシミュレーションを融合させた先端的な研究手法により明らかにしました。

生物は、最小の機能単位である細胞が寄り集まった多細胞体です。しかし、細胞の集まりが、組織や器官といった
秩序ある形態や構造をつくり機能するしくみはほとんど分かっていません。中でも血管は、体中の全組織に十分な
酸素や栄養源を効率よく供給するため、組織や組織の間に入り込み、血管外の環境との相互作用により、巧妙な
枝分かれ構造をとっています。

これまでに本研究グループは、新しく血管がつくられる(血管新生)際の細胞の動きに着目し、特に血管内皮細胞の
動きをリアルタイムで可視化し、定量的に捉えることを可能にしてきました。

今回さらに、血管の伸長を制御するしくみについて、細胞が自発的に自らを制御して動く過程(自律的過程)と、
隣接した細胞から適宜影響を受けて動く過程(協調的過程)がうまく共存することで、全体の動きが巧みに統制
されていることを世界に先駆けて実証しました。

興味深いことに、血管内皮細胞が前後したり、お互いに追い抜きあったりという血管新生で見られる複雑な細胞集団の
動きを制御している中枢部分は、細胞一つ一つの動き(スピードと方向性)の「確率的な変化」として十分説明できる
ことをコンピュータシミュレーションで実証しました。
www.jst.go.jp/pr/announce/20151120-2/#YOUGO3

前スレ
オブジェクト指向は愚かな考え。この世は計算式
peace.2ch.net/test/read.cgi/tech/1447990379/

152 名前:デフォルトの名無しさん mailto:sage [2015/12/18(金) 16:33:50.41 ID:SLQY/0qq.net]
静的解析って実はコンパイラと同じ技術を使っていて実は実行してないように見せかけて実行してるんだよね。

153 名前:デフォルトの名無しさん mailto:sage [2015/12/18(金) 16:41:48.59 ID:SRTwlmwS.net]
>>150
IDEの静的解析がコンパイラと同じ技術を使っているのは当たり前
構文解析するんだからな

しかし
「実はコンパイラと同じ技術を使っていて実は実行してないように見せかけて実行してる」
これはおかしな言い回しだな
だって、コンパイラはソースコードをコンパイルするだけで実行はしないからな
コンパイラと同じ技術==プログラムを実行
ってのはおかしな発想だ

もう少しまともな言葉で指摘すると
構文解析や意味解析をすることと、プログラムを実行する事は別物だ

154 名前:デフォルトの名無しさん mailto:sage [2015/12/18(金) 16:43:35.89 ID:7Erpdy7Z.net]
>>150が言ってるのは

構文解析や意味解析を実行する事 = プログラムを実行する事

どちらも実行してるでしょ?


ねー、一緒だよ。(*´・ω・)(・ω・`*)ネー

155 名前:デフォルトの名無しさん mailto:sage [2015/12/18(金) 16:48:32.95 ID:SRTwlmwS.net]
全然違うし
プログラムを実行するためには明確なインスタンスを与えなければならない

かたや、構文解析にはインスタンスはいらない

インスタンスがなくてもわかる、言い換えればプログラムを実行しなくてもわかる、エラーがあるから
コンパイルエラーというものが存在している

156 名前:デフォルトの名無しさん mailto:sage [2015/12/18(金) 16:54:10.35 ID:SRTwlmwS.net]
a+b という式があったとして
この式がどういう構造になっているか静的に構文解析することと
実際にa+bを計算するために実行することとは
全くの別物ということがわからない知能のままで32スレも書き込んでいたのかと思うと
頭が痛くなるな

157 名前:デフォルトの名無しさん mailto:sage [2015/12/18(金) 16:54:12.86 ID:SLQY/0qq.net]
コードを見て頭の中で実行できなかったらプログミングなんて出来ない。>>153 は一行ずつコンパイルしてプログラムを書いているのかな?

158 名前:デフォルトの名無しさん mailto:sage [2015/12/18(金) 17:00:07.74 ID:SRTwlmwS.net]
言っていることが全く意味不明
コンパイルと出来上がったプログラムを実行することは別物なのは当たり前
構文解析や意味解析は対象のプログラムを実行してはいない
このことは、コンパイルエラーとランタイムエラーという2つのエラーが有ることからも明白
コンパイルエラーはプログラムを実行せずともわかるエラー
ランタイムエラーはプログラムを実行しなければわからないエラー
2つに分かれているということは、別物だということ

159 名前:デフォルトの名無しさん mailto:sage [2015/12/18(金) 17:02:58.30 ID:SLQY/0qq.net]
部分実行はしてるよ。完全実行はしてないだけで。しかも専用のインタープリターで実行するからリンカとかコンパイラーとか無関係なんだよね。

160 名前:デフォルトの名無しさん mailto:sage [2015/12/18(金) 17:14:17.63 ID:SLQY/0qq.net]
>>156 あなたはちょっと文章が長いから馬鹿だと思われたくなかったら短く縮めたほうが良い。



161 名前:デフォルトの名無しさん mailto:sage [2015/12/18(金) 17:42:12.82 ID:SRTwlmwS.net]
そもそもからして>>150は自分で「静的解析」と言っているわけで
静的解析なのに実行していたらそれは動的解析の手法だから
そもそも言葉の定義が怪しいんだよね

162 名前:デフォルトの名無しさん mailto:sage [2015/12/18(金) 18:03:20.55 ID:i13cEfwD.net]
まあ、ランタイムエラーよりコンパイルエラーの方が尊い、で言い尽くされるな。(個人の感想です)

163 名前:デフォルトの名無しさん mailto:sage [2015/12/18(金) 18:08:17.19 ID:V1Ii3Ho8.net]
静的も動的も適材適所だけど、入力補完の快適さはどうしても静的言語の勝ちだからなぁ
あの気持ちよさはやみつきになる

164 名前:デフォルトの名無しさん [2015/12/18(金) 18:12:08.05 ID:OysfGD3G.net]
>>161
これ本当に同意
静的言語から入ると動的言語の補完の無能さに恐れ入る

165 名前:デフォルトの名無しさん mailto:sage [2015/12/18(金) 18:19:29.16 ID:47x3yklW.net]
>>162
後学のため、実際に試してPharo Smalltalkとも比較したいので、
どの静的言語のなんというIDEから入って、
どの動的言語のなんというIDEの補完の無能さに恐れ入ったか教えてもらうことできます?

166 名前:デフォルトの名無しさん mailto:sage [2015/12/18(金) 20:03:52.18 ID:7Erpdy7Z.net]
動的言語でも補完はできるよ(笑)

できるできないの話じゃなくて、
できることの量、正確さが、動的言語では圧倒的に少ない。

そういう話だからね。


補完以外もそうだけどさ。

167 名前:デフォルトの名無しさん mailto:sage [2015/12/18(金) 20:04:50.48 ID:7Erpdy7Z.net]
あと、補完ができるにしても、実行時にしか出来ない。
という欠点も有るよね。

実行時にしか出来ないから、補完するためだけに
実行しなければいけない。

168 名前:デフォルトの名無しさん mailto:sage [2015/12/18(金) 20:06:22.22 ID:ZY6DzZKi.net]
>>163
数値オブジェクトに対して文字列オブジェクトのメソッドまで補完候補に出てくるようなゴミは論外なんだよ引っ込んでろ

169 名前:デフォルトの名無しさん mailto:sage [2015/12/18(金) 20:27:55.99 ID:47x3yklW.net]
>>166
ひどいなぁ…。で、試したのは Pharo Smalltalk のどのバージョン?
ちなみに手元の Pharo 4.0 だと

| num |
num := 1.23.
num

まで入れて as と打っても文字列オブジェクトのメソッド名は出てこないけど?

170 名前:デフォルトの名無しさん mailto:sage [2015/12/18(金) 20:29:21.85 ID:47x3yklW.net]
>>165
え、どういうこと? コードをパーズして抽象構文木にするのも実行なの?



171 名前:デフォルトの名無しさん mailto:sage [2015/12/18(金) 20:40:03.63 ID:ZY6DzZKi.net]
>>167
意地悪に書けばこういうことだよ
実行すれば分かるのは165も書いてるだろ

function foo() {
if (false) { bar(1) }
}

function bar(num) {
num.ここで補完
}

172 名前:デフォルトの名無しさん mailto:sage [2015/12/18(金) 20:43:48.66 ID:ZY6DzZKi.net]
別に169のコードに意味があると言いたいわけじゃなくて、
あれでも数値メソッドだけ補完できるなら実行しなくても補完できてると言えるだけだぞ
勘違いすんなよ

173 名前:デフォルトの名無しさん mailto:sage [2015/12/18(金) 21:31:26.55 ID:7Erpdy7Z.net]
>>168
(静的な)コードをパーズして抽象構文木にするだけで
なんで動的に決まるオブジェクトの中に関する補完ができると思うのか?

静的に補完できないから、動的に補完するしかないんだろ?

174 名前:デフォルトの名無しさん mailto:sage [2015/12/18(金) 21:32:07.91 ID:DSnroAdk.net]
>>131
お前の言ってることは「本番中に発生したらダメ」っていわれてんの分からんのかな?

175 名前:デフォルトの名無しさん mailto:sage [2015/12/18(金) 21:33:48.00 ID:SLQY/0qq.net]
パース

176 名前:デフォルトの名無しさん mailto:sage [2015/12/18(金) 21:34:19.00 ID:DSnroAdk.net]
本番ってのはお前の言ってることは「解決済み」でなければならないし、デバッグ中なら他の手段でなんとかなるレベル
実にくだらんし、そんなことを高らかに言ってると他のユーザーにも迷惑千万

177 名前:デフォルトの名無しさん mailto:sage [2015/12/18(金) 21:51:31.46 ID:k38RLsj8.net]
えーと、静的型付けの言語を使ってる奴は、単なる土方ってことでOKって話しなのか?

178 名前:デフォルトの名無しさん mailto:sage [2015/12/18(金) 22:00:03.43 ID:7Erpdy7Z.net]
>>175
理由は? キッチリした仕事をやる=土方という定義なのかね?w

179 名前:デフォルトの名無しさん mailto:sage [2015/12/18(金) 22:04:15.15 ID:47x3yklW.net]
>>169
たしかにそれは意地が悪い。w

180 名前:デフォルトの名無しさん mailto:sage [2015/12/18(金) 22:09:28.58 ID:k38RLsj8.net]
>>176
ここまでで書かれている内容を要約すると、「静的型付けの言語では、typoをチェックしてくれる」って事だけなんだが?



181 名前:デフォルトの名無しさん mailto:sage [2015/12/18(金) 22:20:39.15 ID:ZY6DzZKi.net]
静的型ならコンパイラがあればメモ帳でもできるtypoチェックと
IDE等のサポートが必要な補完を一緒にするなんてセンス無さすぎ

182 名前:デフォルトの名無しさん mailto:sage [2015/12/18(金) 22:21:45.22 ID:7Erpdy7Z.net]
>>178
いや、だからなんでtypoをチェックしてくれる道具を使うと土方なのさ?
typoをチェックしてない道具を使って、typoと格闘する俺凄いとかそういう話?w


あと、それからtypoってよくあるミスであり、typoが原因で
大きなバグになることも有る。そして静的型が調べてくれるのは
typoだけじゃないからね。他にも説明しろっていうのなら説明するけど。

183 名前:デフォルトの名無しさん mailto:sage [2015/12/18(金) 22:28:26.64 ID:LnB+58/e.net]
静的型と動的型っていいとこ取りはできないの?
オブジェクト指向と関数型ならできるのに。

184 名前:デフォルトの名無しさん mailto:sage [2015/12/18(金) 22:32:25.87 ID:7Erpdy7Z.net]
>>181
できるよ。

ただし、有る情報を捨てるのと、無い情報を補完するのを比べると、
無い情報を補完するのは大変。

静的型で動的型風にするには、オブジェクト型で扱って
特定の型に強制的にキャストすればいい。
あとリフレクションの機能を使ったり、
Javaだとバイトコードを変更したりもできるね。

185 名前:デフォルトの名無しさん mailto:sage [2015/12/18(金) 22:43:59.79 ID:7Erpdy7Z.net]
ぶっちゃけ動的型のメリットってタイプ数が少ないってだけで、
そもそもタイプ数の違いなんて、大した事じゃないし
その減ったタイプ数は、静的型の可読性の高さ+補完で相殺される程度だろう。

動的にクラスをいじれるというけれど、それってソースコードがあれば
ソースコードにパッチを当てれば良い程度の話だったりする。

186 名前:デフォルトの名無しさん mailto:sage [2015/12/18(金) 22:44:30.19 ID:LnB+58/e.net]
>>182
うーん、あまりいいとこ取りとは思えないな...

187 名前:デフォルトの名無しさん mailto:sage [2015/12/18(金) 22:47:37.08 ID:k38RLsj8.net]
>>180
ごめん、typoで困ったことがないから全く理解ができん

188 名前:デフォルトの名無しさん mailto:sage [2015/12/18(金) 22:55:36.10 ID:7Erpdy7Z.net]
>>185
> ごめん、typoで困ったことがないから全く理解ができん

それが上級者と初心者の違いだね。
静的型のありがたさがわからないのは、経験が足りないからだって
分かったじゃないかw

cpplover.blogspot.jp/2014/04/openbsd.html
> このコミットは、Makefileの中で、OpenSSLでheatbeatを無効にするマクロを定義するよう、
> コンパイラーオプションを指定するものだ。ただし、無効にするマクロは、
> OPENSSL_NO_HEARTBEATSなのに、このコミットで定義されているマクロは、
> OPENSSL_NO_HEARTBEATだ。なんと、typoをしている。これでは何の意味もない。

189 名前:デフォルトの名無しさん mailto:sage [2015/12/18(金) 22:56:39.43 ID:47x3yklW.net]
たしかに
Smalltalk でも typo で困ることはない

190 名前:デフォルトの名無しさん mailto:sage [2015/12/18(金) 22:58:14.53 ID:7Erpdy7Z.net]
困ることがないのは、単に経験不足ってだけなんだよね。

巨大なシステムを複数の人で作る。最初に開発した人以外がいじる。
そうなってくると、些細なミスでも、原因の調査に時間がかかるんだ。

数百行程度の小さいスクリプトをいじっている程度なら、
大して時間もかからず、困ると感じないだろうけどさw



191 名前:デフォルトの名無しさん mailto:sage [2015/12/18(金) 23:08:19.10 ID:k38RLsj8.net]
Option Explicitをtypo対策に使う事を推奨する馬鹿と同じ匂いがする...

192 名前:デフォルトの名無しさん mailto:sage [2015/12/18(金) 23:10:41.85 ID:qLDL3KKH.net]
「静的言語のメリットはIDEのおかげでtypoがないことなのだぁ!どぉだぁ!?」
「…」
「動的言語はいっぱいタイプするからタイプミスが多いんだろ?ん!ん?」
「…」

ギャグ漫画日和かこれ。

193 名前:デフォルトの名無しさん [2015/12/18(金) 23:13:51.90 ID:XVaxeCrB.net]
>>189
そんなにおかしなことじゃないと思うけどなあ

194 名前:デフォルトの名無しさん [2015/12/18(金) 23:14:23.82 ID:XVaxeCrB.net]
>>190
タイプミスは重要だよ

195 名前:デフォルトの名無しさん [2015/12/18(金) 23:14:54.43 ID:6PgNGDd6.net]
プログラマはMacを使ってるってマジ?
hayabusa3.2ch.net/test/read.cgi/news/1450395043/

196 名前:デフォルトの名無しさん mailto:sage [2015/12/18(金) 23:29:42.98 ID:k38RLsj8.net]
>>192
タイプミスは、ロジックを追えば必ず見つかるミス
怖いのはタイプミスではないtypo

197 名前:デフォルトの名無しさん [2015/12/18(金) 23:43:17.54 ID:XVaxeCrB.net]
>>194
そりゃいつかは見つかるだろうが、それにかける労力が大きいだろ。

198 名前:デフォルトの名無しさん mailto:sage [2015/12/18(金) 23:47:14.07 ID:7Erpdy7Z.net]
だいたい、動的言語でも「できる」という話に持って行こうとするんだよなw
重要なのは「簡単に」できるかどうかであって。

199 名前:デフォルトの名無しさん [2015/12/18(金) 23:48:52.66 ID:XVaxeCrB.net]
>>196
だねー。

200 名前:デフォルトの名無しさん mailto:sage [2015/12/18(金) 23:54:41.63 ID:k38RLsj8.net]
タイプミスを調べるのに大した労力なんていらんがな...
リレーシーケンスの配線ミスを探す方が遥かに大変だよ



201 名前:デフォルトの名無しさん mailto:sage [2015/12/19(土) 00:00:09.78 ID:APSLa6hA.net]
> タイプミスを調べるのに大した労力なんていらんがな...

な、経験が全然足りないんだよw

202 名前:デフォルトの名無しさん [2015/12/19(土) 00:05:06.20 ID:EQ0D2wf/.net]
俺タイプミスしねーからわかんねーなその気持ち。静的だからね。

203 名前:デフォルトの名無しさん mailto:sage [2015/12/19(土) 00:15:43.81 ID:APSLa6hA.net]
静的でも手抜きして、例えばyaml形式の設定ファイルを読み込んで、
アプリの全体から文字列でyamlファイルのデータにアクセスするような
コードを書いていると同じようにタイプミスすることあるよ。

こういうのは、設定オブジェクトを作って、内部ではyamlでもjsonでも
対応可能な設計にしておくと、アプリからは設定オブジェクトのメソッドや
プロパティを参照するだけになるから、間違いが無くなる。
(正確にはタイプミスが起こりえる場所を設定オブジェクトに押し込められる)

更に設定オブジェクトのリファクタリングで名前や階層を変えたり
単一値を複数値扱えるような変更があっても、設定オブジェクトを変更すると
それに依存する場所全てを明らかにしてくれる。

204 名前:デフォルトの名無しさん mailto:sage [2015/12/19(土) 00:46:06.06 ID:u/d4wrI0.net]
適当な範囲でのテストを書いてないからタイポがどうとかこだわるんだろう。
たしかにテストがない場合の静的チェックは相当嬉しいものがあるが。
テストがまともにある場合に動的と静的の違いなんて 5 %以下だよ。

205 名前:デフォルトの名無しさん mailto:sage [2015/12/19(土) 01:17:50.15 ID:APSLa6hA.net]
テスト万能説はやめろよw

どんなテストを書くっていうのか?
タイポしてないことを確かめるテストは書けない。

できるとしたら、何かのテストのついでとして、エラーが起きれば
タイポではないか? ということになるが、エラーが出たあとに、
ん? なんでエラーになった? バグかな?ってコードを調べるのも馬鹿らしい。
タイポしていてもエラーにならないことだってある。

そもそも、完璧なテストは書けるのか?って話もある。
適当な範囲のテストを書いてないからというが、タイポはミスだ。
人間はミスをする。ならばテストを書くことに対してもミスするだろう。
ミス無くテストを書いたという保証は得られない。

プロトタイプ的な実験コードに対してもテストを書くのか?という話もある。
テストを書く=時間がかかる だ。

テストは誰かが勝手に作ってくれるものじゃない。
テストを書く時点でコストがかかっている。

206 名前:デフォルトの名無しさん mailto:sage [2015/12/19(土) 01:21:33.29 ID:+ddvqKbr.net]
出来なくても悔しくないもんって意見ばかりのところ恐縮ですが
Pythonはtypoも補完も静的解析できるからね(eval除く)
一緒にしないでね

207 名前:デフォルトの名無しさん mailto:sage [2015/12/19(土) 01:24:52.39 ID:nEJLJZaD.net]
むしろ、できるの普通だから動的だとできねぇ!って言ってる人の仮想敵がわからんw

208 名前:デフォルトの名無しさん mailto:sage [2015/12/19(土) 01:26:24.39 ID:dNXWfsX0.net]
そもそも静的型言語なら最近はIDEが偉いから
typoぐらいならコンパイルするまでもなくIDEが教えてくれる
VSなら間違っているところのコードの下にリアルタイムで赤の波線が出る
これでもかってぐらいわかりやすく教えてくれる
コンパイルする前の、まさに編集している段階でエラーがわかるから
その場でサクっと直せば良いだけ
コンパイルして、さらにテストして初めてtypoが分かるのと比べると
生産性が段違いだ

209 名前:デフォルトの名無しさん mailto:sage [2015/12/19(土) 01:28:40.84 ID:APSLa6hA.net]
今はタイポの話をしたが、型チェックに関して言えば、
型チェックはテストでは検出できない。

なぜならば、これは関数の呼び出し方の間違いだからだ。
テストとは通常、関数が与えられた引数で正しい答えを返すことをテストする。
与える引数は正しいことが前提となっている。

例えばある関数の引数の数が変わったとしよう。テストも引数の数を変えるだろう。
しかし、実際のコードの呼び出し部分、ここの引数を変えるのを忘れたら、
テストは通るのに実際のコードでエラーが発生することになる。

もちろん呼び出し側のテストがしっかり書かれていればそちらでエラーが出るだろう。
つまり、Aという関数の仕様を変えた時、その関数を使用している場所全て、
関数B、C、D、E・・・でエラーが発生する。さあ大変なデバッグ作業の始まりだ!
もし、これらの関数でテストに見逃しがあったりしたならば、バグになるのは明白だ。

これは適当な範囲でのテストを書いてないからという程度ですむ話じゃない。
完璧なテストを書かないかぎり、呼び出し方が間違っていないかどうかはわからない。
完璧なテストを書けばいい?もし世の中に完璧なテストが有るならば、バグは一切無いだろうなw

210 名前:デフォルトの名無しさん mailto:sage [2015/12/19(土) 01:29:47.38 ID:APSLa6hA.net]
>>204
> Pythonはtypoも補完も静的解析できるからね
できるできないの話じゃない。
できる量が違うという話。

静的で出来ることの「一部」が出来たからって
何も凄くはないんだよ。



211 名前:デフォルトの名無しさん [2015/12/19(土) 01:36:22.40 ID:P/E9W26M.net]
>>204
どうやんの?

212 名前:デフォルトの名無しさん mailto:sage [2015/12/19(土) 01:47:54.86 ID:+ddvqKbr.net]
>>208
出来ないコード出してみ

>>209
jedi-vim

213 名前:デフォルトの名無しさん mailto:sage [2015/12/19(土) 02:13:01.48 ID:APSLa6hA.net]
>>210

Java
void func(String str) {
  str. ← 補完できる
}

Python
def func(str):
  str. ←補完できない

214 名前:デフォルトの名無しさん mailto:sage [2015/12/19(土) 02:38:39.06 ID:wzwqX1ml.net]
>>211
それは無理だけど、動的型は関係なかったね
静的型でも型推論に必要な情報ないからね

def func(str: str) なら出来るよ

215 名前:デフォルトの名無しさん mailto:sage [2015/12/19(土) 02:42:51.49 ID:VdM6quSm.net]
それはwww

216 名前:デフォルトの名無しさん mailto:sage [2015/12/19(土) 02:45:46.18 ID:APSLa6hA.net]
>>212
型推論っていうのは、型が断定できるときに記述を省略できる
"追加機能" であって、型推論を持ち出す意味が無いんだが。

で、動的型むりでしょ?w
静的型はできるでしょw

ほら、言ったとおり。

217 名前:デフォルトの名無しさん mailto:sage [2015/12/19(土) 02:55:03.23 ID:APSLa6hA.net]
動的型の「できる」っていうのは、ローカル変数など
大概狭い範囲での話なんだよね。

どちらかと言えば、狭い範囲のものは、その場所だけ
注意してみればいいからそこまで必要ない。

静的型の型チェックが便利なのは、広い範囲の依存関係の矛盾を暴き出すことだから
こういうのは単体テストが主である自動テストではテストがしづらい部分。

つまり、関数の引数とかクラスの継承関係とかオブジェクトのメソッドとか
そういう「インターフェース」に関わる部分の矛盾のテストができる。

218 名前:デフォルトの名無しさん mailto:sage [2015/12/19(土) 02:58:01.15 ID:OdWxPmQd.net]
haskellやocamlでは、取り敢えず関数名と引数だけ書いて(型は書かない)
中身はundefinedやassert falseにしておき(つまり、まだ実装しない)
関数を呼び出す側を先に実装する手法をとる事が良くある。
いわゆるトップダウン型の実装ね。関数型と相性が良いけど、仕様が明確な大規模開発にも向いてる。

で、そのときは呼び出し側の使われ方から型推論できるから
引数の型を書かなくても型推論できる。
ドカタ言語使いには想像も出来ないだろうけど、そういう世界もあるってこと。

219 名前:デフォルトの名無しさん mailto:sage [2015/12/19(土) 02:59:35.78 ID:APSLa6hA.net]
Javaでは、取り敢えず関数名と引数だけ書いて(型はObjectにしておく)
関数を呼び出す側を先に実装する手法をとる事が良くある。

それと何も変わらないNE!

220 名前:デフォルトの名無しさん mailto:sage [2015/12/19(土) 03:01:04.70 ID:OdWxPmQd.net]
>>217
それObjectのメソッドだけしか補完出来ないけど?



221 名前:デフォルトの名無しさん mailto:sage [2015/12/19(土) 03:02:59.96 ID:APSLa6hA.net]
>>216
その文章から、どういった理由でドカタ言語なのかわからないのは、
お前が、ドカタということで心の安定を保つためだと思ってるYO!

222 名前:デフォルトの名無しさん mailto:sage [2015/12/19(土) 03:05:24.53 ID:APSLa6hA.net]
>>218
呼び出し側の使われ方から推論できるよ?

正確には「呼び出し側が使われた時」っていうのは
呼び出し側の型も決定したってことだから、
関数の実装をするときにその型に書きなおすだけでいい。

関数の実装するんだから、すぐ上の行を編集するだけ。

223 名前:デフォルトの名無しさん mailto:sage [2015/12/19(土) 03:06:46.74 ID:OdWxPmQd.net]
>>219
どういった理由かも分からないのに、ドカタ言語と言われて
君はJavaを連想してしまったんだね。
話の流れ的にpythonでもsmalltalkでもおかしくなかったのに。

224 名前:デフォルトの名無しさん mailto:sage [2015/12/19(土) 03:09:08.23 ID:APSLa6hA.net]
>>221
へ? Javaの話を今までしていたその続きをしただけだけどw

うわー、やっぱりこう他の言語をディスることで
心の安定を(笑)うわーwww

225 名前:デフォルトの名無しさん mailto:sage [2015/12/19(土) 03:09:11.65 ID:OdWxPmQd.net]
>>220
計算機が正しく自動的にやってくれることを
手で書くのはアホのする事ですよ
typoしてIDEに赤線引かれちゃうかもよ?

226 名前:デフォルトの名無しさん mailto:sage [2015/12/19(土) 03:10:20.46 ID:APSLa6hA.net]
>>223
> 計算機が正しく自動的にやってくれることを

呼び出し側を間違えたら、計算機は間違いますよw

計算機は、書いた通りに動く。
何が正しいかはプログラマが決めるもの。

227 名前:デフォルトの名無しさん mailto:sage [2015/12/19(土) 03:12:18.93 ID:APSLa6hA.net]
呼び出し側から推論すると言っても、
呼び出し側が矛盾することだってあるしね。

fooという関数をintを引数にして呼び出している場所と
stringを引数にして呼び出している場所があったらどうなるのか。

定義は一箇所にするもの。
関数の定義こそが一箇所に絞り込める唯一の場所。

使ってる場所で、決めるっていうのは
間違いの元にしかならないよ。

228 名前:デフォルトの名無しさん mailto:sage [2015/12/19(土) 03:15:03.21 ID:OdWxPmQd.net]
>>224
コンパイラが型推論して自動生成した型を見ても間違いに気がつかないなら
手で書いても間違ってるだろうね

229 名前:デフォルトの名無しさん mailto:sage [2015/12/19(土) 03:16:20.72 ID:OdWxPmQd.net]
あ、もしかして型推論した結果を出力できるって知らなかったかな?
ゴメンね分からない話して。

230 名前:デフォルトの名無しさん mailto:sage [2015/12/19(土) 03:20:44.63 ID:APSLa6hA.net]
静的型の型推論って機能はコンパイラが推論して
型が決定できた時に、記述を省略してくれる機能。
だから(推論が)正しいか、推論できないかの2つに別れる。
推論できた時、それは正しい。

だけど動的型の場合、推論は本当に推論でしか無いんだよね。
こうじゃないか?って思いました。コンパイラがいう。

だから、計算機は正しく自動的にやってくれるわけじゃない。
所詮、推論でしかない。



231 名前:デフォルトの名無しさん mailto:sage [2015/12/19(土) 03:21:26.48 ID:APSLa6hA.net]
>>227
やっぱり正しく自動的にやってくれるんじゃないんですねwwww

232 名前:デフォルトの名無しさん mailto:sage [2015/12/19(土) 03:24:05.57 ID:srVmyYNw.net]
>>228
静的型の型推論は推論できた時、それは正しい

動的型の場合、所詮、推論でしかない
この二つは整合するのかい? []
[ここ壊れてます]

234 名前:デフォルトの名無しさん mailto:sage [2015/12/19(土) 03:30:45.67 ID:OdWxPmQd.net]
>>228
最後まで書き込んでたら勝ちってゲームしてるつもりかな?
もうちょっと中身のある事を書こうね。

関数型言語の型推論だと、複数の場所で矛盾する型を書いたら即座にエラーになるから間違いを早く発見できるし(>>217は型を書く段階まで発見できない)、
間違っていたときも型推論の出力を見ながら修正できる。
たしか、早くより少ない労力でエラーを発見できる方が優れてるんだよな?

235 名前:デフォルトの名無しさん mailto:sage [2015/12/19(土) 04:45:37.26 ID:ysM2oFx/.net]
動的型の場合、型が矛盾することはない。
なぜなら、どんな型でも入れることが可能だからだ。

なお型が矛盾しないからといって、正しく動くわけじゃないw

236 名前:デフォルトの名無しさん mailto:sage [2015/12/19(土) 05:08:30.90 ID:srVmyYNw.net]
型って厳密には何の型の話をしてる?
入れるって書いてるから変数型かな

237 名前:デフォルトの名無しさん mailto:sage [2015/12/19(土) 05:20:10.46 ID:ysM2oFx/.net]
変数もだけど、それ以上に重要なのは
関数の引数の型。

238 名前:デフォルトの名無しさん mailto:sage [2015/12/19(土) 06:11:42.29 ID:uwvw3g3I.net]
>>232
一方、静的型付言語でも、型が矛盾しないからといって、正しく動くわけでもないw

239 名前:デフォルトの名無しさん mailto:sage [2015/12/19(土) 06:13:31.81 ID:uwvw3g3I.net]
>>231
静的型付関数型言語で型エラーの本当の原因を探すよりも
Smalltalkで実行時エラーの本当の原因を探すほうが遥かに簡単で間違えにくい。

240 名前:デフォルトの名無しさん mailto:sage [2015/12/19(土) 07:30:05.05 ID:TW2fFhuS.net]
そもそも静的型付けのヒトは、コンパイルが通れば
型の不整合によるエラーはぜったい起こらないという前提なの?
そんなちゃんとした型システムの言語、あんたら使ったことないだろ



241 名前:デフォルトの名無しさん mailto:sage [2015/12/19(土) 07:51:26.41 ID:ysM2oFx/.net]
>>237
1か0じゃない。出来る限りコンパイル時に解決してくれれば
動的に解決する問題が減る。

静的型で型の不整合が起きるコードなんて限られてるんだから、
その影響範囲を小さくすることで、動的なものを静的に
解決できるように設計するんだよ。

静的に解決するのと動的に解決するのとの差は大きく、
動的だとすべての実行パスを、実際に実行しないと信頼出来ないが
静的だと実行する必要が無いから、すべての実行パスを実行するコストが0になる。

242 名前:デフォルトの名無しさん [2015/12/19(土) 09:07:04.58 ID:P/E9W26M.net]
>>210
俺もJedi-vim使ってるけどこれってどうやって配列の中身に補完かけんの?
何回やっても出来なくてPythonゴミだと思ってた

243 名前:デフォルトの名無しさん mailto:sage [2015/12/19(土) 09:33:28.96 ID:TW2fFhuS.net]
>>238
> 1か0じゃない。

あんたらの言ってることは1か0かでしかないよ。w
ここでもすでに2つもやってる

> すべての実行パス

> コストが0

244 名前:デフォルトの名無しさん mailto:sage [2015/12/19(土) 09:33:42.26 ID:QugsHy5+.net]
typo、typo言ってる奴が何を言ってるのか分かってきた
オブジェクト指向とか、関数型とかいう前に、構造化プログラミングが出来てないからtypoで困るのか

245 名前:デフォルトの名無しさん mailto:sage [2015/12/19(土) 09:34:15.15 ID:u/d4wrI0.net]
>203
こいつまじでテスト書かないんだろうな。。
適当にその型のオブジェクト生成して引数で突っ込んでメソッドなり関数なり呼べばいいだけだろ。
型があってなけりゃ大概まともになんて動かんわ。

>そもそも、完璧なテストは書けるのか?って話もある。
テストでもプログラムでも「完璧な」なんてありえないんだよ。
確率や効率をいかにあげるかって話だ。

>テストを書く=時間がかかる だ。
当たり前だ。それなりの精度のもの作るならそうなる。
プロトで作るくらいの規模のもので型エラーでほとんど動かんもの作る奴なんてどっちにしろ
まともなものなんて作れんわ。

246 名前:デフォルトの名無しさん mailto:sage [2015/12/19(土) 09:35:02.37 ID:ysM2oFx/.net]
なんで構造化プログラミングとtypoが関係有るんだ?
無関係なものを結びつけたがるよなw

まるで、そういう印象をあたえるのが目的かのようだwww

247 名前:デフォルトの名無しさん mailto:sage [2015/12/19(土) 09:36:58.29 ID:ysM2oFx/.net]
>>242
> 適当にその型のオブジェクト生成して引数で突っ込んでメソッドなり関数なり呼べばいいだけだろ。
> 型があってなけりゃ大概まともになんて動かんわ。

わかってないねw

適当にその型のオブジェクト生成して突っ込むというテストコードを書いたからといって、
そのテストコード以外の部分には、当てはまらないんだよ。

テストコードだけがうまく動作するwww


> 型があってなけりゃ大概まともになんて動かんわ。
問題はそこからだな。まともに動かない。原因は何か?
デバッグ大変だぁw

248 名前:デフォルトの名無しさん mailto:sage [2015/12/19(土) 09:38:45.80 ID:ysM2oFx/.net]
引数が違うっていうのは、呼び出し元と呼び出し先の
インターフェースの問題なのだから
単体テストでは見つけることが出来ないんだよ。
これは結合テストの範疇。

249 名前:デフォルトの名無しさん mailto:sage [2015/12/19(土) 09:41:53.19 ID:TW2fFhuS.net]
結局、静的型付けのヒトの主張は

- 動的型付けで静的型付けのような完全なチェックは不可能
- 完全なチェックを妨げる言語機能は自分達には無価値
- 静的型付きはすばらしい。だからおまえ等が使わない理由が分からない。バカなの?

ただこれだけのこと

250 名前:デフォルトの名無しさん [2015/12/19(土) 09:45:53.67 ID:P/E9W26M.net]
あと補完が素晴らしい



251 名前:デフォルトの名無しさん mailto:sage [2015/12/19(土) 09:47:41.17 ID:8SzZHE5V.net]
動的型はダックタイピングを期待して故意に複数の型を許すこともある
だから、仕組み的に静的型付けより正確な補完ができることはありえない

>>216
戻り値にShowとかCloseとかのよくあるメソッド呼ぶだけだとどうしても補完は不足する
C#とかの補完は、加不足なく表示されるのがポイントで、リファレンスを参照する手間がないのがありがたい

>>181
dynamic型とかでできるよ
でも補完が効かないし、遅くなって静的コンパイル言語の利点を潰しちゃうからあんまり使われない

252 名前:デフォルトの名無しさん mailto:sage [2015/12/19(土) 09:49:18.71 ID:ysM2oFx/.net]
>>246
> 結局、静的型付けのヒトの主張は

なるほどw 動的型の人の主張はそういう反論しかできないから
話をこれだけにしてくださいってことだなw






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧](;´∀`)<310KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef