- 【JavaScript】スクリプト バトルロワイヤル54【php,py,pl,rb】 [無断転載禁止]©2ch.net
679 :デフォルトの名無しさん[sage]:2016/09/18(日) 00:30:00.38 ID:7jfCU7SG - >>677
差は生まれるけど? 動的型付き言語はカッチリ作るのは得意ではないが、その分開発効率は高い 静的型付き言語は逆 典型的なのはJSONの扱いとかかな 大抵の言語にはJSONライブラリがあるが、静的型付きだと最初にJSONでどういうものを 扱うかをかっちり決めて、それにしたがってパースしていくのでちゃちゃっととりあえず 使いたいんじゃーって場面には合わない 動的型付きだとその辺はゆるくちゃちゃっとできるけど、JSONの構造の解釈は人間が やるのでミスが出やすい どっちがいいとかじゃなくて、適材適所 あるシステムを開発するときに、そのシステムの特性に合わせて言語は選ばれなければ いけない 言語によって開発効率の差が生まれないとか言ってるのは実際に様々な言語で開発を したことがないのでは?
|
- 【JavaScript】スクリプト バトルロワイヤル54【php,py,pl,rb】 [無断転載禁止]©2ch.net
683 :デフォルトの名無しさん[sage]:2016/09/18(日) 01:29:08.06 ID:7jfCU7SG - >>680
> 多分ほんの僅かなコードを書いて、その行数程度でみてるんだろうだけど 最初に全体の構造を把握する手間が必要かどうかだよ 静的型付きの場合は構造をすべて記述しておかないといけないので、全体を把握する手間が余計にかかる これはコード量の問題ではない 修正についても、ちょっとした機能追加とかは動的型付きの方が速いことが多いね これも全体を把握する必要のない動的型付きのメリットだね もちろん、大規模なリファクタリングをやる場合などは静的型付きの方が有利だ どういう規模の修正がどういう頻度で発生するかもシステムの特性であり、それを無視した 言語選択などありえないよ
|
- 【JavaScript】スクリプト バトルロワイヤル54【php,py,pl,rb】 [無断転載禁止]©2ch.net
687 :デフォルトの名無しさん[sage]:2016/09/18(日) 02:15:49.84 ID:7jfCU7SG - >>684
どれだけカッチリ書くかを選べるのが特徴だね 選択肢が多いのはメリットにもなるしデメリットにもなるけど、そこはシステムの特性で 取捨選択することになるね >>685 > 最初に準備すれば これが面倒なんだよね だからこそその面倒さと後から得られるメリットを比較して言語を選ぶことになるわけだね
|
- 【JavaScript】スクリプト バトルロワイヤル54【php,py,pl,rb】 [無断転載禁止]©2ch.net
690 :デフォルトの名無しさん[sage]:2016/09/18(日) 03:23:30.50 ID:7jfCU7SG - >>688
めちゃくちゃあるよ あとで、ってのがどれぐらいの規模でどれぐらいの頻度で来るかはシステムによるんだから >>689 動的型付けの場合はテストをゆるくすることも可能ってことだよ ゆるくすることが許されないシステムなら静的型付けを選んだ方が無難だってことだね どんなシステムでも求められる品質が同じとでも思ってるんでしょうかね?
|
- 【JavaScript】スクリプト バトルロワイヤル54【php,py,pl,rb】 [無断転載禁止]©2ch.net
697 :デフォルトの名無しさん[sage]:2016/09/18(日) 11:58:14.40 ID:7jfCU7SG - >>691
動的型付けでもユニットテストで型をチェックしなければいけないわけではないよ システムの要求品質によっては静的型付けと同じ程度のユニットテストで済ませてしまって 開発効率を確保するという選択肢があるよ >>695 入力パターンで想定外の型のデータを突っ込む部分だね 動的型付けならありえる話なのでカッチリやるならチェックしなきゃいけないんだけど ゆるくやるなら放っておけばいい
|
- 【JavaScript】スクリプト バトルロワイヤル54【php,py,pl,rb】 [無断転載禁止]©2ch.net
699 :デフォルトの名無しさん[sage]:2016/09/18(日) 12:28:54.06 ID:7jfCU7SG - >>698
誤字もあるし何言いたいのかよく分からない
|
- 【JavaScript】スクリプト バトルロワイヤル54【php,py,pl,rb】 [無断転載禁止]©2ch.net
701 :デフォルトの名無しさん[sage]:2016/09/18(日) 12:32:35.13 ID:7jfCU7SG - >>700
その分、本体コードの開発効率の高さをそのまま享受できるでしょ?
|
- 【JavaScript】スクリプト バトルロワイヤル54【php,py,pl,rb】 [無断転載禁止]©2ch.net
703 :デフォルトの名無しさん[sage]:2016/09/18(日) 12:42:59.50 ID:7jfCU7SG - >>702
> 単にタイプが楽なだけだろ なわけないでしょw 複数の型を受け取るメソッドを用意したいんだけど、そのためにはこういうインタフェースを用意して… とか考える部分がないとでも? こういうことを平気で言い出す人間はコードを組んだことがない、よくある「俺は技術知ってるPMだぜ」 レベルじゃないかと本気で疑わざるをえない
|
- 【JavaScript】スクリプト バトルロワイヤル54【php,py,pl,rb】 [無断転載禁止]©2ch.net
705 :デフォルトの名無しさん[sage]:2016/09/18(日) 13:04:43.74 ID:7jfCU7SG - >>704
この引数にはこういうメソッドがいるんだけど、別の場所ではこのメソッドは必須ではないな ということはインタフェースを分割して…でもさらに別のメソッドでは…うまく直交性を保つには… でもインタフェース地獄にはしたくないし… 静的型付けあるあるですね もちろん、こういうのを設計段階でカッチリやれればそれは堅牢性につながるから、メリットとも 言えるけどね 設計をカッチリやるようなシステムでは静的型付けの方が合うだろうね
|
- 【JavaScript】スクリプト バトルロワイヤル54【php,py,pl,rb】 [無断転載禁止]©2ch.net
707 :デフォルトの名無しさん[sage]:2016/09/18(日) 13:13:19.98 ID:7jfCU7SG - >>706
> そうすると動的型付けだとますます、なにが必要なメソッドで > 何が必要ないメソッドなのかわからなくなるんだけど? そういう状態になりやすい大人数のチームには動的型付けは合わないだろうね 少数精鋭でみんながシステム全体をある程度分かってる感じじゃないとね > アサーションでも入れておけば、Not implementedって出すようにできる。 それ、静的型付けのメリットを捨ててますよw
|
- 【JavaScript】スクリプト バトルロワイヤル54【php,py,pl,rb】 [無断転載禁止]©2ch.net
710 :デフォルトの名無しさん[sage]:2016/09/18(日) 13:23:27.95 ID:7jfCU7SG - >>708
> 静的型付けのメリットは信頼性があるコメントがあるかどうかだから。 その信頼性は「コンパイル時に発見できる」ことが重要でしょ? アサーションなんか入れて「動かしてみないと分からない」じゃ動的型付けじゃん むしろインタフェースを書かなきゃいけない分、動的型付け以下の使い方だよ
|
- 【JavaScript】スクリプト バトルロワイヤル54【php,py,pl,rb】 [無断転載禁止]©2ch.net
712 :デフォルトの名無しさん[sage]:2016/09/18(日) 13:38:08.60 ID:7jfCU7SG - > コードに書いてあるんだから、コンパイルする前にわかる。
え?え? 信頼性って機械がコンパイル時にエラーを吐いてくれることで担保されるんだよね? その信頼性を得るために多少の面倒を我慢しよう、ってのが静的型付けだよね?
|
- 【JavaScript】スクリプト バトルロワイヤル54【php,py,pl,rb】 [無断転載禁止]©2ch.net
714 :デフォルトの名無しさん[sage]:2016/09/18(日) 13:50:03.27 ID:7jfCU7SG - >>713
アサーションはそのコンパイルエラーを潰してしまうんですが?
|
- 【JavaScript】スクリプト バトルロワイヤル54【php,py,pl,rb】 [無断転載禁止]©2ch.net
716 :デフォルトの名無しさん[sage]:2016/09/18(日) 14:03:55.07 ID:7jfCU7SG - >>715
> コンパイラの言う正しいっていうのは、バグがないことじゃないぞw そのバグを可能な範囲でコンパイラで潰すのが静的型付けのメリットだよね? アサーションはそのメリットを放棄してるよね?
|
- 【JavaScript】スクリプト バトルロワイヤル54【php,py,pl,rb】 [無断転載禁止]©2ch.net
718 :デフォルトの名無しさん[sage]:2016/09/18(日) 14:09:09.87 ID:7jfCU7SG - >>717
No Implemented を実装したオブジェクトを、そのメソッドが実装されていることを要求しているメソッドに 渡したらエラーになるよね? しかもこれは動かしてみないと分からない
|
- 【JavaScript】スクリプト バトルロワイヤル54【php,py,pl,rb】 [無断転載禁止]©2ch.net
720 :デフォルトの名無しさん[sage]:2016/09/18(日) 14:13:24.11 ID:7jfCU7SG - >>719
人間の信頼性より機械の信頼性の方が高いからコンパイラにエラーを見つけてもらうんでしょ? そのためのコンパイルエラーでしょ?
|
- 【JavaScript】スクリプト バトルロワイヤル54【php,py,pl,rb】 [無断転載禁止]©2ch.net
722 :デフォルトの名無しさん[sage]:2016/09/18(日) 14:22:48.83 ID:7jfCU7SG - >>721
その矛盾を見つけるのをコンパイラに任せるのが静的型付けのメリットでしょ? アサーションはそのメリットを捨ててますけど?
|
- 【JavaScript】スクリプト バトルロワイヤル54【php,py,pl,rb】 [無断転載禁止]©2ch.net
724 :デフォルトの名無しさん[sage]:2016/09/18(日) 14:27:14.25 ID:7jfCU7SG - >>723
渡してはいけない型のオブジェクトを渡してしまってる、というバグだよ 静的型付けなら厳密なインタフェースを定義することでコンパイラがそれを見つけてくれる アサーションはそのメリットを捨てている
|
- 【JavaScript】スクリプト バトルロワイヤル54【php,py,pl,rb】 [無断転載禁止]©2ch.net
727 :デフォルトの名無しさん[sage]:2016/09/18(日) 14:34:27.35 ID:7jfCU7SG - >>725
え? そんな前提作ってたらバグなんて潰せないよ? バグを可能な範囲で潰すのがコンパイラを使うメリットでしょ?
|
- 【JavaScript】スクリプト バトルロワイヤル54【php,py,pl,rb】 [無断転載禁止]©2ch.net
728 :デフォルトの名無しさん[sage]:2016/09/18(日) 14:34:59.09 ID:7jfCU7SG - >>726
> ならば、そのオブジェクトにはインターフェースを持たせなければいいので > 静的型付け言語であれば、コンパイルエラーになる。 アサーション使ったらコンパイルエラーにならないよ?
|
- 【JavaScript】スクリプト バトルロワイヤル54【php,py,pl,rb】 [無断転載禁止]©2ch.net
730 :デフォルトの名無しさん[sage]:2016/09/18(日) 14:42:36.20 ID:7jfCU7SG - >>729
つまり静的型付け言語ではカッチリしたインタフェース設計が必要ってことだね
|
- 【JavaScript】スクリプト バトルロワイヤル54【php,py,pl,rb】 [無断転載禁止]©2ch.net
732 :デフォルトの名無しさん[sage]:2016/09/18(日) 14:43:37.23 ID:7jfCU7SG - >>731
バグを潰すことは品質を上げることと同義だと思うんですが?
|
- 【JavaScript】スクリプト バトルロワイヤル54【php,py,pl,rb】 [無断転載禁止]©2ch.net
737 :デフォルトの名無しさん[sage]:2016/09/18(日) 14:46:30.72 ID:7jfCU7SG - >>733
一緒じゃないよ 動的型付け言語では必要じゃないメソッドは実装しなければいいだけ もちろんそれはバグの原因になることもあるが、そのバグの確率とカッチリしたインタフェース設計の手間を 比較して設計の手間の方が大きいと思えば省くことができる
|
- 【JavaScript】スクリプト バトルロワイヤル54【php,py,pl,rb】 [無断転載禁止]©2ch.net
739 :デフォルトの名無しさん[sage]:2016/09/18(日) 14:48:37.79 ID:7jfCU7SG - >>738
それは静的型付けのメリットを捨ててますね コンパイラにエラーを発見させるのが静的型付けのメリットなのに
|
- 【JavaScript】スクリプト バトルロワイヤル54【php,py,pl,rb】 [無断転載禁止]©2ch.net
742 :デフォルトの名無しさん[sage]:2016/09/18(日) 14:50:32.72 ID:7jfCU7SG - >>740
だったら静的型付け使う必要がないじゃん
|
- 【JavaScript】スクリプト バトルロワイヤル54【php,py,pl,rb】 [無断転載禁止]©2ch.net
746 :デフォルトの名無しさん[sage]:2016/09/18(日) 14:56:55.88 ID:7jfCU7SG - >>744
> 中身が空のコードが書いてあればコードを読んだときに疑問になるだろ? こういう人間頼みの頼りないバグチェックより機械による厳密なバグチェックをしようというのが静的型付けだよね?
|
- 【JavaScript】スクリプト バトルロワイヤル54【php,py,pl,rb】 [無断転載禁止]©2ch.net
749 :デフォルトの名無しさん[sage]:2016/09/18(日) 14:59:57.12 ID:7jfCU7SG - >>747
静的型付けはコンパイラにエラーを検出させることによって、余計なバグの入り込む余地を減らすことを目標にしてるんだよね?
|
- 【JavaScript】スクリプト バトルロワイヤル54【php,py,pl,rb】 [無断転載禁止]©2ch.net
751 :デフォルトの名無しさん[sage]:2016/09/18(日) 15:01:27.05 ID:7jfCU7SG - >>748
コンパイラが発見できるバグをアサーションとかで潰してしまうのは静的型付けのメリットを捨ててますよね?
|
- 【JavaScript】スクリプト バトルロワイヤル54【php,py,pl,rb】 [無断転載禁止]©2ch.net
752 :デフォルトの名無しさん[sage]:2016/09/18(日) 15:02:37.85 ID:7jfCU7SG - >>750
じゃあなんで静的型付け使うの? アサーションとかいう回避策を使ってまで静的型付けを使うメリットはないと思うけど?
|
- 【JavaScript】スクリプト バトルロワイヤル54【php,py,pl,rb】 [無断転載禁止]©2ch.net
754 :デフォルトの名無しさん[sage]:2016/09/18(日) 15:03:44.01 ID:7jfCU7SG - もちろん、カッチリしたインタフェース設計ができるのであれは、静的型付けを使うメリットは大いにあるよね
変なオブジェクトが渡ってくる心配はないわけだし
|
- 【JavaScript】スクリプト バトルロワイヤル54【php,py,pl,rb】 [無断転載禁止]©2ch.net
757 :デフォルトの名無しさん[sage]:2016/09/18(日) 15:05:05.77 ID:7jfCU7SG - >>753
メリットを潰した後に残るのはバグ発見の役に立たないインタフェースという負の遺産だよね 動的型付けならそんな負の遺産はないし、動的型付けのデフォルトではないよ
|
- 【JavaScript】スクリプト バトルロワイヤル54【php,py,pl,rb】 [無断転載禁止]©2ch.net
758 :デフォルトの名無しさん[sage]:2016/09/18(日) 15:06:29.02 ID:7jfCU7SG - >>755
可読性なんて動的型付けでもコメントで書けばいいだけじゃん コンパイラのエラーをすり抜けるインタフェースなんてコメントと同レベルの意義しかないよ
|
- 【JavaScript】スクリプト バトルロワイヤル54【php,py,pl,rb】 [無断転載禁止]©2ch.net
761 :デフォルトの名無しさん[sage]:2016/09/18(日) 15:09:37.94 ID:7jfCU7SG - >>759
> 動的型付け言語では、インターフェースが無いのにバグ発見の役に立つんですか? > やっぱり静的型付け言語でメリットをなくした場合=動的型付け言語のデフォルトじゃないですかw 同じ役にたたないものなら、書くより書かない方がいいでしょ
|
- 【JavaScript】スクリプト バトルロワイヤル54【php,py,pl,rb】 [無断転載禁止]©2ch.net
762 :デフォルトの名無しさん[sage]:2016/09/18(日) 15:10:07.05 ID:7jfCU7SG - >>760
> コンパイラのエラーをすり抜けないインタフェースは、コメントよりも遥かに価値がある。 うんうん、そのためにはカッチリしたインタフェースの設計が必要だね
|
- 【JavaScript】スクリプト バトルロワイヤル54【php,py,pl,rb】 [無断転載禁止]©2ch.net
764 :デフォルトの名無しさん[sage]:2016/09/18(日) 15:13:26.27 ID:7jfCU7SG - >>763
> だから、役に立たつものを書いたほうが良いよねw そうそう、だからこそ静的型付けでは設計は大事なわけで > インタフェースの設計は後から変えればいいので、 > かっちりしたインターフェースを設計する必要はないよ。 つまり最初はバグ持ちのまま出してもおっけーということで それって動的型付けじゃん?
|
- 【JavaScript】スクリプト バトルロワイヤル54【php,py,pl,rb】 [無断転載禁止]©2ch.net
767 :デフォルトの名無しさん[sage]:2016/09/18(日) 15:15:45.44 ID:7jfCU7SG - >>765
> 動的型付け言語であっても、インターフェースを変えるときは大変なんだよね。 コロコロインタフェースが変わるようなら、最初の設計を疑った方がいいよ
|
- 【JavaScript】スクリプト バトルロワイヤル54【php,py,pl,rb】 [無断転載禁止]©2ch.net
769 :デフォルトの名無しさん[sage]:2016/09/18(日) 15:16:42.08 ID:7jfCU7SG - >>766
> こいつまだ静的型付け言語はバグをなくするものだって 動的型付けに由来するバグは潰せるでしょ? アサーションはその潰せるバグをスルーしようっていう思想なわけで
|
- 【JavaScript】スクリプト バトルロワイヤル54【php,py,pl,rb】 [無断転載禁止]©2ch.net
771 :デフォルトの名無しさん[sage]:2016/09/18(日) 15:18:03.54 ID:7jfCU7SG - >>770
そのメソッドを呼んだら落ちるんでしょ? バグじゃん
|
- 【JavaScript】スクリプト バトルロワイヤル54【php,py,pl,rb】 [無断転載禁止]©2ch.net
773 :デフォルトの名無しさん[sage]:2016/09/18(日) 15:19:58.97 ID:7jfCU7SG - >>772
意図せずに呼んじゃったら?
|
- 【JavaScript】スクリプト バトルロワイヤル54【php,py,pl,rb】 [無断転載禁止]©2ch.net
775 :デフォルトの名無しさん[sage]:2016/09/18(日) 15:20:55.80 ID:7jfCU7SG - >>774
アサーションも同じこと
|
- 【JavaScript】スクリプト バトルロワイヤル54【php,py,pl,rb】 [無断転載禁止]©2ch.net
777 :デフォルトの名無しさん[sage]:2016/09/18(日) 15:21:28.52 ID:7jfCU7SG - >>776
アサーションもね
|
- 【JavaScript】スクリプト バトルロワイヤル54【php,py,pl,rb】 [無断転載禁止]©2ch.net
779 :デフォルトの名無しさん[sage]:2016/09/18(日) 15:23:32.96 ID:7jfCU7SG - >>778
違和感なんて人間の感覚に頼るんだったら、動的型付けでも同じこと 静的型付けは機械で判断できるところにメリットがあるというのに
|
- 【JavaScript】スクリプト バトルロワイヤル54【php,py,pl,rb】 [無断転載禁止]©2ch.net
781 :デフォルトの名無しさん[sage]:2016/09/18(日) 15:31:15.56 ID:7jfCU7SG - >>780
メソッドにどんなオブジェクトが渡るかをいちいち完全に精査するのはおそろしく大変なこと これを人間の違和感だけでやりきるのはほぼ不可能 動的型付けはそこを決め打ちでやってしまう分、余計なことを考えなくてもいい バグってるかもしれないけど、そんな確率は低いよねと判断できるならこういうやり方もアリ アサーションも同レベル 静的型付けはそこを厳密にやってそんな余計なバグを減らそうという思想 その分カッチリとした設計は必要になるが、動的型付けでおきるバグの確率が許されないレベルなら こっちを使うべき システムの許容されるバグの範囲はシステムごとに違う この大前提が理解できていない感じもあるな
|
- 【JavaScript】スクリプト バトルロワイヤル54【php,py,pl,rb】 [無断転載禁止]©2ch.net
783 :デフォルトの名無しさん[sage]:2016/09/18(日) 15:36:45.68 ID:7jfCU7SG - >>782
> 俺が言った違和感っていうのは、ソースコードに通常では書かないようなコード インタフェース設計が面倒なときはアサーションで逃げるんでしょ? その逃げは違和感なの?普通にあることなの?
|
- 【JavaScript】スクリプト バトルロワイヤル54【php,py,pl,rb】 [無断転載禁止]©2ch.net
785 :デフォルトの名無しさん[sage]:2016/09/18(日) 15:40:37.06 ID:7jfCU7SG - >>784
アサーション使ってたら同じことだと思うけど?
|
- 【JavaScript】スクリプト バトルロワイヤル54【php,py,pl,rb】 [無断転載禁止]©2ch.net
787 :デフォルトの名無しさん[sage]:2016/09/18(日) 15:43:37.94 ID:7jfCU7SG - >>786
でもアサーション使ってたらコンパイラがエラー見つけてくれないよ? それだと静的型付け使ってるメリットないよね?
|
- 【JavaScript】スクリプト バトルロワイヤル54【php,py,pl,rb】 [無断転載禁止]©2ch.net
790 :デフォルトの名無しさん[sage]:2016/09/18(日) 15:44:55.24 ID:7jfCU7SG - >>788
それって人間頼みだよね? コンパイラにエラー検出をお願いするのが静的型付けのメリットだよね?
|
- 【JavaScript】スクリプト バトルロワイヤル54【php,py,pl,rb】 [無断転載禁止]©2ch.net
791 :デフォルトの名無しさん[sage]:2016/09/18(日) 15:45:16.89 ID:7jfCU7SG - >>798
それって人間頼みだよね? コンパイラにエラー検出をお願いするのが静的型付けのメリットだよね?
|
- 【JavaScript】スクリプト バトルロワイヤル54【php,py,pl,rb】 [無断転載禁止]©2ch.net
793 :デフォルトの名無しさん[sage]:2016/09/18(日) 15:47:03.61 ID:7jfCU7SG - >>792
まともに設計すればコンパイラが見つけてくれるエラーを捨てるぐらいなら静的型付け使うメリットないよね?
|
- 【JavaScript】スクリプト バトルロワイヤル54【php,py,pl,rb】 [無断転載禁止]©2ch.net
795 :デフォルトの名無しさん[sage]:2016/09/18(日) 15:52:13.30 ID:7jfCU7SG - >>794
> コンパイラがチェックしてくれる範囲において、 アサーション使ったらコンパイラがチェックしてくれないじゃん
|