静的型付け言語の潜在開発生産性は今の100倍 ×4
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2013/11/04(月) 22:36:14.15これが生産性を上げる最大の方法。
コンピュータは間違わない、同じ事を何度も高速に行える。
その為に、コンピュータがコードの意味を正確に
認識できる方法が必要。実行しないとわからないことは
コンピュータは認識できない。
すなわち静的型付け言語であれば、実行しなくてもわかるので
コンピュータが理解できる。そうすれば様々な
コンピュータの高度な情報支援が得られる。
コンピュータのバックアップを受け、人間の生産性は
限りなく向上する。
前スレ
静的型付け言語の潜在開発生産性は今の100倍 ×3
http://toro.2ch.net/test/read.cgi/tech/1382656209/
0002デフォルトの名無しさん
2013/11/04(月) 22:39:10.51http://toro.2ch.net/test/read.cgi/tech/1383561626/
0003デフォルトの名無しさん
2013/11/04(月) 22:44:32.15なんだかインナークラスが static なクラスであることをあまり意識せずにバンバン書いていくのは気になるなあ‥‥
どうしても static メソッドを明示したこんな書き方を推奨してしまう
http://ideone.com/HHYjJV (バグ直した)
そのあたり Java から入った人はどう考えているの?
あと元プログラムの SearchLargestNode() って必要以上に難しくしてない?というかあってるの?
0004デフォルトの名無しさん
2013/11/04(月) 22:53:03.23>なんだかインナークラスが static なクラスであることをあまり意識せずにバンバン書いていくのは気になるなあ‥‥
どういう意味?static classはトップレベルクラスと同等になるってだけだと思うけど
0005デフォルトの名無しさん
2013/11/04(月) 23:01:06.57staticは極力使わないようにしている。
これを言うと知らない人は噛みついてくるかもしれないが。
staticな(クラス,変数,メソッド)はtomcatアプリケーションのオートデプロイ時に深刻な問題が発生する。
0006デフォルトの名無しさん
2013/11/04(月) 23:02:26.67>再帰ってそういうものだよ。
関数を抜けるたびに値が変わるんだったらわかるけど、変わらない値を延々返すというのはねえ‥‥もっといい方法があるはずなんだけど
>Haskellのクイックソートも許せないタイプ?
in-place でないクィックソートとか意味不明:−)
0007デフォルトの名無しさん
2013/11/04(月) 23:06:53.76>http://ideone.com/HHYjJV (バグ直した)
どこのバグを直したのかな?修正後のはremoveがバグってるようだけど
0008デフォルトの名無しさん
2013/11/04(月) 23:07:02.21もとプログラム
http://toro.2ch.net/test/read.cgi/tech/1382656209/986
http://rabbit.media.osaka-cu.ac.jp/course/index.php/%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0/13#2.E5.88.86.E6.8E.A2.E7.B4.A2.E6.9C.A8
ってのは static なクラスに属するべきメソッドを、static と明示せずにアウタークラスにバンバン書いているので‥‥
いや、こういうのは自動的に static method と解釈してくれのだろうか?なんだが居心地が悪い‥‥
0009デフォルトの名無しさん
2013/11/04(月) 23:13:08.97おっと
Node n = searchLargestNode(root.left);
n.right = root.right;
return root.left; //here, corrected.
http://ideone.com/FXiTkS
だねえ、thx
0010デフォルトの名無しさん
2013/11/04(月) 23:14:32.13速くしようとしたら
型を意識しなきゃだめ
でも遅いままで問題ないことが多い
って感じかな
0011デフォルトの名無しさん
2013/11/04(月) 23:22:33.56JSはCの二倍速い。
こういっておいたほうがいいよ。
0012デフォルトの名無しさん
2013/11/04(月) 23:25:56.470013デフォルトの名無しさん
2013/11/04(月) 23:29:45.150014デフォルトの名無しさん
2013/11/04(月) 23:32:53.700015デフォルトの名無しさん
2013/11/05(火) 00:02:05.60修正前と木の構造が違うよ。
修正するならこうだと思うけど。
Node n = searchLargestNode(root.left);
if (n != root.left) {
n.left = root.left;
}
n.right = root.right;
return n;
0016デフォルトの名無しさん
2013/11/05(火) 00:15:39.35>n.left = root.left;
n よりも小さなノードが n.left に連なっているはずだよ、これをすると n.left 以下が宙ぶらりんになってしまうよ
また
n.left を root.left にすると
root.left -> ...... ->n->root.left で巡回してしまうよ
0017デフォルトの名無しさん
2013/11/05(火) 00:17:55.27方向をつけくわえておくね
root.left (right)-> .... (right)-> n (left)-> root.left
巡回路ができるとまずいね
0018デフォルトの名無しさん
2013/11/05(火) 00:34:50.51listクラスを実際にはリスト構造にしないとかよくあると思うんだけど。
そういうこと出来ないのかな?
0019デフォルトの名無しさん
2013/11/05(火) 00:37:17.24どの言語でよくあるの?
0020デフォルトの名無しさん
2013/11/05(火) 00:39:41.380021デフォルトの名無しさん
2013/11/05(火) 01:23:59.47>n よりも小さなノードが n.left に連なっているはずだよ、これをすると n.left 以下が宙ぶらりんになってしまうよ
ならないよね。
searchLargestNodeメソッドにこれがあって
if (n == root.right) {
// root.right = null; となっていましたが,間違いです.
root.right = n.left;
}
removeはこうやるんだから。
if (n != root.left) {
n.left = root.left;
}
>root.left -> ...... ->n->root.left で巡回してしまうよ
しないよね。こうやってるんだから。
if (n != root.left) {
n.left = root.left;
}
0022デフォルトの名無しさん
2013/11/05(火) 02:08:08.480023デフォルトの名無しさん
2013/11/05(火) 02:12:28.510024デフォルトの名無しさん
2013/11/05(火) 04:17:42.820025デフォルトの名無しさん
2013/11/05(火) 04:21:03.19> staticな(クラス,変数,メソッド)はtomcatアプリケーションのオートデプロイ時に深刻な問題が発生する。
なんか、こういう書き方をしているのを見ると、
オートデプロイを実運用で使用しているんじゃないのか?って思ってしまう。
デプロイはもちろん実運用でやることだが、
"オート"デプロイは開発環境でのみ使う機能だぞ。
0026デフォルトの名無しさん
2013/11/05(火) 04:53:40.40型付き言語なんてアセンブリ言語より遅いくせに
0027デフォルトの名無しさん
2013/11/05(火) 04:54:48.590028デフォルトの名無しさん
2013/11/05(火) 04:55:53.79極稀に速いことがあるんだからね!
0029デフォルトの名無しさん
2013/11/05(火) 04:57:53.98型付き言語が(最適化が不十分な一般の)
アセンブリ言語より速いという方が
まだよくあることだ。
0030デフォルトの名無しさん
2013/11/05(火) 04:58:26.46歴史としてはそれに型をはめて扱いやすくしたのが静的言語
0031デフォルトの名無しさん
2013/11/05(火) 04:59:50.47そこ勘違いするなよ?
0032デフォルトの名無しさん
2013/11/05(火) 05:00:30.81動的言語は動的に型が決まるから
動的っていうんだが
アセンブリ言語は、動的に型が決まらない。
型そのものが存在しない。
0033デフォルトの名無しさん
2013/11/05(火) 05:33:48.68ここは真面目なスレですんで
煽りは帰って
どうぞ
0034デフォルトの名無しさん
2013/11/05(火) 05:39:12.150035デフォルトの名無しさん
2013/11/05(火) 05:44:50.79かつ、静的型も動的型も持たない型無し言語。
0036デフォルトの名無しさん
2013/11/05(火) 05:54:23.95動的型付け言語ではないな。
0037デフォルトの名無しさん
2013/11/05(火) 06:33:05.62動的言語ならこんなに簡単に書けますお
http://ideone.com/zDYgPt
0038デフォルトの名無しさん
2013/11/05(火) 07:30:25.25お前まだ話の流れが分かってないのな
動的言語と動的型付け言語は別物だろが
何が話されてるのかも分かってないのに絡んでくるのはNG
0039デフォルトの名無しさん
2013/11/05(火) 07:43:03.00肝心のクイックソートが
ライブラリ呼んでるだけじゃないかw
0040デフォルトの名無しさん
2013/11/05(火) 07:44:20.67動的言語は遅い
速くしようとしたら
型を意識しなきゃだめ
でも遅いままで問題ないことが多い
って感じかな
↓ ワロタw
38 名前:デフォルトの名無しさん[sage] 投稿日:2013/11/05(火) 07:30:25.25
>>32
お前まだ話の流れが分かってないのな
動的言語と動的型付け言語は別物だろが
0041デフォルトの名無しさん
2013/11/05(火) 08:03:20.15連結リストならコムソート使いなよ、同じくΟ(nlong)だ
0042デフォルトの名無しさん
2013/11/05(火) 08:15:14.90スパコンでアセンブリ使うって
でも実際はそうなってない
0043デフォルトの名無しさん
2013/11/05(火) 09:45:13.180044デフォルトの名無しさん
2013/11/05(火) 16:29:08.04Listのインターフェイスと具体的な実装は別物。
外見は等しくListでも中身は連続したメモリ領域だったり連結リストだったりDBから
引っ張っていたりRESTインターフェイスを叩いていたりと色々。
0045デフォルトの名無しさん
2013/11/05(火) 17:10:46.19tomcatのクラスの自動reloadの話をしているのであればこんなコンテナ側の事情それも
開発時限定の便利機能に併せてAPIの設計を曲げることなんてしないしこの例の場合単に
実装の詳細であるprivateなメソッドの話であって実際問題privateであればreloadしても
そんなにはまらん。
>>6
この例の場合「たまたま」insertやrevome等々の操作がBinSearchTreeには触れずに
個々のNodeだけを相手にして可能な実装になっているので「たまたま」staticに「も」
出来るだけであって、Nodeクラスがstaticであること云々はそれを操作するメソッドも
staticであるべきとか云々とは全く関係がが無い。
たとえばBinSearchTreeがアンドゥやトランザクションをサポートしていたり操作と
同時にファイルに永続化するような実装になっている場合はファイルハンドラ等々を
つかんでいるであろうBinSearchTreeの参照が出来ないstaticメソッドだと恐らく
書きにくいでしょ。
0046デフォルトの名無しさん
2013/11/05(火) 17:11:55.090047デフォルトの名無しさん
2013/11/05(火) 18:02:37.640048デフォルトの名無しさん
2013/11/05(火) 18:09:47.68開発のみで使うってどういうこと?
運用できるように使わなきゃ意味ないでしょ
0049デフォルトの名無しさん
2013/11/05(火) 20:48:59.050050デフォルトの名無しさん
2013/11/05(火) 21:04:40.180051デフォルトの名無しさん
2013/11/05(火) 21:09:10.07そのため科学技術計算向けに開発されたライブラリがそろっている。
大規模行列計算など正直不得意な分野もコアをCで実装したライブラリが存在する。
並列分散実行に関してもMPIのバインディングが存在したりHadoopのゲストになれる。
環境が十分そろっているだけの話であって言語自体が効率的な大規模並列計算に
向いている訳ではないと思う。
0052デフォルトの名無しさん
2013/11/05(火) 21:16:42.30それ以外はマシンパワーで補えるしな
0053デフォルトの名無しさん
2013/11/05(火) 21:16:55.76研究分野って行列もそうだけど文字列操作することもかなり多いから
スクリプトのが使いやすい
0054デフォルトの名無しさん
2013/11/05(火) 21:35:42.460055デフォルトの名無しさん
2013/11/05(火) 21:36:31.58const + 参照使っているか?いちいちコンストラクタを走らせてるんじゃないか?
0056デフォルトの名無しさん
2013/11/05(火) 21:43:32.94あれは何か効能あるの?インライン化されるとか
0057デフォルトの名無しさん
2013/11/05(火) 21:54:20.98単なるポインタ私
0058デフォルトの名無しさん
2013/11/05(火) 22:37:04.11(デプロイの自動化ではなく)オートデプロイという機能は
開発段階で使う機能だって
http://otndnld.oracle.co.jp/document/products/wls/docs92/deployment/autodeploy.html
> 開発ドメインへのアプリケーションの自動デプロイ
> 自動デプロイメントは、評価またはテストのために、スタンドアロン サーバ (管理サーバ) に
> アプリケーションを迅速にデプロイするための手段です。この方法は、
> 単一サーバの開発環境でのみ使用することをお勧めします。
> 自動デプロイメントは、開発環境において単一サーバの対象で使用することを想定されています。
> Administration Console など、他のツールを使用して自動デプロイ済みの展開されたアプリケーションに
> 対象を追加した場合、アプリケーションを再デプロイしても新しい対象サーバに変更は伝わりません。
> 以下の節では、開発環境で自動デプロイメントを使用する方法について説明します。
ちょっと考えればわかるじゃん。オートデプロイのために、
本来あるべきソフトウェアの設計を歪めるなんてありえないだろ?
↓これのこと
>>5
> staticは極力使わないようにしている。
> これを言うと知らない人は噛みついてくるかもしれないが。
> staticな(クラス,変数,メソッド)はtomcatアプリケーションのオートデプロイ時に深刻な問題が発生する。
どっちが大事なんだよ?
0059デフォルトの名無しさん
2013/11/05(火) 22:37:23.32最適化される
今はrvalue-refあるからいらんけど
0060デフォルトの名無しさん
2013/11/05(火) 22:40:08.20最適化ってどんな?
0061デフォルトの名無しさん
2013/11/05(火) 22:45:57.37言ってる意味がよくわからんな
最終的にAPIをstaticにしなくともstaticなんて極力使わないよ
インスタンスクラスにstaticをかぶせるのは容易だけど逆はできないもの
0062デフォルトの名無しさん
2013/11/05(火) 22:49:00.83本来あるべき姿という考えなら
staticは本来極力使うべきではない。
0063デフォルトの名無しさん
2013/11/05(火) 22:51:45.82const使ってるとコンパイラが(中で)定数扱いにしやすい
あと(ライフサイクルが短くなって)死にやすい
0064デフォルトの名無しさん
2013/11/05(火) 22:52:50.38> 言ってる意味がよくわからんな
オラクルにでも聞いてください。
オートデプロイは開発環境用につくられてるって書いてあるんだから。
っていうか、実際にstatic使ったら問題が起きるんだろ?
それがオートデプロイを実運用で使うべきではない理由の一つじゃん。
> staticは本来極力使うべきではない。
なんでだよw
0065デフォルトの名無しさん
2013/11/05(火) 22:53:57.91訂正
☓ APIをstaticにしなくとも
○ APIをstaticにするにしても
0066デフォルトの名無しさん
2013/11/05(火) 22:55:23.04オートデプロイを使って開発している時に、
オートデプロイができない場合がちょくちょくあるのは
わかりきってるじゃん。
その時点で実運用で使おうなんて思わないよ普通。
オートデプロイの事を考えて開発するなんて本末転倒。
0067デフォルトの名無しさん
2013/11/05(火) 22:55:45.73たいていのやつはstaticをグローバル変数みたいな使い方しているだろ。
グローバル変数を排除しスコープの局所化でリソースを有効に使うべきだから。
0068デフォルトの名無しさん
2013/11/05(火) 22:56:01.120069デフォルトの名無しさん
2013/11/05(火) 22:56:35.34正しいstaticの使い方をしてください。
0070デフォルトの名無しさん
2013/11/05(火) 22:57:48.11信者だからだよ。
0071デフォルトの名無しさん
2013/11/05(火) 22:58:53.81なんでだよってMockオブジェクトとか作れなくなるだろ
こんな簡単な事も理解できない奴が
なんでオートデプロイなんて使ってるんだ?
0072デフォルトの名無しさん
2013/11/05(火) 22:59:31.36だからすべてstaticにするべき。
0073デフォルトの名無しさん
2013/11/05(火) 23:02:08.52これなら全部staticで問題ない
0074デフォルトの名無しさん
2013/11/05(火) 23:22:56.75ここでも非static信者はstaticを避けるの?
0075デフォルトの名無しさん
2013/11/05(火) 23:26:12.93避ける。
0076デフォルトの名無しさん
2013/11/05(火) 23:26:20.880077デフォルトの名無しさん
2013/11/05(火) 23:26:16.36それ、もしよければ理由を教えて欲しい >>9 もそうしてるね
0078デフォルトの名無しさん
2013/11/05(火) 23:28:26.18Javaに幸あれ
0079デフォルトの名無しさん
2013/11/05(火) 23:28:54.310080デフォルトの名無しさん
2013/11/05(火) 23:36:18.690081デフォルトの名無しさん
2013/11/05(火) 23:57:35.13ごめんここまで書いてわからなくなったhttp://ideone.com/dOd99N
インナークラスにどう追加したら「親オブジェクト」(????)の参照を拾えるの?
0082デフォルトの名無しさん
2013/11/06(水) 00:13:02.17地球では第1コンパイル以前の処理をstaticとしていますが、
宇宙には第2コンパイルも普通に使われ
第Nコンパイルに至ってはインタプリタと同等です。
どういうことかというとstaticはありません☆
0083デフォルトの名無しさん
2013/11/06(水) 01:18:29.47staticでない内部クラスからは「親オブジェクト」のフィールドやメソッドに普通に
アクセスできる。この場合内部クラスでthis.mとかやれば自分自身が返る。
参照がほしければ親オブジェクトのクラス名.this。この場合はC.this。
0084デフォルトの名無しさん
2013/11/06(水) 06:46:38.63Qzが来ると一気に程度が下がるな
0085デフォルトの名無しさん
2013/11/06(水) 06:48:52.390086デフォルトの名無しさん
2013/11/06(水) 06:56:45.59親オブジェクトの子要素みたいな感じのクラスが作りたいなら非staticを使う必要が出てくるかもしれない
単純に用途が違う
0087デフォルトの名無しさん
2013/11/06(水) 07:18:04.71メンバクラスを使うとメモリリークするって話を聞いたことがある。あれってマジなのかね。
0088デフォルトの名無しさん
2013/11/06(水) 07:18:44.39メンバクラスを使うとメモリリクするって話を聞いたことがある。あれってマジなのかね。
イベントリスナ実装できなくね?
0089デフォルトの名無しさん
2013/11/06(水) 07:20:54.120090デフォルトの名無しさん
2013/11/06(水) 07:45:51.86マジ。匿名クラス等として定義されたリスナーへの参照が何かに捕まれている限り、
イベントの受け手である親オブジェクトもガベージコレクトされない。
なぜなら非staticな内部クラスや匿名クラスのオブジェクトは親オブジェクトへの
暗黙の参照を持つから。
ただ不要になったリスナを適切に解放しないとメモリリークを起こすのは他の言語
でも似たり寄ったりだとは思う。
0091デフォルトの名無しさん
2013/11/06(水) 08:33:36.85そんなのメモリリークじゃねーだろ
0092デフォルトの名無しさん
2013/11/06(水) 09:12:13.93常識だよ。
同じキーワードってだけで混同させて揚足取ってる奴がいるだけ。
0093デフォルトの名無しさん
2013/11/06(水) 09:14:19.98staticにするなというのかね?
システムの構造を司ってるものはstaticを使わない方がいいが、
関数ライブラリ的なものはstaticを使った方がいい。
staticは状態を持たないからテストもしやすい。
テストは必ずmockでやるべきということでもない。
モジュールの性質によって適切なテスト方法は違う。
なんでもstaticを使うなというのは、
なんでもstaticを使えと言ってるstaticおじさんと
やってることは変わらんよ。
0094デフォルトの名無しさん
2013/11/06(水) 09:14:24.210095デフォルトの名無しさん
2013/11/06(水) 09:15:33.93absは整数クラスのメンバ関数でいいだろ。staticでないほうが自然。
Javaの言語仕様がタコなせいでstaticにしているだけ。
0096デフォルトの名無しさん
2013/11/06(水) 10:28:28.51>なんでもstaticを使うなというのは、
>なんでもstaticを使えと言ってるstaticおじさんと
>やってることは変わらんよ。
やってることが変わらんて、言ってる中身も理由も全然違うだろ。
お前さん、ひょっとしてアホなのか?
0097デフォルトの名無しさん
2013/11/06(水) 10:57:37.00public static final String nyan() {
return "にゃん"
}
0098デフォルトの名無しさん
2013/11/06(水) 11:00:38.04>staticは状態を持たないからテストもしやすい。
statefulかどうかに、staticかどうかは全然関係ないね。
そもそも、static領域にインスタンス置くのじゃダメなわけ?
メソッドをstaticにすると、
継承もインターフェース使っての置き換えもできない。
元のクラスそのままで、実装変更したければ、
使うメソッドを改善するかに関わらず、全部staticで実装して、
しかも参照元では名前もパッケージも全て変更することになる。
実際、JavaのMathの実装なんて遅いわけだし、
パフォーマンスが足りなくなる場合なんて十分ありうるよ。
それでもIDEがあるから簡単だ!って言うなら止めないが・・。
0099デフォルトの名無しさん
2013/11/06(水) 15:58:09.89それがそんなアホいね〜よと叩かれ、内部クラスもstaticは避けるのかと話を振ってみれば
避けるとかなぜ避けるのか教えてくれと言い出す有様。
巡り巡ってようやく実装の差し替えにくさにたどり着いた訳だが、その前にまずこのスレに
非static信者が何人張り付いているのかはっきりしてくれない?
staticなメソッドや定数の実装の差し替えがしにくいのは事実。
他方で呼び出しの手軽さやコストの小ささも事実。なのでstaticなこれらは実装の差し替え
が概ね不要だったり実装そのものを動的に取得するために使う。メリットとデメリットの
程度問題であることはどの技術問題とも共通して全く変わらん。
Mathが提供するstaticメソッドの差し替えがし難いのもしたくなることがあるかもしれない
のも事実かも知れないが、頻度としてどの程度さ?
01005
2013/11/06(水) 16:24:44.950101デフォルトの名無しさん
2013/11/06(水) 16:30:19.66必要となる数学関数は用途によって範囲が異なるわけでどこまでをクラスの標準メンバに
するかユーティリティクラスに追い出すかは利用方法を考慮したさじ加減の問題。
absをメンバにしたら次はceilやroundはどうするという話になる。
0102デフォルトの名無しさん
2013/11/06(水) 16:39:30.440103デフォルトの名無しさん
2013/11/06(水) 16:40:10.46皮肉だよ。
そもそも意味不明な>>3のstatic書き換えに対してTomcatを持ち出して奇妙なstatic否定を
持ち出した>>5が事の発端なのだからそろそろ責任をもって議論を収拾してほしい。
0104デフォルトの名無しさん
2013/11/06(水) 16:44:46.64ceilもroundもメンバで構わんだろ
0105デフォルトの名無しさん
2013/11/06(水) 16:53:31.84すると今度は三角関数や対数はどうなるという話になって、結局標準Mathが提供する
関数すべてについてどうするという議論まで続く。
01065
2013/11/06(水) 16:55:54.42いいえ私は反static同盟強硬派であります。
0107デフォルトの名無しさん
2013/11/06(水) 17:05:48.54別にそれでいいんじゃない?何か議論されちゃ困ることあんの?
0108デフォルトの名無しさん
2013/11/06(水) 17:16:51.50別に困らんけど数学関数が山盛りのAPIが本当に見通しが良くて使いやすいかは議論の
必要があるだろうね。
数学関数などを別途Math等々に切り出している言語はJavaに限らんところから見ても、
データクラスの標準メンバにこれらの関数を入れすぎても使い勝手は良くないという
認識はそう珍しくないということじゃないのかな。これは感想。
01095
2013/11/06(水) 17:26:56.65だがtomcatアプリケーションからはほぼ全てのstaticを除外する必要があった。
よく問題が発生したのはstatic Pattern p=Pattern.compile("正規文法",Pattern.DOT_ALL);
01105
2013/11/06(水) 17:33:44.510111デフォルトの名無しさん
2013/11/06(水) 17:40:27.52autoDeployでそれが問題になるのはなんか変。
reloadableであれば問題になるケースはあるけどそもそも単なる開発時の便利機能で
static云々以外にも問題があって当てにならん。運用時も普通切る。
01125
2013/11/06(水) 17:47:02.01warファイルを更新したときに起こるautodeployの問題。
0113デフォルトの名無しさん
2013/11/06(水) 17:58:01.97問題って具体的にはどんな現象?
0115デフォルトの名無しさん
2013/11/06(水) 18:10:40.53それって定数じゃないっすか?
クラスやメソッドで問題になることあった?
0116デフォルトの名無しさん
2013/11/06(水) 18:16:11.50クラスではNoClassDefFoundError、メソッドでもエラーが出るので致命的ではない。
0117デフォルトの名無しさん
2013/11/06(水) 18:24:08.990118デフォルトの名無しさん
2013/11/06(水) 18:47:22.540119デフォルトの名無しさん
2013/11/06(水) 18:57:10.86>>98だけど、俺は>>3には反対だから。
ネストクラスへのstatic修飾は、
メンバの継承やインターフェイスの実装もできる。
問題にしてるのは、クラスをインスタンスとして扱い、
かつ拡張性もない、OOなモジュール性を壊す方向のstatic。
Mathについても、それを踏まえた上の反論であって、
変更を余儀なくされた時は、そうなるよって言ってるだけ。
0120デフォルトの名無しさん
2013/11/06(水) 19:06:27.740121デフォルトの名無しさん
2013/11/06(水) 20:06:21.75変わってないよ。
変な勘ぐりしてかき回すなよ。
0122デフォルトの名無しさん
2013/11/06(水) 20:16:05.02だいたい>>3に関してもstaticとはいえprivateじゃん。
目頭立ててツッコむところじゃないよ。
0123デフォルトの名無しさん
2013/11/06(水) 21:52:32.72いないよね?
つまり自然な設計で考えてstatic使うってことだよね。
その自然な設計をオートデプロイのために
歪めるのは間違い。
ここまではいいよね?
あとは、オートデプロイは完璧じゃないんだから
実運用で使うべきではないってだけでしょ?
なんの迷いもなく、この結論に到達すると思うけど?
0124デフォルトの名無しさん
2013/11/06(水) 23:06:16.42auto deployが使い物にならないってことか
ゴミ言語は大変だな
0125デフォルトの名無しさん
2013/11/07(木) 00:52:41.02というかJava標準のクラスローダはウンコ
0126デフォルトの名無しさん
2013/11/07(木) 01:14:10.39逆に聞きたいんだけど、自然な設計って何?
staticだとどういう利点があるの?
0127デフォルトの名無しさん
2013/11/07(木) 01:16:42.030128デフォルトの名無しさん
2013/11/07(木) 01:41:52.64クラス(正確にはインスタンス)というのはデータとメソッドを塊にしたもの。
インスタンスメソッドというのは、インスタンスの内容を変更するもの。
データが主であり、それを変更するためにメソッドを用意する。
インスタンスの内容を変更しないのであれば、
それはインスタンスメソッドにする意味が無い。
それに対してクラスメソッド(static)というのは、インスタンスが無いから当然だが、
インスタンスのデータを変更しないもの。これは処理が主である。
内部データというものは存在せずに、引数に対して処理を行う。
インスタンスメソッドの場合、インスタンスの内容を変更するが
それと共にインスタンスの内容を参照することも多い。
つまり、同じメソッドを同じ引数で呼んだとしても同じ結果になるとは限らない。
クラスメソッドの場合、内部データが無いため、同じ引数であれば同じ結果にになる。
グローバル変数を参照すれば同じなるとは限らないが、
そもそもグローバル変数は使わないので、それは考える必要がないこと。
例外はいくつかあるが、基本的な違いはこれ。
この違いはテストのしやすさに関係してくる。
0129デフォルトの名無しさん
2013/11/07(木) 01:45:10.04目的であり、それはつまり副作用を目的としている。
それに対してクラスメソッドはインスタンスが存在しないから
副作用がない(とは限らないが、なるべく副作用がないように作るべき)
副作用がない方がテストが簡単なのは言うまでもない。
0130デフォルトの名無しさん
2013/11/07(木) 01:58:33.65インスタンスの意味わかってる?
0131デフォルトの名無しさん
2013/11/07(木) 02:02:26.39https://www.google.co.jp/search?q=インスタンスメソッド
0132デフォルトの名無しさん
2013/11/07(木) 02:03:53.43無知な人間がレスしているという
構図が明らかになりましたね。
0133デフォルトの名無しさん
2013/11/07(木) 02:08:42.390134デフォルトの名無しさん
2013/11/07(木) 02:33:46.58柔軟にオブジェクトを作れるJavaScriptを見習え
0135デフォルトの名無しさん
2013/11/07(木) 04:22:53.890136デフォルトの名無しさん
2013/11/07(木) 05:32:21.84一応反論するけどね、インスタンスメソッドもstatelessにできるし、
標準のimmutableなクラスは基本的にそうなってるよ。
逆にsingletonパタンはstatefulでしょ。
もう一度言うけど、statefulかどうかstaticかどうかは全然関係ないんだ。
実装の問題。だからテストのしやすさも一緒。
それを踏まえてstaticにする利点を教えてくれって言ってる。
0137136
2013/11/07(木) 05:43:45.03すまん、immutableオブジェクト=statelessではない。
この補足は完全に間違い。
インスタンスメソッドでstatelessな実装ができると言いたかった。
こっちが先にメソッドにだけ論点を当てたのに、寝ぼけてたようだ。
0138デフォルトの名無しさん
2013/11/07(木) 06:57:59.69staticメソッドの方がテストしやすいとか言っている人はstaticメソッドそのもの
テストしやすさとstaticメソッドに依存した成果物のテストしやすさを混同している
と思うぞ。
仮に前者がテストしやすかったとしても実用上は後者が面倒になっては意味不明。
で、経験則としては成果物がstaticなファクトリメソッド等々に依存すると実装を
モック等に差し替えにくくなって、むしろテストしにくくなる。
モンキーパッチを当てやすい動的言語に対してJavaの場合、staticメソッドの類い
の実装差し替えをやろうとすると大抵はバイトコード書き換えの出番になる。面倒。
例えば人気のあるモックツールであるMockitoなんかは端からDI推奨なんでstatic
メソッドへの対応は無しと割り切っているね。
ただそんなMockitoもモックや振る舞いを定義するメソッドは一連のstaticメソッド
として提供しているんだよね。
Mockitoのユーザは例えばMockitoの実装を差し替えてテストケース自体をテストする
ことなんてまず無いだろうから扱いやすさを優先してstaticにしても普通は問題ない。
Mathについても同様。Mathを使うたびに、
Math m = Math.createFactory(conf).getInstance(); m.cos(m.getPI() * 0.25);
とファクトリやインスタンスを引っ張ってくるとか、
<bean id="myBean" class="foo.baa.MyClass">
<property name="mathInstance">
<bean ...
とかDI定義書くの普通に嫌でしょw
0139デフォルトの名無しさん
2013/11/07(木) 18:54:01.000140デフォルトの名無しさん
2013/11/07(木) 22:36:38.140141デフォルトの名無しさん
2013/11/08(金) 00:29:08.60それができない言語はゴミ
0142デフォルトの名無しさん
2013/11/08(金) 00:57:10.530143デフォルトの名無しさん
2013/11/08(金) 01:34:43.34Mathのパフォーマンス不足も十分あり得るらしいのでそれでは困るらしい。>98的には。
0144デフォルトの名無しさん
2013/11/08(金) 01:50:46.92import static
0145デフォルトの名無しさん
2013/11/08(金) 05:55:14.470146デフォルトの名無しさん
2013/11/08(金) 06:39:36.79ベンチマークマニアか3Dかゲームかしらないけど
0147デフォルトの名無しさん
2013/11/08(金) 07:21:38.08もっと早い方法は存在する
エンジンの内部実装関数を呼ぶのが一番簡単だが
0148デフォルトの名無しさん
2013/11/08(金) 07:51:50.33差し替える価値のある他の実装が存在するのかね。
0149デフォルトの名無しさん
2013/11/08(金) 09:04:52.22という考えも間違ってる。
差し替えられないといけないのは
単体でテストする意味が無いような場合のみ
0150デフォルトの名無しさん
2013/11/08(金) 13:36:54.47自分で頑張るよりもネイティブの関数使って将来性に期待するのも上品
0151デフォルトの名無しさん
2013/11/08(金) 19:35:57.660152デフォルトの名無しさん
2013/11/08(金) 19:47:18.66それはそれで実行速度がまるで読めなくて困るんだけどな。
number crunching的にゃ、C++のようにコンパイル時にピシッとインライン化して最適化して
predictableな動作してくれるのが結局正義でしょ。
0153デフォルトの名無しさん
2013/11/08(金) 19:52:08.630154デフォルトの名無しさん
2013/11/08(金) 20:09:32.190155デフォルトの名無しさん
2013/11/08(金) 20:17:44.70あとこれからのMathは最適化の重要な情報の付加も期待されている
var floats = new Float32Array(calc())
floats[0] = floats[1] + floats[2] //最適化容易
floats[0] = floats[1] + floats[2] + 1 //最適化困難
floats[0] = Math.fround(floats[1] + floats[2]) + 1 //最適化容易
0156デフォルトの名無しさん
2013/11/08(金) 21:48:03.21Math使わないで何をどうやる話?
0157デフォルトの名無しさん
2013/11/08(金) 21:56:48.410158デフォルトの名無しさん
2013/11/08(金) 21:59:44.060159デフォルトの名無しさん
2013/11/08(金) 22:10:48.65せいぜい3倍程度だろ。
0160デフォルトの名無しさん
2013/11/08(金) 23:01:06.08http://nothingcosmos.blog52.fc2.com/blog-entry-155.html
0161デフォルトの名無しさん
2013/11/08(金) 23:24:44.74アプリ全体で考えるのが普通だからさ。
0162デフォルトの名無しさん
2013/11/08(金) 23:28:25.970163デフォルトの名無しさん
2013/11/08(金) 23:38:21.67お前の基準なんか誰も興味ないからわざわざここに書かないでくれ
スレが汚れる
0164デフォルトの名無しさん
2013/11/09(土) 00:28:22.15大規模計算の分野で広くバリバリ使われるようになってから顔を出そうね。
0165デフォルトの名無しさん
2013/11/09(土) 03:13:18.770166デフォルトの名無しさん
2013/11/09(土) 04:11:52.170167デフォルトの名無しさん
2013/11/09(土) 05:05:20.13このレス一つで本来のOOPをまるで理解していないのがわかる
0168デフォルトの名無しさん
2013/11/09(土) 06:10:28.310169デフォルトの名無しさん
2013/11/09(土) 11:31:53.25ネタは多ければ多いほど馬鹿騒ぎできていいじゃない
0170デフォルトの名無しさん
2013/11/09(土) 17:16:44.32正義に文句があるということは、お前が悪ってこと。
0171デフォルトの名無しさん
2013/11/09(土) 17:23:35.58JavaScriptってJavaScriptで実装されてんのかな?
RhinoはJavaだけど、Node.jsはNode.jsで実装されてんの?
正義ならそうするの?
0172デフォルトの名無しさん
2013/11/09(土) 17:27:51.270173デフォルトの名無しさん
2013/11/09(土) 17:40:00.17Rubyもセルホスティングなんだっけか?Pythonは聞いたことあるが。
0174デフォルトの名無しさん
2013/11/09(土) 17:46:56.08何かいいことあるの?
0175デフォルトの名無しさん
2013/11/09(土) 17:50:06.38なにか良いことあるの?ではなく
なにか良いことあったの?にする。
0176デフォルトの名無しさん
2013/11/09(土) 17:59:25.24当時の技術でスタイルシートの解釈は非常に難しく、IEは凝ったCSSサイトを
正常に表示できず、ブラウザごと落ちてしまうことが多かった。
時にはOSごと落ちてしまうことすらあった。
しかしながら、ネットスケープはJSのパワーを生かし見事なCSS解釈をやってのけた。
CSSを避けながら閲覧しなければならないIEを後目に着々とシェアを伸ばしたのである。
0177デフォルトの名無しさん
2013/11/09(土) 18:14:16.33ネットスケープはひどかったな。CSSを有効にすると落ちるから
無効にするのが常識だった。
http://softark.net/articles/m-0002.html
Netscape の惨状
びっくりした。Netscape は、いったいいつの間にこんな惨状に陥ってしまったのだろう。
ひどいもんだ。スタイル・シートを使っているページは、これでは見る気がしないだろう。
画像と文字が重なるわ、画像同士が重なるわ、テーブルの罫線が見えないわ、
センタリングした筈の区画が左端に寄るわ、もう、ぐちゃぐちゃである。
いや、ぐちゃぐちゃと言ったが、画像も入れず、TABLE も入れず、float も使わなければ、
特に大きな問題は無いようだ。つまり、こういう文章だけのページは、ほぼ問題ない。
IE で見るより、少々しょぼいと言うか、不細工な感じがするが、多分、気のせいだろう。
しかし、画像を入れると、途端におかしくなる。たとえば、楽しい日記の2月14日。たとえば、
裏夜食日記の2月12日。また、たとえば、偽偽夜食日記の2月19日。float させていなくても、
おかしくなる。画像が文字を隠したり、画像同士が重なったり、要するに、絵日記は全滅の態である。
line-heightがあるとIMGもそれだけしか改行されないのだと風の噂【謎】に聞く。
やってみると、その通りだった。で、スタイル・シートを少々修正。しかし、依然として
float させるとうまく行かない。二行目からは回り込むが、一行目が必ず画像の下に隠れてしまう。
しかも、外部スタイル・シートでなく HTML 内で float を指定すると、これはこれで挙動が異なって、
何かヘン。では、というので、非推奨の align 属性で回り込みを指定すると、画像の下端を超えても文字列のコラム幅が復元しない
(回り込みが解除されない)。どうなってんのか、ワケワカメだ。いや、バグリまくりだ。もう、わしゃ、知らん。
Master Compatibility Chart というので見ても、Netscape の対応は Microsoft に比べて随分遅れているようだ。
また、float や clear は特に実装が難しい所なので、ブラウザによらずバグが多いようだ。
ただ、IE 5 はかなり良くなった、とも書かれている。
0178デフォルトの名無しさん
2013/11/09(土) 18:15:37.34バグ
Netscape Navigatorは、数え切れないほどの意味不明な
バグを抱えるソフトウェアであった。
まだNetscape Navigator在りし頃、当時の厨房がInternet Explorerを
叩くのにセキュリティなどのソフトウェア面のバグをよく指摘していたが、
自分の用いているNetscape Navigatorについては見てみないふりをしていたらしい。
Netscape Communicator 4頃のバグにはかなり酷いものが存在し、
例えばスタイルシート(CSS)におけるline-heightのバグでレイアウトが異常になる、
日本語などのマルチバイト文字のフォント指定をするとCSSの指定自体が無効となる、
といったものがあった。必要最低限のレベルでさえ使い物にならない状態であったため、
ここからNetscapeは徹底的に叩かれることになる。
0179デフォルトの名無しさん
2013/11/09(土) 18:16:54.47ネットスケープ 4.xのCSS処理は非常に問題が多いです。
この問題点を挙げるとそれだけでサイトが一つ作れてしまうほどです。
ここでは、ネットスケープ 4.xで問題が起こり難くする方法について解説しましょう。
ネットスケープ 4.xに関しては考慮しないと言うのが一番簡単な方法ですが、
だからと言ってネットスケープ 4.xで問題のあるスタイルシートをそのまま取扱わせるのは好ましくはありません。
最悪の場合、ネットスケープ 4.xがクラッシュする事もあるからです。
そこで、ネットスケープ 4.xではCSSを取扱わせないのが一番無難な方法です。
スタイル定義ファイルをネットスケープ 4.xで当てないためには、そのスタイル定義ファイルに
関する<link>要素にscreen値以外の値を入れたmedia属性を当てるだけで実現します。
具体的には以下の通りになります。
0180デフォルトの名無しさん
2013/11/09(土) 18:20:19.37http://www.oldapps.com/netscape.php
4とかのバージョンは本当にひどくて
多分Googleなんか落ちると思うよ。
落ちなくても10ページも見れないんじゃないかな?
見れないとか崩れるとかじゃない。落ちるんだよ。
ぐれぐれも、仮想マシンに入れること
0181デフォルトの名無しさん
2013/11/09(土) 18:22:50.60Linuxなら落ちません。
0182デフォルトの名無しさん
2013/11/09(土) 18:26:38.11http://his.luky.org/ML/linux-users.4/msg01985.html
Slackware3.5+PJE0.1.5でNetscape Communicatorを使ってるときに
フリーズが頻発するため困ってます。パソコン自体が完全に固まって、
Telnetでほかのパソコンからのアクセスも受け付けなくなり、リセット
ボタンを押さざるを得なくなります。
0183デフォルトの名無しさん
2013/11/09(土) 18:33:17.600184デフォルトの名無しさん
2013/11/09(土) 18:38:16.94あほ
ユーザプロセスで落ちるかヴォケ
0185デフォルトの名無しさん
2013/11/09(土) 18:42:16.920186デフォルトの名無しさん
2013/11/09(土) 19:20:12.65V8はエンジンの中ではJavaScriptの度合いがかなり多い方
複雑な部分、例えばDateとかはJSでよく書かれてる
もともとESの企画中の内部関数が結構抽象度高いので
JSで実装するのには向いてる
Node.jsももうかなりJS
Socket、Event、Bufferの3本柱はネイティブだけど
その周りの肉やら何やらはほぼ全部JS
>>176
JSのCSSパーサは今になってまた需要が出てきてる
https://github.com/NV/CSSOM
0187デフォルトの名無しさん
2013/11/09(土) 19:27:53.54普通に落とせるよw
べつに変なこと考えなくても、例えばリソースを完全に食いつぶすだけでもクラッシュするからね
0188デフォルトの名無しさん
2013/11/09(土) 19:51:25.61世の中には本当に手に負えないバカがいるんだなw
0189デフォルトの名無しさん
2013/11/09(土) 20:05:02.69ゴミと言われて反論できないブラウザだったよな。
0190デフォルトの名無しさん
2013/11/09(土) 20:10:45.360191デフォルトの名無しさん
2013/11/09(土) 20:20:42.92IE以外のブラウザがまともになったのは
それから何年後だと思う?
0192デフォルトの名無しさん
2013/11/09(土) 20:23:16.47Web業界では週単位で事態が動くんだが
1年前なんてかなりの常識が通用しなくなる大昔だろ
0193デフォルトの名無しさん
2013/11/09(土) 20:25:48.83まともになったのはそれから数年後。
週単位で自体が動く中、数年間も
他のブラウザは使い物にならなかったのだよ。
0194デフォルトの名無しさん
2013/11/09(土) 20:27:03.74JSはCの二倍速い。
0195デフォルトの名無しさん
2013/11/09(土) 20:29:36.47昔のことなんてどうでもいいよ
>>194
キチガイ乙
0196デフォルトの名無しさん
2013/11/09(土) 20:34:34.33だからCの二倍速いんです。
Node.jsも大部分JSで書かれています。
CSSの解釈もJSがいいという人が増えています。
0197デフォルトの名無しさん
2013/11/09(土) 20:42:06.34本当にうまい具合にできてると思う
まあ速さの秘訣はネイティブ側で泥臭くやってるからなんだけどね
泥臭いと言ってもちゃんと整理されてるし
毎日のように何処かがリファクタリングされてて本当に美しい
最近はパーサを一新してて注目に値するね
0198デフォルトの名無しさん
2013/11/09(土) 20:43:50.910199デフォルトの名無しさん
2013/11/09(土) 20:44:19.65OS とその食い潰すリソースってなに?
0200デフォルトの名無しさん
2013/11/09(土) 20:47:41.53まったくだよw
なんでネスケ4の話しだしたの?
ばかじゃね?w
0201デフォルトの名無しさん
2013/11/09(土) 20:52:17.28M$の陰謀で消された。
消費者は皆ネスケの復活を望んでいた。
0202デフォルトの名無しさん
2013/11/09(土) 20:58:04.830203デフォルトの名無しさん
2013/11/09(土) 20:58:23.31ネスケのせいでCSSが使われなくなったと
言ってもいいぐらいだよ。
0204デフォルトの名無しさん
2013/11/09(土) 20:59:28.290205デフォルトの名無しさん
2013/11/09(土) 20:59:29.830206デフォルトの名無しさん
2013/11/09(土) 21:09:42.89一方、ネスケはJSで書かれていたので完璧だった。
検索で調べてもこれらの事実は出てこない。
なぜならM$が工作しているからだ。
当時をリアルに知っているものだけがネスケの素晴らしさを知っている。
0207デフォルトの名無しさん
2013/11/09(土) 21:11:41.580208デフォルトの名無しさん
2013/11/09(土) 21:13:12.37つまり、お前は嘘言っているってことじゃねーかw
自分で、言ってどうするw
0209デフォルトの名無しさん
2013/11/09(土) 21:15:29.45それはどういう意味かな?
0210デフォルトの名無しさん
2013/11/09(土) 21:35:45.88まあ、陰謀とか言いながら自分に都合のいい情報を鵜呑みにするのは格好悪いね。
0211デフォルトの名無しさん
2013/11/09(土) 21:37:50.440212デフォルトの名無しさん
2013/11/09(土) 21:42:42.04信じたくない気持ちは理解できるけど、使ってみればすぐ気付くこと。
ベンチで圧倒的に速いのも当たり前のこと。
今は何でもJSで書き直すフェーズに来てて、そのうちOSやドライバもJSで
書き直される。
これはLinusも検討すると言ってるよね。
0213デフォルトの名無しさん
2013/11/09(土) 21:46:25.730214デフォルトの名無しさん
2013/11/09(土) 21:48:13.700215デフォルトの名無しさん
2013/11/09(土) 21:56:06.08全部MSの陰謀だよ。
0216デフォルトの名無しさん
2013/11/09(土) 22:16:13.980217デフォルトの名無しさん
2013/11/09(土) 22:38:25.84カッコ可愛い言語ってかんじかな
0218デフォルトの名無しさん
2013/11/09(土) 23:12:29.520219デフォルトの名無しさん
2013/11/09(土) 23:46:13.320220デフォルトの名無しさん
2013/11/09(土) 23:54:02.540221デフォルトの名無しさん
2013/11/10(日) 00:32:12.890222デフォルトの名無しさん
2013/11/10(日) 05:52:47.490223デフォルトの名無しさん
2013/11/10(日) 06:58:46.170224デフォルトの名無しさん
2013/11/10(日) 09:31:39.840225デフォルトの名無しさん
2013/11/10(日) 09:52:52.52認めて受け入れようって気持ちがないと成長できないよ
0226デフォルトの名無しさん
2013/11/10(日) 10:11:15.960227デフォルトの名無しさん
2013/11/10(日) 10:36:06.090228デフォルトの名無しさん
2013/11/10(日) 10:45:47.53どのへんが古臭いの?
クラスメソッドは副作用なきよう、というのは確かにちょっと、という感じだが
0229デフォルトの名無しさん
2013/11/10(日) 10:48:00.350230デフォルトの名無しさん
2013/11/10(日) 10:59:29.79>狭苦しい
ここもう少し
0231デフォルトの名無しさん
2013/11/10(日) 11:07:39.51そんなの強制されてないし副作用が必ず発生するとは限らない。
その辺の認識からして狭いということだろう。
0232デフォルトの名無しさん
2013/11/10(日) 11:09:44.28多いと認めるんだろう?
ならお前は同じことを言っている。
0233デフォルトの名無しさん
2013/11/10(日) 11:11:03.87http://www.slideshare.net/dynamis/try-firefox-os/16
まだまだネイティブまでは遠い
0234デフォルトの名無しさん
2013/11/10(日) 11:11:04.61そこの認識も狭い。
0235デフォルトの名無しさん
2013/11/10(日) 11:13:27.910236デフォルトの名無しさん
2013/11/10(日) 11:16:07.720237デフォルトの名無しさん
2013/11/10(日) 11:16:30.62それでもCの2倍遅くて、
C#と同じくらいなんだね
0238デフォルトの名無しさん
2013/11/10(日) 11:18:36.32副作用のとらえかたが間違っている。
0239デフォルトの名無しさん
2013/11/10(日) 11:19:18.310240デフォルトの名無しさん
2013/11/10(日) 11:19:57.930241デフォルトの名無しさん
2013/11/10(日) 11:21:12.23その関数が終わるまで延期されるのと
生メモリを触ることでGCの影響を受けなくすることもできるというだけです
0242デフォルトの名無しさん
2013/11/10(日) 11:24:29.56間違ってるというのなら
間違っているという証明をした方がいいね。
0243デフォルトの名無しさん
2013/11/10(日) 11:25:30.14つまり、その関数がアプリ終了まで
ずっと動いていれば、GCの影響が
全くないってこと?
0244デフォルトの名無しさん
2013/11/10(日) 11:25:43.380245デフォルトの名無しさん
2013/11/10(日) 11:28:16.12次のページ見てもらえれば分かるけど
asm.jsそのものは数割遅い程度でNaClなんかといい勝負
でもasm.jsでは数値計算しか出来ないし
全部をasm.jsで書くのは不可能だからね
だから全体では概ね対応環境で2倍、
直接対応はしてないけどいろいろ頑張ってるChromeで3倍くらいになる
0246デフォルトの名無しさん
2013/11/10(日) 11:28:52.69証明できないくせに蒸し返すとか
それ単に悔しかっただけだろw
0247デフォルトの名無しさん
2013/11/10(日) 11:32:59.04古臭い、ではなく、狭苦しい。
ほとんど全部だよ。
> インスタンスメソッドというのは、インスタンスの内容を変更するもの。
> データが主であり、それを変更するためにメソッドを用意する。
この見識があまりに狭い。
オブジェクトというのはある役割を果たすためのものだ。
データが主?それって目的と手段がごっちゃになってる。
> インスタンスの内容を変更しないのであれば、それはインスタンスメソッドにする意味が無い。
> インスタンスメソッドはインスタンスを変更するのが目的であり、それはつまり副作用を目的としている。
インスタンスの内容に「基づいて」役割を果たせばよいのであって、内容を変更する必要はない。
>>128-129はオブジェクト自身に対するメソッド発行しか念頭にないんじゃないかと疑う。
0248デフォルトの名無しさん
2013/11/10(日) 11:34:04.21asm.jsで作った関数はJS層にエクスポートされてるネイティブ関数と同じように振る舞います
JS層からasmネイティブ関数を呼び、その返り値を受け取って
処理を続けるという形になるので、副作用の実質出来ないasm.jsの部分がずっと働くということはありません
また、GCが働かない範囲では数値や元々メモリを確保する役割のバッファへの書き込みしかしないので
いたずらにメモリを消費するということはありません
0249デフォルトの名無しさん
2013/11/10(日) 11:38:37.21「物」って意味だけどね。
役割果たすための「物」
さて物ってなに?
物以外ってなに?
0250デフォルトの名無しさん
2013/11/10(日) 11:39:43.12メッセージを物に対して送るとき、
反応するのは、送り先の物である。
これがオブジェクト指向の原則。
0251デフォルトの名無しさん
2013/11/10(日) 11:41:04.98あとOOは対象指向と言うと思う。
0252デフォルトの名無しさん
2013/11/10(日) 11:42:40.69オブジェクトに対するッセージだってことがわかるよ。
なぜそのオブジェクトに対してメッセージを送るのか?
それはそのオブジェクトに送らなければいけない
理由があるから。
0253デフォルトの名無しさん
2013/11/10(日) 11:45:36.39それはそのオブジェクトに対して
メッセージを送る必要がないということを意味する。
そういうメソッドは違うクラスにあったとしても
問題なく動くだろう。
その場合、クラスは単にメソッドの種類をグループ化する
名前空間として使われているだけにすぎない。
名前空間はクラスではない。
0254デフォルトの名無しさん
2013/11/10(日) 11:48:34.10だからそういう議論は必ずしも成り立たないんだよ。
0255デフォルトの名無しさん
2013/11/10(日) 11:53:14.17オブジェクトから関数が生えてるように見えたらメソッドだ
0256デフォルトの名無しさん
2013/11/10(日) 11:53:37.45何で変化する必要がある?
オブジェクトは自身の情報を持っている。
その情報に「基づいて」、そのオブジェクトが役割を果たす。
その情報はそのオブジェクトだけが持っているかもしれない。
その場合他のオブジェクトはその役割を担えない。
別に変化する必要はないよね。
0257デフォルトの名無しさん
2013/11/10(日) 11:53:56.57static int a=0;
static int min(int b){
if(a<b){a=b;}
return a;
}
}
じゃあめんどくさいけど反証しとく。
staticだからといって内部状態がないわけじゃない
0258デフォルトの名無しさん
2013/11/10(日) 11:55:49.870259デフォルトの名無しさん
2013/11/10(日) 12:07:19.86そういうのが「狭い」っていうんだよ。
0260デフォルトの名無しさん
2013/11/10(日) 12:08:22.47関数にこれが対象ですよとオブジェクトを送るんだと思うんだが
0261デフォルトの名無しさん
2013/11/10(日) 12:13:39.080262デフォルトの名無しさん
2013/11/10(日) 12:17:27.560263デフォルトの名無しさん
2013/11/10(日) 12:22:44.41class Postman {
void sendMail() {
}
}
Postmanオブジェクトにメイルを送ってというメッセージを送るときは
次のようになる。
Postman p = new Postman();
p.sendMail();
メッセージを送ることそれすなわちメソッドを呼ぶことなり。
0264デフォルトの名無しさん
2013/11/10(日) 12:25:09.82歴史的に先行するものが「本来」だというのは、それこそ狭い見識ですね。
0265デフォルトの名無しさん
2013/11/10(日) 12:26:39.64それだと単なる見る立ち位置の問題じゃない
もっと深い話ないの?
0266デフォルトの名無しさん
2013/11/10(日) 12:28:46.79Σd(ゝ∀・) ないよ!
0267デフォルトの名無しさん
2013/11/10(日) 12:29:26.40なるほど
ラブリーフォースアローみたいなもんですか
0268デフォルトの名無しさん
2013/11/10(日) 12:32:00.30どんなメッセージをどんなオブジェクトに送っても構わない
まあオブジェクトにレシーバーがなかったらエラーになるけど
0269デフォルトの名無しさん
2013/11/10(日) 12:42:10.16getter/setterのgetterがそうだろ。
メソッドはオブジェクトを変化されるか、
もしくはオブジェクトの状態を取得するかのどちらか。
さすがにオブジェクトに無関係な処理は
つまり引数と戻り値が全てのメソッドは
メソッドにする意味は無いけどね。
0270デフォルトの名無しさん
2013/11/10(日) 12:42:46.07http://d.hatena.ne.jp/perlcodesample/20130227/1361928810
お前らこれについてはどう思ってるわけ?その通りだと思う?
0271デフォルトの名無しさん
2013/11/10(日) 12:42:54.60> そういうのが「狭い」っていうんだよ。
「狭い」というのなら、
お前の「広い」を言えよ。
0272デフォルトの名無しさん
2013/11/10(日) 12:43:55.26そこのブログに書いてある
反論のつもりだと思ってるよ。
0273デフォルトの名無しさん
2013/11/10(日) 12:46:45.87それよりmyってなんですか
0274デフォルトの名無しさん
2013/11/10(日) 12:52:06.72ローカル変数
0275デフォルトの名無しさん
2013/11/10(日) 12:55:02.86気持ち悪いという感覚を持つべきだ
0276デフォルトの名無しさん
2013/11/10(日) 12:59:32.15>メッセージパッシングの場合メッセージとオブジェクトは互いに独立してるってだけ
メソッドとオブジェクトが独立してるのもあるぞ
プロトタイプベース言語とか
それと似てるってことか?
0277デフォルトの名無しさん
2013/11/10(日) 13:00:58.010278デフォルトの名無しさん
2013/11/10(日) 13:04:50.91数値型の種類とか、オブジェクトのクラスの種類まで決め打たれるの?
0279デフォルトの名無しさん
2013/11/10(日) 13:08:26.89型は「型にはめる」ことでやりやすくしようって試みだから
型にはめるのを良しとしなければその通り
それから、人間のためと同じかそれ以上にコンパイラのための試みだと思うから
そんなん気にしたくねーよって主張なら型がない方のメリットが上回ってくると思う
この辺は利便性が云々より環境と性格だと思う
0280デフォルトの名無しさん
2013/11/10(日) 13:15:09.40オブジェクトから独立したメソッドというのがよくわからないけど
プロトタイプベース言語そのものだったりそれに似た機構を持っていることが多いと思う
0281デフォルトの名無しさん
2013/11/10(日) 13:15:31.06> ソッドはオブジェクトを変化されるか、もしくはオブジェクトの状態を取得するかのどちらか。
オブジェクトの状態を参照して(利用して)何かするんであって、取得する必要は必ずしもない。
getterは本当に必要なのものだけに限定した方がいい。
0282デフォルトの名無しさん
2013/11/10(日) 13:20:31.29ハス公キモいよねぇ〜
letくらいつけろよ、バカ!
0283デフォルトの名無しさん
2013/11/10(日) 13:23:56.10なにいってんの?
オブジェクトの状態を変えないが、
メソッドである必要があるものを言っただけだろ。
0284デフォルトの名無しさん
2013/11/10(日) 13:25:49.11そうだね
0285デフォルトの名無しさん
2013/11/10(日) 13:27:59.590286デフォルトの名無しさん
2013/11/10(日) 13:29:01.44>引数と戻り値が全てのメソッドはメソッドにする意味は無いけどね。
こういうメソッドは意味無いこともない。
private int min(int a,int b){
return a<b?a:b;
}
0287デフォルトの名無しさん
2013/11/10(日) 13:31:02.250288デフォルトの名無しさん
2013/11/10(日) 13:31:40.48代入がある劣った言語と一緒にされちゃ困る
0289デフォルトの名無しさん
2013/11/10(日) 13:32:15.70>>269であんたは
>メソッドはオブジェクトを変化されるか、「もしくは」オブジェクトの状態を取得するかのどちらか。
と言っているが、そのどちらでもない、つまりオブジェクトを変化させないしgetterでもない
メソッドもあると言っている。
それがオブジェクトの状態を参照して(利用して)何かするメソッドだということ。
0290デフォルトの名無しさん
2013/11/10(日) 13:32:52.46それは意味が無い。
まずスコープがprivateである。
これはユニットテストが出来ないことを意味する。
ユニットテストをすることを考えると、
publicにした方がいい。
publicにすることで見えてくるもの。
それはこのクラスにあるべき機能なのかということ。
明らかに特定のクラスに依存したコードでないのだから、
簡単に移動できることがわかる。
つまりそのコードはクラスとは無関係のコードということだ。
0291デフォルトの名無しさん
2013/11/10(日) 13:33:12.250292デフォルトの名無しさん
2013/11/10(日) 13:33:24.94> private int min(int a,int b){
> return a<b?a:b;
> }
それはstaticで十分だということじゃね?
0293デフォルトの名無しさん
2013/11/10(日) 13:34:13.95うん、そして、引数と戻り値だけで完結するものは、
メソッドではないとも言ってる。
クラスは単に名前空間として利用しているだけ。
引数と戻り値だけで完結するものは
素晴らしいよね。
0294デフォルトの名無しさん
2013/11/10(日) 13:37:04.76JavaScriptのことだなそれ
0295デフォルトの名無しさん
2013/11/10(日) 13:41:18.94違うけど? どうしてそう思ったの?
0296デフォルトの名無しさん
2013/11/10(日) 13:42:02.03Math exp([] (double x) { return exp_impl(X);});
double y = exp(1.5);
0297デフォルトの名無しさん
2013/11/10(日) 13:43:10.73Mathクラスのインスタンスだと "捉えれば" いいのだ。
って言ってる時点でな・・・。
0298デフォルトの名無しさん
2013/11/10(日) 13:44:51.10もしかして、メソッド内で自身の状態を参照することを「オブジェクトの状態を取得」と表現してんの?
「オブジェクトの状態を取得」と言えば、普通外部に公開するgetterのことを想像するが。
0299デフォルトの名無しさん
2013/11/10(日) 13:45:42.02Intergerクラスのメソッドであるべきじゃないの?
Integer a = 1;
Integer b = 2;
Integer c = a.min(b);
みたいにさ。
0300デフォルトの名無しさん
2013/11/10(日) 13:47:47.67何が言いたいのか?
そりゃ実際の数学では個々の関数はインスタンスと考えられるけど、プログラム言語でも同様に実装しろと?
0301デフォルトの名無しさん
2013/11/10(日) 13:52:33.44minの意味を考えろ。属するクラスが全然違う。
Intergerクラスのメソッドなんかじゃない。
0302デフォルトの名無しさん
2013/11/10(日) 13:55:16.15オブジェクトが直接持ってる
要はobj.method()と出来るものはなんでも
そのオブジェクトのメソッドと呼んだりするな
0303デフォルトの名無しさん
2013/11/10(日) 13:58:30.10演算子を内部的にメソッドであると解釈する考え方もあるようですが、
もうそろそろ、演算子とメソッドの根本的な違いを
人類が認識するべき時かもしれませんね。
演算子とメソッドは全く違うもの。そしてminは演算子。
a 演算子 b があったとき、これをa.演算子(b) と解釈するのは間違い。
演算子とはaやbのメソッドではなく、aとbを引数にする関数
演算子(a, b) つまり関数(a, b)と解釈するのが正しい。
aとbを対等に扱うものはメソッドではなく関数で実装する。
メソッドは特定のオブジェクトに対して処理をするものでなければならない。
もし無理やりminをメソッドにするならば、a.min(b) はaよりbが小さければ、
aの中身をbに置き換えるものでなければならない。
演算子を関数として解釈するならば、三項演算子
a ? b : c を if(a, b, c) と捉えることも簡単でしょう。
四項演算子、五項演算子ってのも作ろうと思えば作れるでしょうね。
Integer i, String s の演算子+をIntegerのメソッドにするか、Stringのメソッドにするのか
悩む必要もありません。演算子=関数ははクラスとは独立しているので、
関数+(Integer i, String s) を実装すればいいだけです。
0304デフォルトの名無しさん
2013/11/10(日) 14:00:40.68a + b
↓
a.add(b)
とされるし区別ないよ^^;
0305デフォルトの名無しさん
2013/11/10(日) 14:01:39.91これほんと違和感あるわw
a + b
↓
add (a, b)
と解釈するほうが
よっぽどわかりやすいだろ。
0306デフォルトの名無しさん
2013/11/10(日) 14:05:55.970307デフォルトの名無しさん
2013/11/10(日) 14:08:27.76自機が爆弾に当たれば爆発する、
自機が仲間にあたっても何も起こらない。
自機がパワーアップアイテムに当たればパワーアップする
っていうのを実装するとき、
この処理ををどこに実装するかって問題がある。
自機に実装すればいいと思うが、
そうすると、自機は、爆弾や見方やパワーアップアイテムという
情報を知らないといけない。
つまり外部のクラスに依存してしまうということ。
これを
接触関数(自機、爆弾) {
自機.爆発();
爆弾.爆発();
}
接触関数(自機、パワーアップアイテム) {
自機.パワーアップ();
パワーアップアイテム.消滅();
}
接触関数(自機、仲間) {
なにもしない
}
とできれば、シンプルに実装できる。
0308デフォルトの名無しさん
2013/11/10(日) 14:16:38.13そっかjavascriptってすげーな
0309デフォルトの名無しさん
2013/11/10(日) 14:18:38.49それは関数のオーバーライドで済まそうっていう考えね
関数のオーバーロードが無い言語もあるし、型が緩い言語とかであっても
もっと広く適応できるメソッド的な仕組みで実現しようという試み
前者はまさに「演算子オーバーロード」だけど
後者は特定のタイプに対する演算子の振る舞いを定義するっていう
ちょっと考え方が違う
例えばaを主体について定義するとこうなる
a + b → a.add(b)
b + a → a.radd(b)
0310デフォルトの名無しさん
2013/11/10(日) 14:19:43.71見てわかるようにオーバーロードができる言語の話で
できないJavaScriptの話なんかしてないけど、
頭ダイジョーブ?
0311デフォルトの名無しさん
2013/11/10(日) 14:21:28.54a + b → a.add(b) ・・・aにbを加算する
b + a → b.add(a) ・・・bにaを加算する
普通は
a + b ・・・ aとbを加算したものを返す
0312デフォルトの名無しさん
2013/11/10(日) 14:23:14.38リストは足すものではありません!
みたいな〜
0313デフォルトの名無しさん
2013/11/10(日) 14:28:15.110314デフォルトの名無しさん
2013/11/10(日) 14:29:55.13動的型付けにはオーバーロードなんてないんですよ!!
0315デフォルトの名無しさん
2013/11/10(日) 14:31:20.430316デフォルトの名無しさん
2013/11/10(日) 14:32:30.24例として 1 + 2 という式を考えてみる
関数型の場合、(>>260が言うように)関数へ 1 と 2 という
整数オブジェクトを送ることが計算である
オブジェクト指向では、1 という整数オブジェクトへ + 2 という
メッセージを送ることが計算である
ここで、+ 2 の"+" は(演算子ではなく)メッセージの種類を示す
識別子であり、セレクタと呼ばれる
また、+ という関数オブジェクトへ整数対 (1, 2) というメッセージを
送るというスタイルでも計算を表現できる
まとめると、オブジェクト指向の中で、後者の関数オブジェクトへ
引数を送るというスタイルに限定したものを関数型と呼ぶ
言い換えると、オブジェクト指向は関数型を包含した計算モデルである
0317デフォルトの名無しさん
2013/11/10(日) 14:32:41.570318デフォルトの名無しさん
2013/11/10(日) 14:33:38.50オーバーロードがなくても型はあるんだから
実行時オーバーロードをスレば良い。
つまり、型みて振り分ければいいだけ。
add(integer a, integer b)で呼ばれたら
add_integer_integer(a, b)に移譲
することだってできるだろう?
0319デフォルトの名無しさん
2013/11/10(日) 14:34:38.35正解!
0320デフォルトの名無しさん
2013/11/10(日) 14:34:55.12オブジェクトはメッセージを受け取れない
受け取れるのは関数とはそういった類のもの
わざわざ難しく考えてるようにしか見えない
0321デフォルトの名無しさん
2013/11/10(日) 14:37:10.00それは変だよ
add_integer_integer(a, b)
という関数書いたら自動で使われるっていうのは
0322デフォルトの名無しさん
2013/11/10(日) 14:37:17.20できるの?具体的のどの言語のこと言ってるの?
0323デフォルトの名無しさん
2013/11/10(日) 14:39:22.51こういうのを手続き型っていうんですよね?
0324デフォルトの名無しさん
2013/11/10(日) 14:41:07.53型名を取得する関数はあるんだから
integerという型名がわかったら、
あとはeval('add_' + name_a + '_' name_b + '()')
を実行するだけじゃねーかw
0325デフォルトの名無しさん
2013/11/10(日) 14:43:01.33めんどっすね。
0326デフォルトの名無しさん
2013/11/10(日) 14:46:51.50call度にeval介するのか
うんうん、初心者にしては頑張ったな
0327デフォルトの名無しさん
2013/11/10(日) 14:47:31.09汎用的な関数で処理できるんだから
あとは1行書けば終わりだよ。
function add(a, b) {
return hogehoge('add', a, b');
}
このhogehoge関数を
作れない人はいないでしょ?
これだけでも出来るかもな
add = function(a, b) { hogehoge('add', a, b') }
さらに
add = createHogeHoge('add');
スタックトレース解析して関数名取得するなら
add = createHogeHoge();
0328デフォルトの名無しさん
2013/11/10(日) 14:48:39.62> call度にeval介するのか
あのー、動的型付け言語ってのは
そういうものなんですけど?
0329デフォルトの名無しさん
2013/11/10(日) 14:50:53.66http://www.slideshare.net/BrendanEich/js-resp/10
0330デフォルトの名無しさん
2013/11/10(日) 14:52:56.45その名前の関数こしらえなきゃならんのでしょ、めんどっすね。
0331デフォルトの名無しさん
2013/11/10(日) 14:54:32.32コスト考えましょうね初心者君
0332デフォルトの名無しさん
2013/11/10(日) 14:56:32.77動的言語には向いてないねって言ってるだけなのにどうして意地を張るのか
もwしwかwしwてwww
本当にこ、>>318 wwwこwwれwwがwwいいとwwww思ってんのかwwwww
0333デフォルトの名無しさん
2013/11/10(日) 14:57:11.19釣りが流行ってるのか?
そんなに突っ込みどころ用意してたら釣られる奴いなくなるだろ
0334デフォルトの名無しさん
2013/11/10(日) 14:57:43.24ちがうよ
0335デフォルトの名無しさん
2013/11/10(日) 14:58:35.07おおむね賛成だが
> 関数オブジェクトへ引数を送るというスタイルに限定したものを関数型と呼ぶ
この定義はちょっと違うだろ?
0336デフォルトの名無しさん
2013/11/10(日) 15:01:13.30> その名前の関数こしらえなきゃならんのでしょ、めんどっすね。
何が面倒くさいの?
型ごとに関数を作ること?
あぁ、それは静的型付け言語でも
同じだったw
0337デフォルトの名無しさん
2013/11/10(日) 15:03:44.62静的言語だと関数名変わるわけじゃないし
hogehogeとか書く必要ないし簡単だよ。
動的型なのに型を調べるっていうのがもうちょっと無理があると思う。
0338デフォルトの名無しさん
2013/11/10(日) 15:04:31.320339デフォルトの名無しさん
2013/11/10(日) 15:05:59.90生産性を高めたいなら静的言語を使うべき
0340デフォルトの名無しさん
2013/11/10(日) 15:06:54.27継承があるから型ごとには作らないよ
でも動的型で型名から振り分けとなると自分で全部やることになるよ
0341デフォルトの名無しさん
2013/11/10(日) 15:07:15.21関数型の場合、関数と値(0引数関数)は区別されないよ
0342デフォルトの名無しさん
2013/11/10(日) 15:07:32.39http://www.slideshare.net/BrendanEich/js-resp/15
ただの関数名でどうこうできるとかアホすぎ
0343デフォルトの名無しさん
2013/11/10(日) 15:08:08.510344デフォルトの名無しさん
2013/11/10(日) 15:08:45.410345デフォルトの名無しさん
2013/11/10(日) 15:11:20.360346デフォルトの名無しさん
2013/11/10(日) 15:11:24.18不毛な議論をしてるのはココですか?
0347デフォルトの名無しさん
2013/11/10(日) 15:12:05.370348デフォルトの名無しさん
2013/11/10(日) 15:12:35.70こっちのが楽なの当たり前なんだから
素直に良い部分は良いと認めりゃいいだけなのに
0349デフォルトの名無しさん
2013/11/10(日) 15:12:57.85無意味に難しくしたものだと思っている。
関数オーバーロードができれば、
マルチメソッドは不要になる。
0350デフォルトの名無しさん
2013/11/10(日) 15:16:12.35単に実行時かどうかの違いだし
0351デフォルトの名無しさん
2013/11/10(日) 15:16:49.59マルチメソッドは動的な型で呼び出す関数を切り替える
第一引数でディスパッチする普通のメソッドを拡張したのがマルチメソッド
0352デフォルトの名無しさん
2013/11/10(日) 15:18:14.20型推論と動的型付けくらいには違うんじゃないか
0353デフォルトの名無しさん
2013/11/10(日) 15:19:56.840354デフォルトの名無しさん
2013/11/10(日) 15:24:17.29代数的データ型とパターンマッチによる分岐
0355デフォルトの名無しさん
2013/11/10(日) 15:29:49.32マッチする関数が複数あった場合どうなるかってとこだな
静的なオーバーロードみたくコンパイルエラーには出来ないケースもあるだろうから
実行時エラーにするかHaskellのパターンマッチみたく最初にマッチした関数を実行するくらいしか無いだろうけど
0356デフォルトの名無しさん
2013/11/10(日) 15:39:22.560357デフォルトの名無しさん
2013/11/10(日) 15:48:55.330358デフォルトの名無しさん
2013/11/10(日) 16:13:24.85Perl6はサポートしてるけど、主要なスクリプト言語だとそれくらいだよな
ま、Perl6リリースできてないけど
0359デフォルトの名無しさん
2013/11/10(日) 16:19:14.850360デフォルトの名無しさん
2013/11/10(日) 16:20:20.390361デフォルトの名無しさん
2013/11/10(日) 17:06:57.420362デフォルトの名無しさん
2013/11/10(日) 18:01:30.900363デフォルトの名無しさん
2013/11/10(日) 19:01:29.04> 引数と戻り値だけで完結するものは、メソッドではないとも言ってる。
はぁ?
> 引数と戻り値だけで完結するもの
そんなのは実装の詳細であってメソッドのクライアントには知り得ぬことだ。
そしてこんな実装の詳細によってpublicインターフェイスがstatic云々とかが
左右されるわけないでしょ。
> ユニットテストをすることを考えると、publicにした方がいい。
内部に深い呼び出し階層を持つコードを外からテストする方法は毎度悩ましい
問題ではあるけれども、「ユニットテストをすることを考えるとpublicにした
方がいい」なんて脳天気にpublicにすることなんてあり得ない。
public汚染の罹患者ですか?
0364デフォルトの名無しさん
2013/11/10(日) 19:10:32.54へ?
対象のオブジェクトを変化させたいと思ってるから、
そのメソッドを呼ぶわけで、メソッドのクライアントは
知り得ることだけど?
0365デフォルトの名無しさん
2013/11/10(日) 19:19:09.61実装の詳細じゃないけどね。
メソッドを実行した結果、何が起きるかは
メソッドのクライアントが知るべき情報。
当たり前じゃない。
実装の詳細は知りえぬっていうのは、「何が起きるか」は知らせるが
その起きる動作を実現する方法は知らせないって話。
全く違いすぎるよ。
あーあ、バカ晒したねぇ。そういうことだよ
こういうレベルのやつが噛み付いてくるんだよ。
0366デフォルトの名無しさん
2013/11/10(日) 19:21:22.100367デフォルトの名無しさん
2013/11/10(日) 19:25:38.700368デフォルトの名無しさん
2013/11/10(日) 19:26:35.16そもそも論として「完結」って何よ?
たとえばminメソッドでいえば、そのメソッドはオブジェクトの状態を変化させない
immutableなメソッドだとドキュメントに明記されていて実際にそう実装されている
とする。この場合、minメソッドはメソッドではない方が良いの?
0369デフォルトの名無しさん
2013/11/10(日) 19:32:14.65であるかでないかの話をしてるんだが
0370デフォルトの名無しさん
2013/11/10(日) 19:52:19.71で、どうなの?
引数としてintを二つとって一つ返す、オブジェクトの状態を変化させないminという
名前の操作はメソッドなのそれともメソッドでは無いの?
あとテスト目的でpublicにする是非もよろしく。
この手のpublic汚染もstatic汚染と同様に初学者によくある現実のパターンなので。
0371デフォルトの名無しさん
2013/11/10(日) 20:03:13.11これを実装の詳細だと言うやつがいるんだよねぇw
これ(オブジェクトを変えるか変えないか)は仕様であって
実装の詳細じゃないのにね。
0372デフォルトの名無しさん
2013/11/10(日) 20:06:01.03実装するしか無いよ。
まあそういうのは無視して、
immutableなメソッドかつ、引数と戻り値が全て
(つまりオブジェクトの内部状態にアクセスしない)
まさにmin関数のようなものを
逆にインスタンスメソッドとして実装する理由は何?
その理由を聞きたいね。
名前空間として使う以外に、なにもないでしょう?
0373デフォルトの名無しさん
2013/11/10(日) 20:10:47.52> あとテスト目的でpublicにする是非もよろしく。
テストしたほうがいいのに、テストしないってのは良くない。
他の関数経由でテストできるというが、
それだと、単体でテストするよりもテストが複雑になる。
テストは一番シンプルな形でテストしたほうが
複雑性を取り除くという意味で良い。
で、テストのためにpublicにするのがいやなら、
発想を変えてpublicにするのが妥当な設計に変えればいい。
つまり、あるクラスにprivateなmin関数があるのであれば、
別のクラスを作って、そこにpublicなmin関数を作り
あるクラスからは、そのmin関数を呼べばいい。
そうすれば、自然な設計でpublicにできる。
minのようなものは例外で、そうそうあるもんじゃないと思うかもしれないが、
あるクラス・・・で使用するユーティリティを集めたクラスという設計にすれば、
自然な形で比較的簡単にpublicに変更できる。
0374デフォルトの名無しさん
2013/11/10(日) 20:14:47.81クロージャでOK
0375デフォルトの名無しさん
2013/11/10(日) 20:15:42.00関数内関数があったほうがいい。
0376デフォルトの名無しさん
2013/11/10(日) 20:20:47.72クロージャで良いよ
0377デフォルトの名無しさん
2013/11/10(日) 20:22:57.19http://www.slideshare.net/yukishigenakajo/rubyscala15
> Railsによって得られた生産性の向上は、テスト作成の作業に失われてしまいました
> Ruby(動的言語)の限界
> - 大規模開発に向かない
> - 実行するまでエラーがわからない
もうさ、いろいろと揺り戻しが来てるよね、最近。
動的言語とか、GCとか、ゼロ年代に流行ったものがやっぱり駄目だったと。
潮流が完全に変わった。
動的言語信者は「テスト書け」でずっと押し通してきたが
プログラマは怠惰が美徳であるべきということを忘れている。
テストを書けばいいというのは「運用で解決」と大して変わらんではないか。
必要以上に膨大なテストコードを書くことを厭わない勤勉さはプログラマ失格だ。
0378デフォルトの名無しさん
2013/11/10(日) 20:26:07.50実行してエラーを見つけるものなのに、そこが受け入れられないのは頑固者というもんだよ
まあテスト書きゃあいいだけだが
0379デフォルトの名無しさん
2013/11/10(日) 20:28:32.28GC・・・だと・・・?
0380デフォルトの名無しさん
2013/11/10(日) 20:30:41.72トライアンドエラーでコーディングしていくものと思ってる
別にそこで開発効率が落ちるとは思わない
0381デフォルトの名無しさん
2013/11/10(日) 20:31:38.64ゼロ年代に流行ったGCっていったら
ゲームキューブの方だぞ
勘違いするな
0382デフォルトの名無しさん
2013/11/10(日) 20:34:50.49プログラムレベルだと要はGCみたいなオートシステムが新たに生まれるってことしかないよね
例えば動的なマルチコアへの負荷分散とか、そういうの
0383デフォルトの名無しさん
2013/11/10(日) 20:36:58.390384デフォルトの名無しさん
2013/11/10(日) 20:47:08.48活かしてというかそうせざるを負えないんだろ。
テストが網羅されてることを人間が判断しなきゃいけない時点で効率悪いと思う。
0385デフォルトの名無しさん
2013/11/10(日) 20:48:16.14そもそもサーバーサイドでフレームワークを使う時点で厳しいと思わなくてはならない
実はできる限り物事の繋がりを解いてシンプルにした方が楽な事のほうが多い
フレームワークは簡単にプロトタイプを作るためのもの
フレームワークそれだけでシステムだから更にその上にシステムを作ろうとすると
そりゃあテストから何から大事になる
0386デフォルトの名無しさん
2013/11/10(日) 20:48:24.62> これを実装の詳細だと言うやつがいるんだよねぇw
仕様だよ。
実装の詳細は「オブジェクトの内部状態にアクセスしない」という部分だ。
>>372
> 逆にインスタンスメソッドとして実装する理由は何?
「immutableなメソッドかつ、引数と戻り値が全て」というのは「オブジェクトの
内部状態にアクセスしない」とはイコールでは無いからだ。
たとえばinterface MyInterface{int min(int a, int b);}があって、これを実装
した具象クラスの実装の詳細が
return a <= b ? a : b;
か
private final Comparator<Integer, Integer> myComparator;
...
return this.myIntComparator.compare(a,b) <= 0 ? a : b;
かはメソッドのクライアントにとっては知ったことでは無いからだ。
クライアントが知っているのは、そのオブジェクトが知っているやり方で小さい方の
intを返すだけであって、その実装が内部状態にアクセス云々は知った話では無い。
この例を挙げたのはComparatorの例を示したかったからでもある。
JavaだとComparator#compareはインスタンスメソッドで、それも大抵その実装は
「immutableなメソッドかつ、引数と戻り値が全て」だと思うのだが。
こういうインスタンスメソッドもおかしいのかな?
0387デフォルトの名無しさん
2013/11/10(日) 20:48:40.08減るでしょ。コンパイルできた時点で型の問題はないことが保証される。
テストしなくてもいいレベル。
0388デフォルトの名無しさん
2013/11/10(日) 20:51:03.74テストに動的かどうかなんて関係ないでしょうに
0389デフォルトの名無しさん
2013/11/10(日) 20:53:07.70ある。ありまくり。静的言語ではコンパイラがやってくれる
型チェックの網羅を動的言語では人間がテストコードを書いて
チェックしなきゃいけない。静的言語ではコンパイルできた段階で
テスト終わってる。コンパイラがやってくれる。これこそが生産性。
0390デフォルトの名無しさん
2013/11/10(日) 20:57:36.88まで読んだ
0391デフォルトの名無しさん
2013/11/10(日) 21:01:29.84もしかしたら配列が返ってきてるかもしれないから型チェックも要るんだ!
みたいなこと言いたいんだろうか……(呆)
0392デフォルトの名無しさん
2013/11/10(日) 21:02:34.92静的言語ではコンパイルできた段階で型の問題がないことが『保証される』が
動的言語では人間がテストコードを書いて確認するだけだから型の問題がないと『思う』という
レベルに留まり甚だ信頼性の低いものなのである
0393デフォルトの名無しさん
2013/11/10(日) 21:05:12.67型の問題とやらがないとしても出力値のテストは同じだけ要るやん
0394デフォルトの名無しさん
2013/11/10(日) 21:05:32.20静的言語ではコンパイルが通った段階で型の問題は完全に解決されてる
わけだからあとはざっと眺めてロジックが間違ってないことを確認すれば
テスト終了
動的言語ではいつテストを終えればいいのかもわからない
ほとんどの場合もういいやと開発者が途中で投げ出してテスト完了
どっちがいいかはいうまでもない
0395デフォルトの名無しさん
2013/11/10(日) 21:07:45.520396デフォルトの名無しさん
2013/11/10(日) 21:08:05.05その理屈だと静的にバグは皆無ってことになる
0397デフォルトの名無しさん
2013/11/10(日) 21:08:32.92すべての型の問題は出力値の違いによって検出できるとは『限らない』わけで
これが型の問題がないと『思う』というものの限界
『保証される』こととは天と地の差がある
0398デフォルトの名無しさん
2013/11/10(日) 21:09:49.58この辺が笑いどころですね、分かります。
0399デフォルトの名無しさん
2013/11/10(日) 21:11:13.53同じ時間をかけて作ったならば静的言語の方がバグが少ない
コンパイル段階で型の問題がなくなるから
動的言語では型の問題がなくなったと開発者が思うだけ
この違いわかるかなあ
0400デフォルトの名無しさん
2013/11/10(日) 21:14:03.150401デフォルトの名無しさん
2013/11/10(日) 21:15:43.93> 発想を変えてpublicにするのが妥当な設計に変えればいい
その手のプラクティスで重用されるのがたとえばDIなんだが。
staticネタと関連する点ではたとえばDIではファクトリやロケーター等のstatic
メソッド呼び出しは一般的に排除される傾向がある。
>つまり、あるクラスにprivateなmin関数があるのであれば、
>別のクラスを作って、そこにpublicなmin関数を作り
それは他方で新たな依存性を導入するということでありテスト目的でアドホック
にこんなことをやられては正直たまらん。
> あるクラス・・・で使用するユーティリティを集めたクラスという設計にすれば、
> 自然な形で比較的簡単にpublicに変更できる。
ユーティリティメソッド依存症というのもあってだな、このクラスからだけ使うと
思って切り分けたユーティリティメソッド群をpublicとして実装するも、予期せぬ
クラスからもこれは便利だと参照されるようになった結果元のクライアントクラス
の仕様変更に伴いあるユーティリティメソッドを書き換えようにも他のからも
使われまくりでおいそれと変更できないということがある。
いいとこパッケージプライベートだよ。適切なメソッドの可視性を実現するために
皆気をつかっているのにこの人は書くこと書くことお気楽すぎる。
0402デフォルトの名無しさん
2013/11/10(日) 21:15:56.920403デフォルトの名無しさん
2013/11/10(日) 21:17:46.38いろいろある
オブジェクトが持ってないメソッドを呼び出してたり
メソッド呼び出しの引き数が違ってたり
全然違うオブジェクトを参照してたりする
動的言語ではそれをテストコードを書いてチェックしなければいけない
しかもすべてチェックできたかどうかはわからない
静的言語ではコンパイラがすべて自動的にやってくれる
しかも保証される
0404デフォルトの名無しさん
2013/11/10(日) 21:18:13.90コードの参照の有無。
例えば、動的型付けで
このpublicメソッドにアクセスしているのはどこ?
って質問に、正確に短時間で答えられる?
動的型付け言語でも、時間かければできるさ、
だけど同じ時間で質を上げたほうがいいだろ。
時間が問題だってことにいい加減気づこう
0405デフォルトの名無しさん
2013/11/10(日) 21:19:56.88えとさ、時と場合により
どっちがいいか変わるって
話はやめてくれる?
わかりきってることで、
それ反論になってないから。
時と場合により、俺の言ってることが正しいって
認めてるでしょう?
0406デフォルトの名無しさん
2013/11/10(日) 21:20:58.55静的言語ではコンパイラがほぼすべてのテストを自動的にやってくれるから
あとは開発者がざっとコードを眺めて終わりにできる
動的言語ではすべてのパスを通るテストコードを書かなきゃいけない
しかもすてべのパスを通っているかは開発者がそう思うって程度にしか
わからない
0407デフォルトの名無しさん
2013/11/10(日) 21:21:51.90あとは開発者がざっとコードを眺めて終わりにできる 」
「動的言語ではすべてのパスを通るテストコードを書かなきゃいけない
しかもすてべのパスを通っているかは開発者がそう思うって程度にしか
わからない 」
↑すぐにわかると思いますが、これを言ってる人=こういう勘違いをしている人は
動的型付け言語愛好者ですw
0408デフォルトの名無しさん
2013/11/10(日) 21:22:34.67こんな誰も言ってない言葉が
聞こえるんですよ。
0409デフォルトの名無しさん
2013/11/10(日) 21:22:41.28なるほど
ならテストの増やしようが無いんじゃね?
結局内部のロジックが思ったとおりになってるか分からないのは皆同じなんだし
0410デフォルトの名無しさん
2013/11/10(日) 21:22:52.67意味不明
0411デフォルトの名無しさん
2013/11/10(日) 21:24:26.75なら意味がわかるようにちゃんと言ってあげましょうか?
動的型付け言語愛好者は卑怯だっては話です。
↓こんなことは誰も言ってないのですよ。
「静的言語ではコンパイラがほぼすべてのテストを自動的にやってくれるから
あとは開発者がざっとコードを眺めて終わりにできる 」
だ・け・ど、わざと静的型付け言語を褒めるふりして、
でたらめなことを言ってる。
そういうことです。
0412デフォルトの名無しさん
2013/11/10(日) 21:25:55.25grepで検索して探すしか無いからな。
それで見つかっても、それがたまたま同じ名前なだけで
違うメソッドである可能性があるから、
見つかったメソッドの数だけ、
正しいかを判断していかないといけない。
2、3個ならいいが、大規模になると
手におえないよ。
0413デフォルトの名無しさん
2013/11/10(日) 21:26:37.65酷い妄想ですね
バカなんですか?死ねばいいと思います
0414デフォルトの名無しさん
2013/11/10(日) 21:26:54.05>オブジェクトが持ってないメソッドを呼び出してたり
メソッド名は動的に決まり得る
>メソッド呼び出しの引き数が違ってたり
型関係なし
>全然違うオブジェクトを参照してたりする
目的において違う=型が違う
と思うのはあまりにも浅はかすぎ
0415デフォルトの名無しさん
2013/11/10(日) 21:28:27.23ごめんね、ばらしてw
0416デフォルトの名無しさん
2013/11/10(日) 21:29:08.03決まってからでないとテストが出来ない。
何もかも遅れる。遅い。
0417デフォルトの名無しさん
2013/11/10(日) 21:30:43.36そもそも動的型付言語では型の違いは問題ではない
0418デフォルトの名無しさん
2013/11/10(日) 21:30:50.42>メソッド名は動的に決まり得る
それが間違ってたときのことですよ
>型関係なし
型が関係ある話です
勝手に関係ないとか決め付けないでください
>目的において違う=型が違う
>と思うのはあまりにも浅はかすぎ
ここでの違うは意図しないという意味です
浅はかなのはあなたです
全部頓珍漢ですね
0419デフォルトの名無しさん
2013/11/10(日) 21:30:55.97> >メソッド呼び出しの引き数が違ってたり
> 型関係なし
関係有るぞ?
obj.foo(1, 2, 3)
fooがいくつの引数を持っていることは、
objがどんなクラス(型)か決まってからでないと
判断できない。
こんな基本的なこともわからないから
静的に型が決まることが、意味が無いと言ってるんだろうね。
0420デフォルトの名無しさん
2013/11/10(日) 21:32:09.39テスト時に分かるかどうかの話をしてるのですが
本題をお忘れです?
0421デフォルトの名無しさん
2013/11/10(日) 21:32:21.54引数の数に、型が関係ないと
言ってしまったのは、アウトだなw
言ってしまったからね。
どうするんだろうね?
0422デフォルトの名無しさん
2013/11/10(日) 21:33:18.32型に無自覚であるがゆえに起こる意図しない動作を型の問題と
言っているのですよ
それくらい読み取ってもらわなきゃ
0423デフォルトの名無しさん
2013/11/10(日) 21:34:32.71テスト時にわかるって要するに、
テストする前にわかるのに比べて、
わかるのが遅いって言ってるのと同じなんだけど、
そこんところ理解してる?
テスト時にわかっても遅いんだよ。
そんなちんたらした開発してんな。
0424デフォルトの名無しさん
2013/11/10(日) 21:37:07.680425デフォルトの名無しさん
2013/11/10(日) 21:37:46.01ガッカリです
0426デフォルトの名無しさん
2013/11/10(日) 21:38:47.94> 時と場合により、俺の言ってることが正しいって
> 認めてるでしょう?
知らんがな。とりあえずいいたいのは時と場合によらず下のような短絡的な思考は
トラブルの元だからもっと慎重になれってことだ。
>>290
> まずスコープがprivateである。
> これはユニットテストが出来ないことを意味する。
> ユニットテストをすることを考えると、
> publicにした方がいい。
で、批判したら>>373みたいなフォローがあったけどそれにしても牧歌的すぎるので
追加で>>401として積み重ねただけの話。
staticメソッドの方に関してはもう返答は無いみたいだね。
> 引数と戻り値だけで完結するものは、メソッドではないとも言ってる。
こんな妙な認識、どこから出てきたのだろう。まあ終わったみたいだから良いけど。
0427デフォルトの名無しさん
2013/11/10(日) 21:39:01.790428デフォルトの名無しさん
2013/11/10(日) 21:40:11.940429デフォルトの名無しさん
2013/11/10(日) 21:43:19.37うーむ、自分が使うとすべての言語が動的型になってしまうようだ
0430デフォルトの名無しさん
2013/11/10(日) 21:54:21.14あー何となくわかった感じする
LLでは作りながら細々自然にチェックするんだよね
コンパイルチェックってものもないし、上で挙がってるように
あとからまとめてテストして終わり!って感じなのと相性あまり良くないから
その作りながらのチェックを「テスト」というものにしてしまうと大変かもね
この前話題出たけどコンソール出力、段階置かずにああいうので流れるように
チェックとトライアンドエラー、作成をやっていくのがLLのコツだと思う
確かに結局はコンパイラがやってくれるようなところを自分でやってるのはあるんだろうね
まあでもそれは柔軟さとの引き換えでもあるから、しかたないけど、どうしたらいいのかねえ
そう言えば気づいたことだけどLLの方が1つの関数長く書く気がする
こういうのもチェックしやすい自然の工夫なのかもね
他にも設計の組み立て方とかが結構変わってくると思う
0431デフォルトの名無しさん
2013/11/10(日) 21:57:58.28逆にそういうのが無くても目で見ることによって、ちゃんと動いてるなと考える
これって合ってると思う?
0432デフォルトの名無しさん
2013/11/10(日) 22:04:04.46その場のチェックで済むのは書き捨てだけ。
0433デフォルトの名無しさん
2013/11/10(日) 22:08:01.91それとは別に残さないテストも必要不可欠。
0434デフォルトの名無しさん
2013/11/10(日) 22:33:00.11しっかり考えてから開発したもんだが、
動的型付け言語野郎を見ると
何も考えずに開発してる
時代は変わったなーって思うよw
0435デフォルトの名無しさん
2013/11/10(日) 22:33:55.420436デフォルトの名無しさん
2013/11/10(日) 22:35:19.040437デフォルトの名無しさん
2013/11/10(日) 22:37:59.42その一言で、あ、こいつ技術ないなって
わかっちゃったよ。
0438デフォルトの名無しさん
2013/11/10(日) 22:41:29.52まさか静的型付け言語の方が開発時間が短いって言う訳?
例えばメソッドの参照箇所を検索するのが速いとか、
簡単なミスをその場で気づくことが出来るとか、
確かに、型の問題じゃなくて
開発時間に大きなメリットが有ると思うよ。
でもテスト項目には影響しないだろー?
開発時間が短くなっても
テスト項目に影響しなければ
メリット無いって言ってくれよ!
0439デフォルトの名無しさん
2013/11/10(日) 22:58:18.76簡単なミスを見つけることよりも、
ミスを見つける手間や速さ、
そしてプログラム全体の把握だというと
途端に静になるんだよね。
静的型付けでバグが見つかる。
だからそれはテストなんだって勘違いしている人は
大概これで黙る。
0440デフォルトの名無しさん
2013/11/10(日) 23:00:12.24メインからサブをちょこちょこ呼ぶ形になるからだと思うわ
0441デフォルトの名無しさん
2013/11/10(日) 23:02:58.65静的型前提で書いててもしチェックがなかったらとして比べた場合であって
逆に動的型前提で書くとそもそも静的のようなチェックが入るとエラるんだから
比べるようなもんじゃないのにねえ
いつになったら分かるんだろうか
0442デフォルトの名無しさん
2013/11/10(日) 23:04:20.60もうこれでいいよ
0443デフォルトの名無しさん
2013/11/10(日) 23:05:50.710444デフォルトの名無しさん
2013/11/10(日) 23:08:15.31間違えんなよ
0445デフォルトの名無しさん
2013/11/10(日) 23:09:25.13C++でしょうに
0446デフォルトの名無しさん
2013/11/10(日) 23:23:18.440447デフォルトの名無しさん
2013/11/10(日) 23:52:11.640448デフォルトの名無しさん
2013/11/11(月) 00:09:36.360449デフォルトの名無しさん
2013/11/11(月) 00:34:31.31テストがあればわかるのだから
実行前に一切のチェックは不要。
文法エラーでさえも、テストでわかれば十分だ。
ま、そんなこと言ったなんて嘘だけどさw
でも、テストがあればー、テストさえあればーって
言ってる人はそう思ってなきゃいけないはずなんだよね。
俺はやだね。バグとはいえないような簡単なミスであればあるほど
実行前にすぐに見つけて欲しい。
テストコードにバグですと言われて、どこにバグが有るんだ!?って
探すなんてマヌケはしたくない。
テストコードはバグが有るのはわかっても、バグの場所までは教えてくれないからさ。
0450デフォルトの名無しさん
2013/11/11(月) 00:56:25.820451デフォルトの名無しさん
2013/11/11(月) 00:59:12.40プログラミング始めて何ヶ月か分からんがオレすげーは早めに卒業しとけよ
0452デフォルトの名無しさん
2013/11/11(月) 01:22:28.050453デフォルトの名無しさん
2013/11/11(月) 01:38:48.85デバッガを使っているのは初心者。
0454デフォルトの名無しさん
2013/11/11(月) 01:39:26.300455デフォルトの名無しさん
2013/11/11(月) 01:40:14.95デバッガ → 見つけたバグを修正するもの
役目がぜんぜん違う。
0456デフォルトの名無しさん
2013/11/11(月) 01:42:18.52本当に触ったぐらいでしかないんだろうな。
変数宣言云々とか規約や運用の問題とか言うけど
それを管理(レビュー)するコストだって掛るだろうに。
入力フォームなどで入力する際に入力時にエラーを返してくれる画面と
サブミットしないと返してくれない画面があったらどっちが
利用者にとって楽かって問題と一緒でしょ
0457デフォルトの名無しさん
2013/11/11(月) 01:50:09.670458デフォルトの名無しさん
2013/11/11(月) 01:51:38.51客がかわいそう
金返してやれよ
0459デフォルトの名無しさん
2013/11/11(月) 01:54:14.390460デフォルトの名無しさん
2013/11/11(月) 01:54:18.060461デフォルトの名無しさん
2013/11/11(月) 01:55:56.720462デフォルトの名無しさん
2013/11/11(月) 01:57:48.19プロ失格だと思います。
お金をもらうことの重みをかみしめてほしいです。
0463デフォルトの名無しさん
2013/11/11(月) 02:02:22.36テスト→バグがないことを保証する
どちらがお客様のためになるか一目瞭然
0464デフォルトの名無しさん
2013/11/11(月) 02:07:53.540465デフォルトの名無しさん
2013/11/11(月) 02:11:52.83使うなら別のとこに発注したほうがいい
0466デフォルトの名無しさん
2013/11/11(月) 02:18:43.360467デフォルトの名無しさん
2013/11/11(月) 02:20:28.320468デフォルトの名無しさん
2013/11/11(月) 02:43:14.33まずデバッガを完全に撤廃し、テストを完全に行う。
これが大事。
0469デフォルトの名無しさん
2013/11/11(月) 02:50:01.290470デフォルトの名無しさん
2013/11/11(月) 03:04:15.24どういう根拠で静的型と変わらないと言ってるの?
0471デフォルトの名無しさん
2013/11/11(月) 03:31:45.350472デフォルトの名無しさん
2013/11/11(月) 03:35:17.960473デフォルトの名無しさん
2013/11/11(月) 04:23:00.050474デフォルトの名無しさん
2013/11/11(月) 05:03:18.67でも開発機にOSXやUbuntu使っているのもよく見るようになったなぁ。
Cygwin使うとしてもデプロイターゲットがLinux等のUnix系だとWindowsは無駄に不便だし。
0475デフォルトの名無しさん
2013/11/11(月) 08:03:48.77バグフリーに出来るのは競争力皆無のおもちゃを作るときだけ
0476デフォルトの名無しさん
2013/11/11(月) 08:51:16.28一度作ったらあとは極力知らんぷりよりマシ
0477デフォルトの名無しさん
2013/11/11(月) 21:49:03.13すぐに更新できるから動的言語に向いている
0478デフォルトの名無しさん
2013/11/11(月) 21:59:41.66「Web環境下での」開発効率の面では動的言語が優秀だろうが
0479デフォルトの名無しさん
2013/11/11(月) 22:06:56.26違う違う。バグがあってもすぐに直せるから
そこまでテストに時間かけなくていいってこと。
0480デフォルトの名無しさん
2013/11/11(月) 22:09:24.13それはWebアプリの性質であって
直接言語とは関係しないだろうに
0481デフォルトの名無しさん
2013/11/11(月) 22:18:29.38それは分かってるが
それはWebアプリの性質であって
直接言語とは関係しないだろうに
0482デフォルトの名無しさん
2013/11/11(月) 22:22:28.03いや関係有るよ。
動的言語の場合、エラーがあっても
実行していなければ、エラーにならない。
ファイルを更新するときは、
実は削除されて再作成されるわけだけど、
短い時間とはいえ、ファイルが削除されたタイミングに
アクセスされるとエラーになる。
でも、多少エラーになってもいいじゃんって
適当にファイル更新するでしょ?
こういう風に適当に手抜きできるのが動的言語
だからエラーは多いが、エラーに成った時になおせばいいんだよ。そんなの。
0483デフォルトの名無しさん
2013/11/11(月) 22:26:47.380484デフォルトの名無しさん
2013/11/11(月) 22:33:28.79横レスだけど、関係あると思うよ
そのWebサービスをユーザに近いフロントエンドと
情報資源に近いバックエンドの2つに分けて考えてみる
まずフロントエンド側はユーザと直接的に接するから、
仕様の改善や変更の要求が頻繁に起きやすい
逆にバックエンドはビジネスルールをモデル化したものだから、
その仕様は比較的に安定している
これらの背景を前提にすれば、フロントエンド側の開発には、
簡潔な記述で素早く開発ができる、すなわち開発効率が良い
動的型付け言語が適している
それに対してバックエンド側の開発には、コード品質が高く
実行効率(性能)の良い静的型付け言語が適している
.....のではないかと
0485デフォルトの名無しさん
2013/11/11(月) 22:47:49.22デプロイの遅さだけはどうにもならんけれどもな!
0486デフォルトの名無しさん
2013/11/11(月) 23:03:04.550487デフォルトの名無しさん
2013/11/12(火) 00:17:51.50> 関数のオーバーロードが不要になる
>
> sub sum {
> my $value = shift;
>
> if ($valueがA型なら) {
>
> }
> elsif ($valueがB型なら) {
>
> }
> }
ネタサイトからの引用で申し訳ないが
動的厨はこういう記述に疑問を感じないの?
オーバーロードしなくていい!とか思っちゃうの?
0488デフォルトの名無しさん
2013/11/12(火) 00:44:03.69柔軟だぞ。
引数の数が変わった時とか、
引数をずらすことで
第一引数を省略できたりする。
0489デフォルトの名無しさん
2013/11/12(火) 00:58:05.85def sum(value):
# ... code for A
@multimethod(B)
def sum(value):
# ... code for B
0490デフォルトの名無しさん
2013/11/12(火) 01:02:49.15Cという型が来た場合はどうなるの?
0491デフォルトの名無しさん
2013/11/12(火) 01:06:44.95手続き型では、そういった「魔術的」なコードになる
これがオブジェクト指向だと、
・データ型はオブジェクトのクラスである
・オブジェクトに対する操作は(手続き/関数/演算子ではなく)
メッセージ(もしくはメソッド)という識別子(セレクタ)である
から、以下のように自然なコードが書ける
class A
def sum(other_value); ....; end
end
class B
def sum(other_value); ....; end
end
つまり、メッセージ sum(x) をオブジェクトAが受信したのか、
それともオブジェクトBが受信したのかという違いでしかない
(>>316も参照の事)
0492デフォルトの名無しさん
2013/11/12(火) 01:10:29.65オーバーロードも知らない人は
でてこないでくれる?
0493デフォルトの名無しさん
2013/11/12(火) 01:17:27.11sum(Integer, Integer) -> Integer
sum(Float, Float) -> Float
sum(Float, Integer) -> Float
sum(Integer, Float) -> Float
sum(Float, Cat) -> TypeError
sum(Drink, IceCream) -> Float
的なのはどう表現するの?
0494デフォルトの名無しさん
2013/11/12(火) 01:20:14.53それだけだとオーバーロードが要らない例にならないのでは?
その例だとother_valueはclass Aしか想定してないでしょ?
0495デフォルトの名無しさん
2013/11/12(火) 01:21:11.50def sum(value):
# ... code for A
@multimethod(B)
def sum(value):
# ... code for B
これを改良するとこうなる
def sum(A value):
# ... code for A
def sum(B value):
# ... code for B
0496デフォルトの名無しさん
2013/11/12(火) 01:24:48.16やっぱり、変数に型があったほうがいいと思う。
たとえ、実行時に動的にその型を解釈するとしても
変数に型があったほうがいいと思う。
0497デフォルトの名無しさん
2013/11/12(火) 01:29:18.46class Integer
def sum(y); self + y.to_i; end
def to_i; self; end
def to_f; Convert.integer_to_float(self); end
end
class Float
class sum(y); self + y.to_f; end
def to_i; Convert.float_to_integer(self); end
def to_f; self; end
end
aFloat.sum aCat # ==> モジュール Convert でTypeErrorを検出
aDrink.sum aIceCream # ==> クラス Drink におけるsumの定義に従う
0498デフォルトの名無しさん
2013/11/12(火) 01:30:26.11お前、間違ってるぞw
0499デフォルトの名無しさん
2013/11/12(火) 01:31:16.44ここは2chだから、誰にも自由に発言できる権利がある
0500デフォルトの名無しさん
2013/11/12(火) 01:31:51.03発言して恥をかく権利ですか?w
0501デフォルトの名無しさん
2013/11/12(火) 01:34:50.33自己紹介乙w
0502デフォルトの名無しさん
2013/11/12(火) 01:35:29.180503デフォルトの名無しさん
2013/11/12(火) 01:37:08.400504デフォルトの名無しさん
2013/11/12(火) 01:50:36.87動的型付けでも普通にそれぞれの型のメソッドを呼べばいいだけの話なんだが
動的に型を判断したらそりゃ多重ディスパッチになるよ
0505デフォルトの名無しさん
2013/11/12(火) 01:56:44.67mazeruとかsizumeruとかgetMawariNoShariShariShitaTokoroメソッドを定義した
Floatインターフェイスをmix-inして欲しいのだが。
>>497の方法だと何をsumしてもIntegerはIntegerだしFloatはFloatだし同じ方法
だとDrinkだっていつまでたってもDrinkだと思う。
0506デフォルトの名無しさん
2013/11/12(火) 02:24:23.03動的っていうのは、引数によって同じメソッドに別名を与えないといけないのか。
それは不便。
0507デフォルトの名無しさん
2013/11/12(火) 02:25:00.84気がするね。
0508デフォルトの名無しさん
2013/11/12(火) 02:43:49.750509デフォルトの名無しさん
2013/11/12(火) 02:48:59.64高橋真奈著やさしいOCamlが出たらやってみるよ。
0510デフォルトの名無しさん
2013/11/12(火) 05:48:26.90んなわきゃないw
0511デフォルトの名無しさん
2013/11/12(火) 07:40:38.15Python3なら、こういうのも可
with multimethod:
def sum(value : A):
# ... code for A
def sum(value : B):
# ... code for B
0512デフォルトの名無しさん
2013/11/12(火) 08:02:57.99そんなのを使うことになるときは設計を疑った方がいい
0513デフォルトの名無しさん
2013/11/12(火) 08:19:10.91// Code for A
...
}
def sum(B b){
// Code for B
...
}
A v1 = new A()
sum(v1) // 単一ディスパッチ
def v2 = new B()
sum(v2) // 多重ディスパッチ
0514デフォルトの名無しさん
2013/11/12(火) 09:37:28.17v2.sum
じゃいやなの?
0515デフォルトの名無しさん
2013/11/12(火) 15:47:48.60def op(A a2, A a2){
// Code for op(A,A)
...
}
def op(A a, B b){
// Code for op(A, B)
...
}
...
C = new C()
A a = ...
B b = ...
c.op(a, b) // 単一ディスパッチ
def v1 = ...
def v2 = ...
c.op(v1, v2) //多重ディスパッチ
0516デフォルトの名無しさん
2013/11/12(火) 15:52:10.060517デフォルトの名無しさん
2013/11/12(火) 17:10:23.08これって例えば後からよりルートに近いクラスで
メソッド定義かぶるように追加した場合の挙動とかってどうなるの?
0518デフォルトの名無しさん
2013/11/12(火) 17:19:27.34単に一引数の多重ディスパッチがオブジェクトの引数なしメソッドの呼び出しに
置き換えられるというだけであって、引数が増えると結局一緒。
0519デフォルトの名無しさん
2013/11/12(火) 18:34:55.62>>517
0520デフォルトの名無しさん
2013/11/12(火) 19:11:41.78何の言語か知らんけど型推論してるだけのように見えるんだが
0521デフォルトの名無しさん
2013/11/12(火) 19:32:04.47そうじゃないのならただのオーバーライドだもんげ
0522デフォルトの名無しさん
2013/11/12(火) 19:46:55.76int length = o.getLength() のがどう考えても分かりやすい。
だが var = "文字列です。" だと別に可読性は落ちない。
型推論は便利だがコーディングルールが必要だ
0523デフォルトの名無しさん
2013/11/12(火) 19:51:55.90Groovy。基本的に型無し(def)は実行時に型判定して動的ディスパッチする。
と、ここまで書いて型指定したときには効率良く単一ディスパッチしてくれたかイマイチ
思い出せないことに気がついたw
0524デフォルトの名無しさん
2013/11/12(火) 19:52:28.000525デフォルトの名無しさん
2013/11/12(火) 20:21:58.90http://ideone.com/Vau4dl
今試してみたんだけど↑の結果って型指定しても動的にディスパッチしてるっぽくない?
Groovy初めてだからやり方あってるか知らんけど
0526デフォルトの名無しさん
2013/11/12(火) 21:33:27.06しまった〜、やぱりそうか常に動的ディスパッチか。
0527デフォルトの名無しさん
2013/11/13(水) 19:29:50.43http://ideone.com/DieNkp
http://ideone.com/74jNvk
http://ideone.com/jP5xOy
0528デフォルトの名無しさん
2013/11/13(水) 20:28:23.42今更ながらそのあたりの詳細に気がつかされる程度にはあんまり意識して動的ディスパッチを
活用していない事を実感した。
0529デフォルトの名無しさん
2013/11/13(水) 20:59:26.31じゃあ型に合わせた関数を呼ぶにはどうしたらいいの?
型ごとに別の名前を割り当てるの?
0530デフォルトの名無しさん
2013/11/13(水) 21:03:53.810531デフォルトの名無しさん
2013/11/13(水) 21:58:50.420532デフォルトの名無しさん
2013/11/14(木) 01:06:57.10getDateById()
getDateByIdAndName()
getDateByIdAndNameAndStatus()
とか、これをそれぞれgetUnixTimeByXX()みたいなのも追加しようと思うとさらに増えていく
0533デフォルトの名無しさん
2013/11/14(木) 01:27:29.24その辺はメソッドミッシングとかで対応すべき事かな。
0534デフォルトの名無しさん
2013/11/14(木) 02:52:21.37あほかw そんな名前にするからいかんのだろ。
メソッドは一つgetData()、引数に条件を入れればいいじゃないか。
条件をオブジェクトにした、条件オブジェクトでもいいし、
SQLのような簡単な条件文字列を作ってもいい。
条件オブジェクトと条件文字列の両方に対応するなら
オーバーロードを使えるな。
型と条件をごっちゃにしてはだめだ。
0535デフォルトの名無しさん
2013/11/14(木) 03:40:28.77IDEのインテリセンスが効かなくなる
メソッドオーバーロードがない言語はこういう問題をスマートに解決することが出来ない
0536デフォルトの名無しさん
2013/11/14(木) 08:02:29.14getDate(id=x)
getDate(id=x, name=y)
getDate(id=x, name=y, status=z)
必要なのはキーワード引数とデフォルト引数
0537デフォルトの名無しさん
2013/11/14(木) 09:52:09.540538デフォルトの名無しさん
2013/11/14(木) 09:53:05.57そういう発想が出てこないんだよね
Jから始まる言語とか
0539デフォルトの名無しさん
2013/11/14(木) 10:53:57.500540デフォルトの名無しさん
2013/11/14(木) 11:18:57.43ただしハッシュリテラルがあれば話は別
0541デフォルトの名無しさん
2013/11/14(木) 11:51:03.63これだと
id=x, name=y, status=z
getDate(id, name, status)
なのと紛らわしい
せめて
getDate(id=>x / name=>y / status=>z)
みたいな方がいいのではないか
0542デフォルトの名無しさん
2013/11/14(木) 11:58:15.81C#は名前つき引数もあるしメソッドオーバーロードもあるけど、引数を連想配列で指定すると補完が効かなくなる
シグネチャだけで機能を判断出来るメソッドオーバーロードに比べて劣ってる
0543デフォルトの名無しさん
2013/11/14(木) 12:02:42.940544デフォルトの名無しさん
2013/11/14(木) 12:08:06.44x getDateByName: y status: z.
または
x.getDate name: y, status: z
がリーダブルだと思う
0545デフォルトの名無しさん
2013/11/14(木) 12:12:55.23まともにリリースされることなく終わりそうだけど
0546デフォルトの名無しさん
2013/11/14(木) 12:18:20.14コロンは一瞬思ったけど型指定と紛らわしくね
それならいっそハッシュリテラル使うのがいいと思うけど
0547デフォルトの名無しさん
2013/11/14(木) 12:32:46.09add = ({x, y}) => x + y
num1 = 10, num2 = 20
add({x: num1, y: num2}) //30
0548デフォルトの名無しさん
2013/11/14(木) 13:56:54.310549デフォルトの名無しさん
2013/11/14(木) 14:10:25.160550デフォルトの名無しさん
2013/11/14(木) 14:12:22.410551デフォルトの名無しさん
2013/11/14(木) 14:55:19.83コンピュートキーじゃない場合は
0552デフォルトの名無しさん
2013/11/14(木) 15:08:43.27静的言語だけの用語かなぁ
0553デフォルトの名無しさん
2013/11/14(木) 15:15:20.67内容については大方適応できるでしょう
0554デフォルトの名無しさん
2013/11/14(木) 15:28:22.78そういうのは引数をハッシュにするとメソッドの中で例外処理書くしかない
0555デフォルトの名無しさん
2013/11/14(木) 15:30:28.14メソッドオーバーロードにしても名前つき引数にしても、ないとプログラムが書けないわけではないが、あれば便利に使える
0556デフォルトの名無しさん
2013/11/14(木) 16:06:46.54ラップするので十分いいし分かりやすいよ
例えばこんな感じで
function nextDate(x) {
switch (x.constructor) {
case Date: return NextDate(x)
case Number: return NextDate(new Date(x)).getTime()
case String: return NextDate(new Date(x)).toString()
default: throw "type err"
}
function NextDate(date) {......return date2}
}
オーバーライド等が活きるときはもっと異なる処理をさせたいときdと思う
0557デフォルトの名無しさん
2013/11/14(木) 16:10:26.782つめはGroovyは出来るな。書いてあるとおりカッコも省略できる。
x.getDate([name:y, status:z])という形で名前付き引数では無くMap渡しになるけど。
class X{ def getDate(args){print args}}
def x = new X(), y = "sampleName", z = "sampleDate"
x.getDate name: y, status: z
-> [name:sampleName, status:sampleDate]
0558デフォルトの名無しさん
2013/11/14(木) 16:51:59.66function nextDate(x) {
switch (x.constructor) {
case Date: return NextDate(x)
case Number: return NextDate(x).getTime()
case String: return NextDate(x).toString()
default: throw "type err"
}
function NextDate(x) {
var date = new Date(x)
date.setDate(date.getDate() + 1)
return date
}
}
0559デフォルトの名無しさん
2013/11/14(木) 16:53:27.70function nextDate(d:Date) {
return $NextDate(d)
}
function nextDate(n:Number) {
return $NextDate(n).getTime()
}
function nextDate(s:String) {
return $NextDate(s).toString()
}
function $NextDate(x:Any) {
var date = new Date(x)
date.setDate(date.getDate() + 1)
return date
}
0560デフォルトの名無しさん
2013/11/14(木) 17:05:13.000561デフォルトの名無しさん
2013/11/14(木) 17:34:17.600562デフォルトの名無しさん
2013/11/14(木) 17:42:43.21それも明確に意味が違うのに
0563デフォルトの名無しさん
2013/11/14(木) 18:49:36.480564デフォルトの名無しさん
2013/11/14(木) 19:01:23.58戻り値の型でオーバーロード出来るのは静的型だけだな
0565デフォルトの名無しさん
2013/11/14(木) 19:05:31.69オーバーライドと言えば、継承などで上書きできる。
みたいな感じじゃないの?知らんけど。
0566デフォルトの名無しさん
2013/11/14(木) 19:11:06.65引数を調べてifで処理を別けないといけない、もしくは別のメソッドを作るか
どっちにしてもダサい
返り値の型で処理を変えるのはPerl5なら不完全だけど出来る
今wantarrayを積極的に使ってる人は少ない印象だけど
0567デフォルトの名無しさん
2013/11/14(木) 19:20:32.48>>559だと$NextDateの頭に$がついてるのもそういう理由だろうけどスコープの手間が掛かるし
0568デフォルトの名無しさん
2013/11/14(木) 19:22:09.03マルチメソッドが無いゴミ言語の話?
0569デフォルトの名無しさん
2013/11/14(木) 19:23:53.45実装量が減るわけでも無いのに
0570デフォルトの名無しさん
2013/11/14(木) 19:27:00.90ifのネストおばけみたいなプログラムをよくみかけるが、
そういう繁雑さから完全開放された経験がない人にはわからない境地。
0571デフォルトの名無しさん
2013/11/14(木) 19:29:47.74なんで?
自分で調べるの?
0572デフォルトの名無しさん
2013/11/14(木) 19:32:46.82文字列 + 文字列
整数 + 整数
整数 + 文字列
文字列 + MyClass
こういうのとかどうするの?
0573デフォルトの名無しさん
2013/11/14(木) 19:39:03.36JSみたいな糞言語じゃ無理だけど
0574デフォルトの名無しさん
2013/11/14(木) 19:39:44.640575デフォルトの名無しさん
2013/11/14(木) 19:58:09.81SmalltalkやRubyとかだと
オーバーロードは無いけどオーバーライドする事で同じ型の演算は普通に出来る
単一のメソッドで複数の型を扱う場合はメソッド内で分岐させるか別名を付ける必要がある
ていうか整数+文字列って酷いな
0576デフォルトの名無しさん
2013/11/14(木) 20:02:40.49ベクトル + 数値リテラルとかは出来ると便利よね
0577デフォルトの名無しさん
2013/11/14(木) 20:05:54.39あらゆる記号がオーバーロード出来ないといけない
0578デフォルトの名無しさん
2013/11/14(木) 20:07:48.10整数+文字列は醜い
まあ、デフォルトでこうなってるゴミ言語も存在するが
0579デフォルトの名無しさん
2013/11/14(木) 20:08:17.67ハッシュでパラメーター全部引き取って中で条件分岐させる巨大なメソッド作るぐらいなら、必要なパラメーターだけ引き取る小さなメソッドを複数作った方がマシ
0580デフォルトの名無しさん
2013/11/14(木) 20:11:34.260581デフォルトの名無しさん
2013/11/14(木) 20:55:48.160582デフォルトの名無しさん
2013/11/14(木) 21:01:48.58なんか話がずれてるけど、
検索の条件は一つのオブジェクトとして渡すべきだよ。
そうすれば、条件オブジェクトからSQLのWHERE区に変換するという
メソッドを作るだろうし、そのテストも簡単になる。
これをキーワード引数にしてバラバラに渡すのはセンスが悪すぎる。
いくつ引数作らないといけないのさ?
0583デフォルトの名無しさん
2013/11/14(木) 21:18:13.47> 整数+文字列って酷いな
すまん…^^; Squeak Smalltalk だと
3 + '4' "=> 7 "
ちなみに元祖wダブルディスパッチで実現されている。
SmallInteger >> + aNumber
<primitive: 1> "失敗すると次行を実行"
^ super + aNumber
Integer >> + aNumber
aNumber isInteger ifTrue:
[self negative == aNumber negative
ifTrue: [^ (self digitAdd: aNumber) normalize]
ifFalse: [^ self digitSubtract: aNumber]].
^ aNumber adaptToInteger: self andSend: #+
Object >> adaptToInteger: rcvr andSend: selector
^ self adaptToNumber: rcvr andSend: selector
String >> adaptToNumber: rcvr andSend: selector
^ rcvr perform: selector with: self asNumber
0584デフォルトの名無しさん
2013/11/14(木) 21:44:33.170585デフォルトの名無しさん
2013/11/14(木) 21:56:39.38それは言語として落第なのであって動的静的は関係ないw
まぁ実際もっと起動が速くなってほしい。
ワンライナーとしてサクサク使えない言語はどうしても普段使いの道具箱から外れてしまう。
0586デフォルトの名無しさん
2013/11/14(木) 23:14:35.93可変長キーワード引数というのもあってだな
0587デフォルトの名無しさん
2013/11/14(木) 23:15:44.27そういう問題じゃないから
0588デフォルトの名無しさん
2013/11/15(金) 01:47:44.53ホント無知だな
0589デフォルトの名無しさん
2013/11/15(金) 01:48:51.72思考できないってのが良く分かるな
0590デフォルトの名無しさん
2013/11/15(金) 02:02:21.370591デフォルトの名無しさん
2013/11/15(金) 07:34:01.06順序性ないし重複も許されないけどな
0592デフォルトの名無しさん
2013/11/15(金) 10:42:16.560593デフォルトの名無しさん
2013/11/15(金) 12:39:12.46Gradleとか常駐オプション(--daemon)標準装備してるから
スタンドアローンでつかうならそういうのが常套なんかも。
0594デフォルトの名無しさん
2013/11/15(金) 15:35:34.34Gradleはインクリメンタルビルド前提だから常套以前の問題だな
0595デフォルトの名無しさん
2013/11/15(金) 17:43:38.480596デフォルトの名無しさん
2013/11/15(金) 18:40:59.140597デフォルトの名無しさん
2013/11/15(金) 18:46:10.740598デフォルトの名無しさん
2013/11/15(金) 22:51:01.49Pythonの def func(*args, **keywords) は意外と理にかなってるのか
0599デフォルトの名無しさん
2013/11/16(土) 08:18:04.52分割代入ですよってする方が美しくなかろうか
0600デフォルトの名無しさん
2013/11/16(土) 08:32:15.32要するにJavaScriptのやり方が美しいのです最高なのです他の方法は変なのです
0601デフォルトの名無しさん
2013/11/16(土) 09:44:57.81自前で書く必要があるの?
0602デフォルトの名無しさん
2013/11/16(土) 09:52:07.71その為にPerlではHash::Utilが
標準モジュールとして提供されてるんだよ。
Hash::Utilでロックしておけば、キーの追加をしたり、
本来あるべきキーがなければ参照した時にエラーになる。
多分他の言語にも似たようなモジュールあるでしょ?
Perlなめるな。
0603デフォルトの名無しさん
2013/11/16(土) 10:11:44.62あーウンコすぎて目眩がする
0604デフォルトの名無しさん
2013/11/16(土) 10:25:51.16え? 手間変わらないだろ。
引数を書くのも、キーを羅列するのも。
あえて言うのなら、lock_keysという関数の分のタイプ量だけだ。
わずか10文字程度にお前なに時間かけてるんだよw
0605デフォルトの名無しさん
2013/11/16(土) 10:52:29.37キーワード間違ったらエラーになるようにPerlで書くとどうなるの?
0606デフォルトの名無しさん
2013/11/16(土) 11:13:19.050607デフォルトの名無しさん
2013/11/16(土) 11:14:44.32違うこと=間違いと思うのは脳みそ固いね、静的脳だわ
0608デフォルトの名無しさん
2013/11/16(土) 11:18:12.71デフォルト引数も指定してたら
間違った事に気がつかないでしょ
0609デフォルトの名無しさん
2013/11/16(土) 11:32:17.160610デフォルトの名無しさん
2013/11/16(土) 11:42:23.68例えばa=0を期待しててbってのが来た時にどうするか
オブジェクトだと難しいよね
そもそもそれをエラーにしたいって考えが良くない気もするけど
0611デフォルトの名無しさん
2013/11/16(土) 11:43:09.200612デフォルトの名無しさん
2013/11/16(土) 12:03:22.29sub add {
my %params = @_;
lock_keys(%params, qw(x y z));
}
add(a => 1, x => 1);
実行結果
Hash has key 'a' which is not in the new key set at a.pl line 6.
デフォルト値あり
sub add {
my %params = (x => 0, y => 0, z => 0);
lock_keys_plus(%params);
%params = (%params, @_);
warn Dumper(\%params);
}
add(x => 1);
実行結果
$VAR1 = {
'z' => 0,
'y' => 0,
'x' => 1
};
0613デフォルトの名無しさん
2013/11/16(土) 12:14:13.97そもそもPerlに可読性を求めるのが間違いとも言える
0614デフォルトの名無しさん
2013/11/16(土) 12:23:00.80自分でヘルパー関数作れば?
用意されなきゃ何も出来ない、脳無しなの?
0615デフォルトの名無しさん
2013/11/16(土) 12:24:38.160616デフォルトの名無しさん
2013/11/16(土) 12:25:54.73最初緩くて気軽で良くて
厳密さを取りたい時にはちょいと自作すればいいよね
まあその程度の問題で別にどうというほどのことでもないね
この話は終了
0617デフォルトの名無しさん
2013/11/16(土) 12:27:53.850618デフォルトの名無しさん
2013/11/16(土) 12:28:02.61上がるかどうかではなく、自分の力で上げるんだよ。
それが出来ない奴が、本当の脳無し。
sub add {
my $params = params({x => 0, y => 0, z => 0}, @_);
warn Dumper($params);
}
add(x => 1);
# こんくらい自分でモジュール作れ
sub params {
my $def = shift;
lock_keys_plus(%$def);
%$def = (%$def, @_);
return $def;
}
0619デフォルトの名無しさん
2013/11/16(土) 12:30:07.220620デフォルトの名無しさん
2013/11/16(土) 12:31:19.850621デフォルトの名無しさん
2013/11/16(土) 12:31:47.200622デフォルトの名無しさん
2013/11/16(土) 12:32:20.04my $params = params([x => 0, y => 0, z => 0], @_);
warn Dumper($params);
}
add(1, 2, 3);
自分の力でやってみな?
0623デフォルトの名無しさん
2013/11/16(土) 12:32:53.850624デフォルトの名無しさん
2013/11/16(土) 12:34:32.16あとはparamsの第一引数をみて
その順番通りにハッシュを作るって
値を入れるだけだ。
0625デフォルトの名無しさん
2013/11/16(土) 12:38:33.14そんなの自作ライブラリでやってるの?w
0626デフォルトの名無しさん
2013/11/16(土) 12:43:03.340627デフォルトの名無しさん
2013/11/16(土) 12:47:28.28自慢気に話してるが、それって
自作関数を作るわずか数分の差しかないってことだよね?
ほらできた。
sub params {
my $kvlist = shift;
my $def = {};
$def->{$_->[0]} = shift // $_->[1] foreach( pairs @$kvlist);
lock_keys_plus(%$def);
return $def;
}
第一引数の型を見て処理を変えればいいだけだから
>>618を混在も可能
0628デフォルトの名無しさん
2013/11/16(土) 12:49:42.10こんな引数になるだろうね。
add(1, 2, {x => 3, y => 4})
0629デフォルトの名無しさん
2013/11/16(土) 12:53:01.89第三者にとっての可読性は悪くなるよ、これはマジで
書いた本人は良いだろうけど
Perlのコードなんて、どうせ書いたヤツ以外読めないから良いのか
0630デフォルトの名無しさん
2013/11/16(土) 12:55:15.47時間がかかる人なのねw
仕事では他人が書いた、もっと長くてドキュメントもないような
糞コードだって理解しなくちゃならないんだよ。
基礎能力が圧倒的に違いすぎる。
0631デフォルトの名無しさん
2013/11/16(土) 12:57:00.75ごめん、思い付きで質問したけど、
この場合xに1が入るべきか3が入るべきか微妙だね
0632デフォルトの名無しさん
2013/11/16(土) 12:57:24.38まあ誰か勝手にパクってやってくれ。
と俺が言っても俺が書いたって証拠もないけどなw
0633デフォルトの名無しさん
2013/11/16(土) 12:58:05.37ただでさえゴミの山なんだから
0634デフォルトの名無しさん
2013/11/16(土) 12:58:47.95> この場合xに1が入るべきか3が入るべきか微妙だね
そんなもん、仕様で決めればいいことだよ。
後に書いたのが有効になるでも
前に書いたのが有効になるでも
エラーになるでも、一番いい方法を考えて決めればいい。
0635デフォルトの名無しさん
2013/11/16(土) 12:59:59.85それぞれ自作ライブラリ毎で仕様が違うんですよね?
で、違うライブラリの関数呼び出すときは毎回仕様をチェックするんですよね?
0636デフォルトの名無しさん
2013/11/16(土) 13:03:04.60それ他の言語でも同じですわwww
PerlもRubyもJS(node)もPHPもPythonも
だれでもアップロードできるパッケージシステム
なんてのがあると、結局質が良かったり
悪かったり、更新が遅かったりするようのが
大量にできるよね。
だからなかなか使う気が起きない。
こういうところはApacheとかGoogleとかの大きな団体が
大きなライブラリとして作ったものが安心できるね。
0637デフォルトの名無しさん
2013/11/16(土) 13:07:05.79それがエディタのツールチップに表示される言語もあるのにね……
0638デフォルトの名無しさん
2013/11/16(土) 13:10:39.59お前バカなの? プロジェクトで使う
共通のライブラリとして
定めて使うに決まってるじゃん。
そもそも"自作"ライブラリであるなら仕様は自作した一つだし、
なんで俺が自作したものがあるのに
他人が作ったものを使わないといかんの?
逆に既に他人が使うものがあるならそれを使えばいいし、
なんで同じことをする微妙に仕様が違う関数を
複数使わないといけないんだだよw
お前の開発スタイルが透けて見えるわ。
関数をコピペしてちょっと改造して使うってやり方してるだろ?
そんなんだから、同じような処理なのに微妙に違うものが
たくさん出来てしまうんだよ。
0639デフォルトの名無しさん
2013/11/16(土) 13:11:21.33凄いよね。それはたった数分のメリットだ。
0641デフォルトの名無しさん
2013/11/16(土) 13:13:04.050642デフォルトの名無しさん
2013/11/16(土) 13:14:33.370643デフォルトの名無しさん
2013/11/16(土) 13:15:51.82お前が全く分かってない事が分かった
他人が作ったライブラリの中では、そいつ独自の引数チェック関数を使ってて、
それは仕様が微妙に違うって話だろ
だったら違うライブラリを使う度に、引数渡しのルールなんて基本的なものの
仕様を確認する必要があるじゃん
0644デフォルトの名無しさん
2013/11/16(土) 13:21:34.58お前は何を対象にしてるんだ?
チームで同じプロダクトを開発してるなら、
そのチームのルールに合わせればいいだけだろ。
微妙に仕様が違うなら、それはそれを書いた人の問題。
全くの他人であれば、プロダクトも全く他人のものだろ?
それはそいつのルールに合わせればいいだけの話。
同じプロダクトで仕様が異なれば混乱もするだろうが、
他人のプロダクトなら、そのプロダクトのやり方に従えばいいし、
そのプロダクトで仕様は同じだろ。混乱するわけがない。
もしかして他人のコードよんだことないの?
オープンソースのコード見て、俺が作ったものじゃないから
この関数の使い方わかんないって泣くの?
0645デフォルトの名無しさん
2013/11/16(土) 13:23:45.99ライブラリ毎に違うんじゃ効率悪いわ
0646デフォルトの名無しさん
2013/11/16(土) 13:24:37.63大きな差があるんだなって思うよ。
もっと他人が書いたコードを読め。
これプログラマの能力の一つなんだよね。
出来る人は知らない言語や関数であったとしても
表面から意図と意味を読み取れるでしょ?
0647デフォルトの名無しさん
2013/11/16(土) 13:27:23.84ライブラリ毎に違う仕様を把握するなんて面倒な事は
避けられるなら避けるよ
で、これは避けられる類の問題
0648デフォルトの名無しさん
2013/11/16(土) 13:39:36.56プログラマの美徳の怠慢ってそういう意味じゃねーぞw
全体の労力を減らすために手間を惜しまないって意味だぞ
自分の力で手間を解決できないのは、無能な意味の怠慢
0649デフォルトの名無しさん
2013/11/16(土) 13:39:38.520650デフォルトの名無しさん
2013/11/16(土) 13:40:43.17↓
よし自分で関数作って楽にするか
↓
これが「優秀なプログラマの怠慢」
0651デフォルトの名無しさん
2013/11/16(土) 13:41:35.270652デフォルトの名無しさん
2013/11/16(土) 13:42:34.45意味のない答えだ。
0653デフォルトの名無しさん
2013/11/16(土) 13:43:06.81劣ってるでしょ
0654デフォルトの名無しさん
2013/11/16(土) 13:43:50.450655デフォルトの名無しさん
2013/11/16(土) 13:44:50.28こんなのが標準で言語に入ってるから凄いんだ。
それを使ってる俺も凄いんだ。って言ってるにすぎないな。
0656デフォルトの名無しさん
2013/11/16(土) 13:44:55.58劣った言語ユーザって
0657デフォルトの名無しさん
2013/11/16(土) 13:46:29.58”この程度の小さい差”って笑い飛ばすんだろうな。
0658デフォルトの名無しさん
2013/11/16(土) 13:47:12.96ライブラリ毎にキーワード引数の仕様が違うという問題は
どうやって解決したの?
0659デフォルトの名無しさん
2013/11/16(土) 13:49:57.53ライブラリごとにキーワード引数の仕様が違うという
問題にぶち当たったことがない。
なぜならなくて困ってるのは、一部の人だけで殆どの人は困っていないから。
その困っている人だって、力があるなら自分で解決できるということは
証明された。解決するににかかった時間は数分だ。
結局のところ、問題を解決するのに必要なのは、自分の技術力なんだよ。
0660デフォルトの名無しさん
2013/11/16(土) 13:50:09.53ゲッターとかも機能するし、それこそプロキシ渡したりもできる
0661デフォルトの名無しさん
2013/11/16(土) 13:52:23.33問題が解決出来ないから、キーワード引数を使う文化が根付かなかったんだよ
キーワード引数が在る言語では、キーワード引数は良く使われる機能
0662デフォルトの名無しさん
2013/11/16(土) 13:54:23.53自由さは少ないけれど、そりゃあもちろん物事には2面性があるからね
でも問題は、実装、利用共に上手く両立するのはまあ難しいし
下手をすると折角の分かりやすさが無くなっちゃうってことだよね
0663デフォルトの名無しさん
2013/11/16(土) 13:54:40.85自作できるなんて問題ではないよ
0664デフォルトの名無しさん
2013/11/16(土) 13:56:56.50機能が強力な程良いのならgotoが優れてることになるからね
0665デフォルトの名無しさん
2013/11/16(土) 13:58:25.490666デフォルトの名無しさん
2013/11/16(土) 14:00:48.97うっかりしても構文エラーにならなくなったりするからなw
0667デフォルトの名無しさん
2013/11/16(土) 14:17:09.921,2個から10個以上まで言語環境によって差があるけど
どのくらいの数でどういうチョイスがいいのかね
0668デフォルトの名無しさん
2013/11/16(土) 14:37:31.52「ライブラリ毎に仕様が異なるという問題」は
発生してないのに、なんでそんなに必死になってるの?
0669デフォルトの名無しさん
2013/11/16(土) 14:40:53.51問題になってない、が正解
0670デフォルトの名無しさん
2013/11/16(土) 14:42:02.510671デフォルトの名無しさん
2013/11/16(土) 14:45:34.97Perlプログラマは間違わない
0672デフォルトの名無しさん
2013/11/16(土) 14:50:40.83引数の数なんてデフォでチェックするのは利便性を損ないすぎるから
必要なら明示的にチェックすればいいんだよ
0673デフォルトの名無しさん
2013/11/16(土) 15:46:27.96プロならチェックするべきじゃありませんね。
0674デフォルトの名無しさん
2013/11/16(土) 16:32:04.61チェックがデフォなのがどのくらい有用なのかって話じゃね?
0675デフォルトの名無しさん
2013/11/16(土) 16:36:48.76あれは良くない。
理由は良くないからです。
0676デフォルトの名無しさん
2013/11/16(土) 16:46:18.91損ないすぎるというくらいだから、利便性を損なう例を
いくらでも簡単に挙げられるよね?
え?無理?
0677デフォルトの名無しさん
2013/11/16(土) 16:58:02.05C の関数は引数の数ははじめから固定だから‥‥チェックはしない
引数の内容をチェックすることはCに限らず推奨されてはいるが
0678デフォルトの名無しさん
2013/11/16(土) 17:02:38.56それは実行時にしないってだけで
コンパイル時にはチェックしてるじゃん
0679デフォルトの名無しさん
2013/11/16(土) 17:13:18.90ダメなものはダメ!
0680デフォルトの名無しさん
2013/11/16(土) 17:43:24.53printf
0681デフォルトの名無しさん
2013/11/16(土) 17:47:44.660682デフォルトの名無しさん
2013/11/16(土) 18:29:50.690683デフォルトの名無しさん
2013/11/16(土) 19:04:04.43デフォルトで引数の数はチェックしておいて、
必要なときだけ可変長引数を使う方が良いな
printfみたいな関数の方が少ないんだから
0684デフォルトの名無しさん
2013/11/16(土) 19:12:40.14引数チェックは有害です。
0685デフォルトの名無しさん
2013/11/16(土) 19:33:46.13今はjsとか動的型で書いてる奴がtypeofとかやってる
Javaプログラマ馬鹿にしてる場合じゃない
0686デフォルトの名無しさん
2013/11/16(土) 19:41:21.43JavaのジェネリックってInteger Or Stringみたいなパラメータ指定できないじゃん。
instanceof使うしかないよね。動的言語なら簡単なんですけど!!
0687デフォルトの名無しさん
2013/11/16(土) 19:59:51.910688デフォルトの名無しさん
2013/11/16(土) 20:04:38.31<T>とか
0689デフォルトの名無しさん
2013/11/16(土) 20:27:25.29まじで?できるでしょ??
0690デフォルトの名無しさん
2013/11/16(土) 20:29:15.78できねえから言ってんだよ、じゃあお前やってみろよ
もしできなかったら動的厨に鞍替えしろ
0691デフォルトの名無しさん
2013/11/16(土) 20:39:04.07これからはtypeofよりinstanceofの方が型判定に使われるようになるだろうな
柔軟でいい感じ
s = "abc"
n = 123
StringOrNumber = {
[Symbol.hasInstance](o){ return Object(o) instanceof String || Object(o) instanceof Number }
}
s instanceof StringOrNumber //true
n instanceof StringOrNumber //true
0692デフォルトの名無しさん
2013/11/16(土) 21:01:18.77そんな互換性のない2つの型受け入れる事に何の利点があるんだ
どうしてもって言うならvisitorにする時にAdapterかませばいいだけ
現代でinstanceofなんて使うなよ
0693デフォルトの名無しさん
2013/11/16(土) 21:09:26.00Javaに欠点などないのですよ。
理由は最強のプログラミング言語だからです。
0694デフォルトの名無しさん
2013/11/16(土) 21:10:55.59完全無欠の糞言語
0695デフォルトの名無しさん
2013/11/16(土) 21:12:39.54VisitorとかAdapterとかどんだけ肥大化させるんだよ
コード増やせばバグを作りこむ可能性が増えることを認識しろ
instanceof使ったほうがマシ
関数型でもパターンマッチで普通に使うだろ
instanceof使うのが最先端
0696デフォルトの名無しさん
2013/11/16(土) 21:13:30.25equalsとか
0697デフォルトの名無しさん
2013/11/16(土) 21:15:04.220698デフォルトの名無しさん
2013/11/16(土) 21:17:48.21依存性逆にするだけであって肥大化はしねーよ
いちいち型増やす度にinstanceOf書いてたほうが肥大化するわ
つかパターンマッチでinstanceofって前提狂ってるだろ
オメーは動的型でしか考えられないのか
0699デフォルトの名無しさん
2013/11/16(土) 21:20:21.280700デフォルトの名無しさん
2013/11/16(土) 21:22:05.21>依存性逆にするだけであって肥大化はしねーよ
なに言ってんだお前
instanceofで2つの型を分けるだけなのに
VisitorパターンとAdapterパターンを実装しなければならないんだろ
それを肥大化と言わずになんと言うんだ
デザインパターンが最高だと思うなよオブジェクト厨が
パターンマッチで型を指定するだろ。
それとinstanceofを使うことは変わらないだろ。
0701デフォルトの名無しさん
2013/11/16(土) 21:22:23.11私が実践で使うことがあるかは知らないけど
0702デフォルトの名無しさん
2013/11/16(土) 21:30:38.800703デフォルトの名無しさん
2013/11/16(土) 21:58:05.43Windows上でやってたのが問題だったようです。
お騒がせしました。
やっぱりWindowsはダメですね。
0704デフォルトの名無しさん
2013/11/16(土) 22:01:14.15>instanceofで2つの型を分けるだけなのに
>VisitorパターンとAdapterパターンを実装しなければならないんだろ
必要なのはNumberOrStringなんて意味もなく混ぜる場合だけ
それこそ型で処理分ければいいだけだ
それとこの場合はvisitorにするのは動的型もメリット大きいんだぞ?
実装側はメソッド定義、呼び出し側はそれの呼び出しだけで済む
つかリファクタすべき典型パターンだろこれ
>パターンマッチで型を指定するだろ。
>それとinstanceofを使うことは変わらないだろ。
ま、instanceofの構文糖のが普通だと思ってたらそうなるわなw
0705デフォルトの名無しさん
2013/11/16(土) 22:04:30.98訂正
☓ 必要なのは
○ Adapterが必要なのは
0706デフォルトの名無しさん
2013/11/16(土) 22:07:22.47まあ好きに言わせておけ
0707デフォルトの名無しさん
2013/11/16(土) 22:11:19.23Object getValue() {
}
void process() {
Object value = getValue();
if (value instanceof Integer) {
} else if (value instanceof String) {
}
}
じゃあこれをご自慢のVisitorとAdapterを使ってどうぞ
0708デフォルトの名無しさん
2013/11/16(土) 22:41:35.880709デフォルトの名無しさん
2013/11/16(土) 23:04:13.32これ
void processInternal(Integer x);
void processInternal(String x);
で済むじゃん
0710デフォルトの名無しさん
2013/11/16(土) 23:06:39.81すむわけないだろ横着すんな。
Visitorにすると動的型でメリットが大きくて
Adapterが必要なんだろ。
VisitorとAdapterを使ってこしらえてみろよ。
0711デフォルトの名無しさん
2013/11/16(土) 23:13:21.29なんでダメなの?
0712デフォルトの名無しさん
2013/11/16(土) 23:14:53.26なんでいいと思ったんだ?
そもそもキャストしないとメソッド呼び出せねえじゃん。
さっさと自慢のVisitor、Adapterパターンというやつを見せてみろよ。
リファクタリングの典型例なんだろ。さっさとやれよw
0713デフォルトの名無しさん
2013/11/16(土) 23:17:15.16instanceofを否定するやつってこんなレベル
0714デフォルトの名無しさん
2013/11/16(土) 23:20:44.06静的型の大勝利なの?なんで?
0715デフォルトの名無しさん
2013/11/16(土) 23:22:54.18今書いてるんだが出す前にちょっと一つ反論させろ
いくらなんでもinstanceof不可避な制限つけたら
使わないでできるわけ無いだろ
型の無い状態からvisitor適用しろって
instanceofで静的に分けろって言ってるようなもんだぞ
0716デフォルトの名無しさん
2013/11/16(土) 23:23:19.63静的型のオーバーロードだと>>709じゃダメだが、
動的型のマルチメソッドなら大丈夫なのに
0717デフォルトの名無しさん
2013/11/16(土) 23:28:47.500718デフォルトの名無しさん
2013/11/16(土) 23:32:03.97好き勝手にメソッド足すのは良く無いと思います
0719デフォルトの名無しさん
2013/11/16(土) 23:37:48.090720デフォルトの名無しさん
2013/11/16(土) 23:39:05.39void processInternal(String x);
こういうの嫌いなんだよね。
実際に書いてみればわかるけどさ、
この後さらに他の型も使えるようにすると
void processInternal(Integer x);
void processInternal(String x);
void processInternal(Foo x);
void processInternal(Bar x);
みたいに同じようなのがずらずら並んでキモい。
こういうのはさ。
void processInternal(Param x);
みたいな物一つにして、
Param p = new Param(integer);
Param p = new Param(string);
Param p = new Param(foo);
Param p = new Param(bar);
ってやったほうがいいよ。
0721デフォルトの名無しさん
2013/11/16(土) 23:39:44.91拡張メソッド使えばいいやん
0722デフォルトの名無しさん
2013/11/16(土) 23:43:07.43都合のいい前提のままならコード出さねえぞ
0723デフォルトの名無しさん
2013/11/16(土) 23:45:34.37対して重要じゃない機能で何でもかんでもなんとかパターンを適用してるの?
その時点で設計としてはFatになるんだから言語仕様でできる範囲と
デザインパターンの適用を同列に議論してるのがそもそもあほ
そりゃ動的型付言語の方が書くのは楽に決まってるじゃん
可読性、保守性はまた別の話
0724デフォルトの名無しさん
2013/11/16(土) 23:46:42.79objectとキャストで十分
0725デフォルトの名無しさん
2013/11/16(土) 23:50:37.43Param p = new ParamInteger(integer);
Param p = new ParamString(string);
Param p = new ParamFoo(foo);
Param p = new ParamBar(bar);
>>724
そんなことをしたら、コードが複雑になるだろ。
引数が単一の型であることが重要。
つまりprocessInternalはParamという抽象型
一つだけに対する処理を書けば良くなる。
objectとキャストなんかに頼ったら
processInternalの中で○○型なら変換して〜って
という本質的でない処理であふれるだろ。
0726デフォルトの名無しさん
2013/11/16(土) 23:51:33.43> という本質的でない処理であふれるだろ。
まあそれを動的型付け言語はやらざるをえないわけですけどねw
0727デフォルトの名無しさん
2013/11/16(土) 23:51:52.28これもそうだけど何でもかんでも受け付けるようなのは
限られた機能だけであって全部が全部そんな実装しないでしょ
やるとしても抽象クラスででしょ
それをケチりたいなら動的型付言語を使えばよろしい
小規模ならそれでもいいでしょう
規模が大きくなって色んな奴が出入りするようなプロジェクトだと死ねるけど
0728デフォルトの名無しさん
2013/11/16(土) 23:59:25.06型を変換してオリジナルの処理を
呼び出すだけなんだから、
もっとシンプルな文法が合ってもいいと思うな。
0729デフォルトの名無しさん
2013/11/17(日) 00:13:14.000730デフォルトの名無しさん
2013/11/17(日) 00:14:51.920731デフォルトの名無しさん
2013/11/17(日) 00:19:37.96やっぱり静的の大勝利なんじゃないの?
違うの?
なんで?
0732デフォルトの名無しさん
2013/11/17(日) 00:35:12.03それはテンプレートじゃね
0733デフォルトの名無しさん
2013/11/17(日) 00:40:20.48テンプレートは、引数の型を
その型のまま処理するときに使う。
俺が言ってるのは(オーバーロードは)
いろんな型に対応している関数の話。
内部的には型を変換して処理する
(数値を文字型にしたり)
0734デフォルトの名無しさん
2013/11/17(日) 00:46:44.02要約すると、JSはCの二倍速い。
そういうことですよね?
0735デフォルトの名無しさん
2013/11/17(日) 00:53:54.49もう出てくる必要はないと思うよw
0736デフォルトの名無しさん
2013/11/17(日) 01:16:32.61ネタ荒らしには一切構うな
0737デフォルトの名無しさん
2013/11/17(日) 01:26:44.05あっ間違っちゃったw
0738デフォルトの名無しさん
2013/11/17(日) 01:32:12.25型を変換するかどうかはその関数の意味によるんじゃね?
print っていう関数だったら、そりゃ何でも文字列にするんだろうけど、
sort だったら?
0739デフォルトの名無しさん
2013/11/17(日) 01:37:01.64なんにでも対応できるなんて言ってないよ。
”オーバーロードを使う場合”は、
型変換してあとは同じロジックを使うことが
多いって言ってるだけ。
> sort だったら?
sortはそもそもオーバーロードを使うことが
少ないから例が悪い。
0740デフォルトの名無しさん
2013/11/17(日) 01:41:20.230741デフォルトの名無しさん
2013/11/17(日) 02:24:09.160742デフォルトの名無しさん
2013/11/17(日) 04:10:52.08有名なモジュールは他にもいくつかある
http://search.cpan.org/~gfuji/Data-Validator-1.03/lib/Data/Validator.pm
なお、Perl6はメソッドオーバーロードを含めてここに挙がったような機能はすべて満たしてる
0743デフォルトの名無しさん
2013/11/17(日) 04:27:04.40するときは「満たす予定」とか「満たす(※ただし時期未定)」とか書こうぜ。
0744デフォルトの名無しさん
2013/11/17(日) 06:28:57.60おまえバカだろ?
0745デフォルトの名無しさん
2013/11/17(日) 06:32:44.940746デフォルトの名無しさん
2013/11/17(日) 07:21:09.320747デフォルトの名無しさん
2013/11/17(日) 07:24:23.54あんだけ偉そうに言っといて出せないってどういうことだよw
リファクタの典型なんだよね?じゃあやってみろよ。
0748デフォルトの名無しさん
2013/11/17(日) 10:10:19.48Object型をinstanceofなしでVisitorにするなんて不可能
そんな条件で出すわけ無いだろ馬鹿
0749デフォルトの名無しさん
2013/11/17(日) 10:17:53.21リフレクションでも分岐はできる。
どちらにしろJavaなのに型検査を使わない前提を条件にする馬鹿に
いちいち取り合うわけないだろ
0750デフォルトの名無しさん
2013/11/17(日) 10:18:26.92ああ書けないのね、ヘタレすぎだろw
>どうしてもって言うならvisitorにする時にAdapterかませばいいだけ
>現代でinstanceofなんて使うなよ
>依存性逆にするだけであって肥大化はしねーよ
>それとこの場合はvisitorにするのは動的型もメリット大きいんだぞ?
>実装側はメソッド定義、呼び出し側はそれの呼び出しだけで済む
>つかリファクタすべき典型パターンだろこれ
こんなに偉そうなこと言っておきながらいざ書けと言われたら書けないのね。あっそう、じゃあもういいよw
0751デフォルトの名無しさん
2013/11/17(日) 10:20:26.19書けるし書いたよ
でも先に条件をきちんと述べてくれないとな
どうせ上にヤツみたいにObject型使ってないとか難癖つけるんだろ?
0752デフォルトの名無しさん
2013/11/17(日) 10:23:43.94お前さ、人の言うことにはずけずけ文句言って典型的パターンだとかバカにするくせに
自分がコード出すときは文句言われるの怖くて出せないわけ?激ダサだな。ゴミのようなヘタレだな。
そんなヘタレコードもう見たくもねえよ。自分の考えに自信をもって胸を張って提示しみろよ。
0753デフォルトの名無しさん
2013/11/17(日) 11:05:08.150754デフォルトの名無しさん
2013/11/17(日) 11:11:23.82無駄を省きフットワークを重視する裸族→動的型付け
0755デフォルトの名無しさん
2013/11/17(日) 11:27:22.44するけど、そこにヒントがあるんじゃないの?
たとえば、H8使ってモータードライバ作ろうとするとき、動的を有効に使えるかどうか。
0756デフォルトの名無しさん
2013/11/17(日) 11:29:34.86怖くないよ^^
0757デフォルトの名無しさん
2013/11/17(日) 11:32:10.60どっちだよw
0758デフォルトの名無しさん
2013/11/17(日) 11:34:28.62たまにプルプルしてるのが動的。
人間も年取ると「あの人は動的」とか言われるんだろうね。
0759デフォルトの名無しさん
2013/11/17(日) 11:41:36.23kwsk
0760デフォルトの名無しさん
2013/11/17(日) 11:53:10.23お爺さんぽくて良いなと。
0761デフォルトの名無しさん
2013/11/17(日) 11:57:41.77結局確約できないんだなw
ま、確かにこんな奴に文句言われても、もうどうとも思わんわ
pastebin.com/tbqxHZgC
0762デフォルトの名無しさん
2013/11/17(日) 12:05:37.49絶対叩かないって約束しろよと泣き事言われても聞く気はない
それが俺の武士道だ
0763デフォルトの名無しさん
2013/11/17(日) 12:09:46.69Adapterはどこなんだよ、getValueはどこ行ったんだ?使い物にならねえよ。
デザインパターンのご本読んで丸写ししただけなの丸わかりwレベル低すぎ。
0764デフォルトの名無しさん
2013/11/17(日) 12:27:16.65絶対叩くななんて言ってねえよ
でもObjectについては言及しなかったのは偉いぞ
お前はその教科書レベルすら思いつかないってこった
0765デフォルトの名無しさん
2013/11/17(日) 12:29:07.780766デフォルトの名無しさん
2013/11/17(日) 12:32:20.78ほれwがんばって勉強しろよw
/d.hatena.ne.jp/Nagise/20120426/1335451716
0767デフォルトの名無しさん
2013/11/17(日) 12:38:27.58確約して欲しかったんだろwうじうじ、ぐずぐずしてコード出そうとしなかったじゃないかw
何度も催促してようやく出したが本に書いてあるサンプルコードをそのまま打ち込んだだけのただのVisitorパターンだった。
完全にゴミだった。で、Adapterパターンはどうしたんだ?
ご本に載ってるだろ、それ書けばいんじゃねえの?w
0768デフォルトの名無しさん
2013/11/17(日) 12:41:29.22なるほどね、お前はそれを読んで感化されて調子に乗ってVisitorパターンがどうとか言っちゃったわけなのか?
言っては見たものの実力が足りず丸投げとw
0769デフォルトの名無しさん
2013/11/17(日) 12:45:22.56いくら長くなっても全く問題ないでしょ?
Javaでタブーなのは少しでもトリッキーなもの
ベタベタ書くのはとてもいい行為
0770デフォルトの名無しさん
2013/11/17(日) 12:46:57.460771デフォルトの名無しさん
2013/11/17(日) 12:55:48.350772デフォルトの名無しさん
2013/11/17(日) 12:59:39.30あほかw
その言語で出来る限り短くにするに決まってるじゃん。
冗長なのが問題なのではなく、
必要ないものがあるのが問題。
例えばJavaは型情報が必要だが、それはそれであると便利であり
これは必要な物だから、冗長には当てはまらない。
0773デフォルトの名無しさん
2013/11/17(日) 13:00:52.740774デフォルトの名無しさん
2013/11/17(日) 13:03:22.79沢山時間がかけられる。
同じことをするのにお金がいっぱいもらえます。
0775デフォルトの名無しさん
2013/11/17(日) 13:04:33.99そして言語のせいにするんだよね
Javaがー。俺が悪いんじゃないー。Javaがーって
0776デフォルトの名無しさん
2013/11/17(日) 13:14:53.84Javaすげー。工数盛り盛りー。Javaすげーって。
0777デフォルトの名無しさん
2013/11/17(日) 13:16:56.66念のため言っておくけど、褒め言葉だよ、そういう特長を持ってるのは素晴らしい
0778デフォルトの名無しさん
2013/11/17(日) 13:40:07.05全然効かんw
少なくともinstanceof列挙に何も感じないアホよりはマシです
0779デフォルトの名無しさん
2013/11/17(日) 13:45:58.06見落としてた
>で、Adapterパターンはどうしたんだ?
書き換えにAdapterが必要なんじゃなくて、
2つの互換性のない型を使う処理に必要って言ってる
そうやって意図的に曲解する事でしか反論できんの?w
残念だけどゴミなのはお前のコードとその頭のようだよ
0780デフォルトの名無しさん
2013/11/17(日) 14:39:34.880781デフォルトの名無しさん
2013/11/17(日) 15:03:35.760782デフォルトの名無しさん
2013/11/17(日) 15:18:03.74工数は減らすほうがいいよ。
そこで得られる報酬は
工数とは無関係。
価値に対して報酬は決まる。
君のように人月でしか考えてないと
わからないだろうけどさ。
0783デフォルトの名無しさん
2013/11/17(日) 15:27:40.65Java開発ってそういうもんだから
幻想は捨てたほうがいいよ
0784デフォルトの名無しさん
2013/11/17(日) 15:30:47.15お客様は素人なんだから。
「よそで見積もりとっても同じだと思いますよ?」って言えばいいだけなんですよ。
ちなみに僕は実績工数*1.5で提出します。
そして営業はお客様に0.7で割って出すらしいですよ。
結局実績の2.14倍でふっかけるわけですよね。
どこも同じことやってるんだから大丈夫ですよ。
0785デフォルトの名無しさん
2013/11/17(日) 15:34:40.47あれきっと仕事の基本がわかっていないんですよね。
僕たちはできないことを引き受けることを一番恐ろしく思ってるわけじゃないですか。
でも低能ってそうじゃないんですよね。
俺スゲー俺スゲー何でもできる!って安請け合いしちゃう。
そしてできない。
出来ない人ほど安請け合いしちゃうんですよ。
安請け合いすると能力を高く見せれると思ってんですかね?
こっちにヘルプ求めないでね^^
0786デフォルトの名無しさん
2013/11/17(日) 15:38:56.44ストレスたまってるのか?
0787デフォルトの名無しさん
2013/11/17(日) 15:41:57.95まあ使ったことないんだけど。
0788デフォルトの名無しさん
2013/11/17(日) 15:58:19.880789デフォルトの名無しさん
2013/11/17(日) 16:07:54.710790デフォルトの名無しさん
2013/11/17(日) 16:36:13.19やってみればすぐわかることなんですがね。
最近の中学生は実際にやってみないんですよね。
調べればわかると思っているんですよ。
インターネットのせいですかね。
やってみて初めて分かることは多いんですよ。
たとえばJSがCの三倍以上速いこととかね。
0791デフォルトの名無しさん
2013/11/17(日) 16:49:09.61安請け合いするのは営業では?
0792デフォルトの名無しさん
2013/11/17(日) 17:04:39.800793デフォルトの名無しさん
2013/11/17(日) 18:16:36.790794デフォルトの名無しさん
2013/11/17(日) 18:55:20.650795デフォルトの名無しさん
2013/11/17(日) 18:55:57.81普通にmethod(A a)とmethod(B b)と二つメソッド作る。
A, B or C or ...であればmethod(A a, B b), method(A a, C c), ... とすべての
組み合わせを列挙するか(比較的まじ)、APIが煩雑になるのであればBuilderパターンに
するのが実際に使われているJavaのAPIではよく見るパターンだと思う。
あとは必要なクラスだけ受けられるスーパークラスないしインターフェイスがあれば
それを使う。よく設計されたドメインクラス群を持つAPIの場合は大抵このパターンに
落ち着くので、「APIのユーザーは」上記のような煩雑さやinstanceof云々に遭遇する
ことは案外少ない。
で、Javaの場合APIの実装の中身の煩雑さを見ないことにするのもある程度は真実だと思う。
外の人の幸せのために中の人ががんばるのはどこの世界でも変わりません。
0796デフォルトの名無しさん
2013/11/17(日) 19:04:56.860797デフォルトの名無しさん
2013/11/17(日) 21:34:07.25営業が自力でスケジュール立てるなら、それは営業の責任だから別にいいじゃないですか。
やはり無理でしたねwって言ってやればいい。
実際はそんなことないから防衛するんでしょ。
お互いに。
0798デフォルトの名無しさん
2013/11/17(日) 22:48:26.40さすがアスペだらけな事はある
0799デフォルトの名無しさん
2013/11/17(日) 23:57:36.33俺はJSはCの3倍ほど?いやもっと?速いって言いたいだけだし。
それさえ言わせてくれたらあとはどう反論されようとかまわないし。
0800デフォルトの名無しさん
2013/11/18(月) 00:24:02.10JSはCの二の舞い。
に見えてた
0801デフォルトの名無しさん
2013/11/18(月) 00:51:46.08asmjs-apps-lua_binarytrees-workload4
だけだな
http://arewefastyet.com/#machine=12&view=breakdown&suite=asmjs-apps
0802デフォルトの名無しさん
2013/11/18(月) 01:02:08.24そりゃ2種類そのまま使っていいなら、素直に分けた方がいいさ
Adapter必要って言ったのは、1つの型として扱うのを強制される場合だよ
0803デフォルトの名無しさん
2013/11/18(月) 01:02:15.54の規模になると結局ライブラリやフレームワークを持ち出して使うわけで。
つまり目的がまずあって、ライブラリやフレームワークといった道具を用意してその上で
開発をするわけで、そういった目的や道具立てといったコンテキストを抜きに小手先の
コード比較をしたところで娯楽以上の生産的意味は無いかな。
普通フレームワークの類いはやりたいことをターゲットの言語の枠内で無理なく出来るよう
作ってあるはずで、フレームワークに使われている大多数の人にとっては言語に無い機能を
取り上げて「どうよ」と問われたところで「いや、それ特に必要無いし」となるし、現実
そうだったりする。
Javaの文法は土方向きでも実際の適用範囲は土方分野から大規模分散処理まで幅広いわけで。
それもStrutsからHadoopソフトウェアスタックに至るよく使われて叩かれた道具があるため。
言語仕様による生産性の差は比較的限定的なもので、使える道具の厚みとかテストやコード
管理、CIといった運用の方がより生産性に影響すると思うけれどもね。
0804デフォルトの名無しさん
2013/11/18(月) 01:08:10.08http://jsperf.com/fib-asm-js/2
http://jsperf.com/fib-asm-js/4
ミリ秒かからないような処理だと普通の方がよくなるのか
0805デフォルトの名無しさん
2013/11/18(月) 01:22:37.900806デフォルトの名無しさん
2013/11/18(月) 02:41:40.720807デフォルトの名無しさん
2013/11/18(月) 02:44:21.58出来るだけC++のライブラリを呼び出せって、書いてあったw
0808デフォルトの名無しさん
2013/11/18(月) 09:47:24.25それをスクリプトとやりとりするのにコストがかかるからね
この辺り読むといい
http://qt-labs.jp/2013/04/evolution-of-the-qml-engine-part-1.html
0809デフォルトの名無しさん
2013/11/18(月) 14:34:01.22面白い
マクロベンチでもC++の2倍の性能出ることあるのか
0810デフォルトの名無しさん
2013/11/18(月) 14:55:53.44これc++のlua-vmとjsのlua-vmの比較って事?
0811デフォルトの名無しさん
2013/11/18(月) 15:20:33.610812デフォルトの名無しさん
2013/11/18(月) 15:25:23.52https://github.com/dvander/arewefastyet/tree/master/benchmarks/asmjs-apps
0813デフォルトの名無しさん
2013/11/18(月) 17:23:23.56おいてけぼりなのが気になるなぁ。FFの何かがパコンとはまっている気がする。
GC周りかな。
0814デフォルトの名無しさん
2013/11/18(月) 18:06:58.66Modilla繋がりでemscriptenはFirefoxでよく最適化されるコードを積極的に吐くし
Firefoxはemscriptenのコードが早く動くよう積極的に最適化してるから
代表的なベンチではほぼ同じ
http://arewefastyet.com/
0815デフォルトの名無しさん
2013/11/18(月) 18:15:46.83Cで書かれたJS実行環境は、Cより速いんです。
ということはですよ。
JSで書かれたJS実行環境を、Cで書かれたJS実行環境上で走らせるともっと速いわけです。
さらにですよ。
Cで書かれたJS実行環境上で走るJSで書かれたJS実行環境上で、JSで書かれたJS実行環境を
走らせるともっともっと速いわけです。
これを繰り返すと無限に速くなるんですよ。
つまりですね、現代のコンピュータは記憶容量のみに律速されているんです。
なぜなら、現代にはJSがあるのだから。
0816デフォルトの名無しさん
2013/11/18(月) 19:00:32.07バカ
0817デフォルトの名無しさん
2013/11/18(月) 19:01:52.150818デフォルトの名無しさん
2013/11/18(月) 19:41:22.11現実は極限られた超絶技巧のプログラマが鬼速の処理系を書くから、
その他大勢の>>815みたいなアホプログラマがCで直接書くよりも
高級言語で平凡以下のコードを書いて鬼速処理系が最適化したほうが速くなるんだよ。
0819デフォルトの名無しさん
2013/11/18(月) 20:27:57.87単純じゃない話なんてここでできないでしょw
一番分かりやすい話で言うとそうだよ
0820デフォルトの名無しさん
2013/11/18(月) 21:22:38.00実際はアセンブリまでコンパイルされての結果だからそっから高級言語に戻しても成り立たない
0821デフォルトの名無しさん
2013/11/19(火) 14:16:23.08そうは見えないが
黒と緑だぞ
0822デフォルトの名無しさん
2013/11/19(火) 15:06:31.44lua-binarytreesのワークロードね。後半に行くとno asm.jsもネイティブ並みに早く
なっている。緑の線だけが置いてけぼり。
で、こんなパターンが出ているのはこのlua-binarytreesだけで、asm.jsがネイティブ
を上回っているのもこれだけなのでやや気になった。
0823デフォルトの名無しさん
2013/11/19(火) 16:02:04.170824デフォルトの名無しさん
2013/11/19(火) 16:20:14.120825デフォルトの名無しさん
2013/11/19(火) 17:38:10.230826デフォルトの名無しさん
2013/11/19(火) 18:34:41.97動的言語の悲惨さの一例
静的チェックができないと言語のバージョンアップすらこの有様
0827デフォルトの名無しさん
2013/11/19(火) 18:54:51.82静的動的は関係なく言語の問題だな
0828デフォルトの名無しさん
2013/11/19(火) 22:31:18.51もしかして互換性無い問題の話のことを言ってる?
確かに互換性がないのは言語の問題だよ。
でもそれは多かれ少なかれどの言語にもあることで、
重要なのは、互換性がないのは分かった。
じゃあ、それからどうするのだ?って話だと思う。
修正する時に重要なのは、影響範囲がどこまで及ぶかを調べること。
何かを修正した結果、想定しない箇所に影響が出たら困るからね。
テストがあれば、動的でも可能だけどテストに漏れがないことを保証する方法はない。
そもそも改修が必要な物は、何かしら問題を抱えているから
改修が必要なわけで、そこに完璧なテストを求めることは出来ない。
だからテスト以外の方法で客観的に影響範囲を把握でき、
できることなら機械的にコードを修正(リファクタリング)する方法が必要になる。
ここまで話をしたら、静的動的が関係あるってわかるでしょ?
0829デフォルトの名無しさん
2013/11/20(水) 00:03:42.650830デフォルトの名無しさん
2013/11/20(水) 00:37:32.36結局それをうまくこなすのは静的って構図だな。
0831デフォルトの名無しさん
2013/11/20(水) 01:14:06.82バカだなあ
言語仕様が変わったら静的型だろうが以前の動作は保証されないだろ
影響範囲だって、言語仕様の変更が明確でなければ静的検査では追いかけられない
結局はテストで把握するしかないんだよ
結局静的脳はおもちゃしか作れないんだなw
0832デフォルトの名無しさん
2013/11/20(水) 01:15:31.03動的が生み出すアイディアは本物で、
静的のは劣化コピーだけどなw
0833デフォルトの名無しさん
2013/11/20(水) 01:30:43.200834デフォルトの名無しさん
2013/11/20(水) 03:03:22.31動的が至高ってのはピストでブレーキにとらわれない俺かっけーってのと同じレベルだろ
0835デフォルトの名無しさん
2013/11/20(水) 03:10:48.63ブレーキついてないのは静的型だろw
コンパイルしたら型情報は消し去るんだから
動的型のほうがランタイムにも型情報があって安全だ
0836デフォルトの名無しさん
2013/11/20(水) 03:17:44.29問題はデフォルト値や関数の挙動が微妙に変わっちゃってること
特にこの件はその挙動の違いに実装のバグも含まれてるどうしようもない事件
あとサーバーごと変えたからサーバーの設定にも手間取っての3年
0837デフォルトの名無しさん
2013/11/20(水) 03:18:02.61??? RTTIが使える静的言語はいくらでもあるが・・・
0838デフォルトの名無しさん
2013/11/20(水) 03:21:24.04高性能ブレーキついてるから安全だぜぃとか言いながら歩道を飛ばしてるアホと同じだな (w
0839デフォルトの名無しさん
2013/11/20(水) 03:38:40.14お前さんの友達か何か?
0840デフォルトの名無しさん
2013/11/20(水) 03:39:08.86その考えはいたるメソッドで非効率にバリデーション書きそうな発想だな
0841デフォルトの名無しさん
2013/11/20(水) 04:03:45.80動的型で書いてる方が実行時エラー出す頻度高いだろ
これ相当に頭悪い発言だな
0842デフォルトの名無しさん
2013/11/20(水) 04:07:18.43つまり同じ数のテスト試行で2倍安定
0843デフォルトの名無しさん
2013/11/20(水) 04:44:31.900844デフォルトの名無しさん
2013/11/20(水) 04:45:38.17エラー出したぐらいで止まっちゃうヘッポコ言語使ってるの?
かわいそうにw
0845デフォルトの名無しさん
2013/11/20(水) 05:15:23.99というスタート地点の認識からして間違っているんだからもうこの線は諦めたら?
0846デフォルトの名無しさん
2013/11/20(水) 05:45:05.91動的でもエラーが出たら、
そのパスの実行は止めると思うが。
0847デフォルトの名無しさん
2013/11/20(水) 08:19:40.19バグがあっても例外で握りつぶしてる人か?
0848デフォルトの名無しさん
2013/11/20(水) 08:49:05.150849デフォルトの名無しさん
2013/11/20(水) 09:23:28.69参考まで、動的型で、言語処理系としても動的性を究極まで探求したSmalltalkの場合、
テストとかで、わざと存在しないメソッド呼び出し書いて(コンパイル時エラーもあえて無視)、
そのテストの実行時エラーでデバッガを起動してその中でコード書いて実行を続けさせて
エラーをつぶし終わるとそのパスを通るコードが完成して正しい結果が返ってくるってやりかたをすることもある。
http://www.youtube.com/watch?v=ymITEeAOtEA
0850デフォルトの名無しさん
2013/11/20(水) 09:50:13.74Groovyとか無言で死ぬぞw
0851デフォルトの名無しさん
2013/11/20(水) 11:36:41.99try-catchは止めて例えば失敗した時にはnullを返すとか
そういった柔軟なことが動的の方がやりやすいってことでしょ
それは分かるよ
0852デフォルトの名無しさん
2013/11/20(水) 13:58:46.66VB6/VBSのエディットコンティニューみたいなのか
.NETにもあるよ
0853デフォルトの名無しさん
2013/11/20(水) 15:00:34.160854デフォルトの名無しさん
2013/11/20(水) 16:15:05.20Eclipseも元々は〜とか言い出してSmalltalkerが無駄に元気になっちゃうだろう。
最近はJavaの世界でもIntelliJ IDEAとか人気だし、Netbeansも含めたこの手のIDEは
プラグイン拡張で多言語対応が普通。単一の言語でプロジェクトが閉じないことも
最近は少なく無いから必然ではあるのだけど。
動的言語の開発時であってもこの手のJavaやC系の言語で書かれたIDEを利用している
人は少なくないんじゃないのかな。
0855デフォルトの名無しさん
2013/11/20(水) 16:27:26.130856デフォルトの名無しさん
2013/11/20(水) 17:56:11.07所詮静的脳ではその程度の理解に留まるわけか
かわいそw
0857デフォルトの名無しさん
2013/11/20(水) 17:59:30.47わかりやすい劣化コピーの例w
0858デフォルトの名無しさん
2013/11/20(水) 18:07:38.85JSを使いこなせるようになって初めて一人前と言える。
0859デフォルトの名無しさん
2013/11/20(水) 19:05:06.60ライブラリを制するってことであり
プラットフォームを制するってことだな
0860デフォルトの名無しさん
2013/11/20(水) 21:24:32.580861デフォルトの名無しさん
2013/11/20(水) 21:26:52.470862デフォルトの名無しさん
2013/11/20(水) 21:44:15.250863デフォルトの名無しさん
2013/11/20(水) 21:58:48.56ただの荒らし
0864デフォルトの名無しさん
2013/11/20(水) 23:34:38.760865デフォルトの名無しさん
2013/11/20(水) 23:41:54.130866デフォルトの名無しさん
2013/11/21(木) 00:19:00.720867デフォルトの名無しさん
2013/11/21(木) 05:38:09.140868デフォルトの名無しさん
2013/11/21(木) 12:24:55.96ま実際に入るのは少しづつなわけだけれど
0869デフォルトの名無しさん
2013/11/21(木) 12:36:11.92Mozillaの書いた「asm.jsはネイティブの半分の速度」という記事を日本のニュースサイトが誤訳してそうなっただけだからMozillaはあまり関係ない
Mozilla Japanの人が誤訳を指摘してもいる
そもそもasm.jsは型を固定することで速度を出すんだから、速度面での動的型付けの弱さを露呈させた例だよねぇ?なんでこのスレにJS厨が来るんだろう?
0870デフォルトの名無しさん
2013/11/21(木) 15:45:37.050871デフォルトの名無しさん
2013/11/21(木) 16:00:19.31静的型付け言語に未来はなく
JSみたいな動的型付け言語の方が潜在開発生産性が高いから見習えってことだろ
スレタイ忘れたのかよ
0872デフォルトの名無しさん
2013/11/21(木) 16:07:29.30今日のこのプロジェクトで潜在してたら意味ないんですが
0873デフォルトの名無しさん
2013/11/21(木) 16:24:05.89>>872
0874デフォルトの名無しさん
2013/11/21(木) 16:50:14.59スレタイ見直せば
0875デフォルトの名無しさん
2013/11/21(木) 17:41:30.52逆に言えばASFがあるのがJavaの強み。
動的静的と全然関係ないけれども、生産性や適用可能分野は案外そういう関係ないところ
でも決まる。
0876デフォルトの名無しさん
2013/11/21(木) 18:10:47.920877デフォルトの名無しさん
2013/11/21(木) 19:25:31.950878デフォルトの名無しさん
2013/11/21(木) 19:31:50.710879デフォルトの名無しさん
2013/11/21(木) 19:39:41.94ファーストコンタクトの時、地球を代表して会談に臨むのは地球王Javascriptだ。
0880デフォルトの名無しさん
2013/11/21(木) 20:15:14.00テレビ放送にも使われてるし
ごもっともだ
0881デフォルトの名無しさん
2013/11/21(木) 20:20:21.050882デフォルトの名無しさん
2013/11/21(木) 20:27:40.580883デフォルトの名無しさん
2013/11/21(木) 20:32:45.54なのにgotoをES5で外しちゃって、再帰のためにES6で使える予約語が無くなって残念だったね
0884デフォルトの名無しさん
2013/11/22(金) 02:08:15.75JavaScriptは現実にLL(それ以上を含めてもいい)で一番流行ってる
特にインドの技術者がどんどん使用を始めてるし、
そのうち仕事で使わざるを得ない時が来るだろうね
はぁ・・・
0885デフォルトの名無しさん
2013/11/22(金) 02:12:54.230886デフォルトの名無しさん
2013/11/22(金) 09:19:00.37今後はサーバーサイドにどの程度食い込めるかだろうな > JS
node.js界隈もhypeサイクルの幻滅期を乗り越えてRoRと同程度のポジションを
狙えるかが当面のマイルストーンかな。
0887デフォルトの名無しさん
2013/11/22(金) 09:42:04.60まぁその頃には最悪TypeScriptが1.0になってるだろうから動的地獄にハマることはないと思ってる
0888デフォルトの名無しさん
2013/11/22(金) 12:55:20.61どの言語を使っても君の脳みそは残念なままw
言語のせいにしてる間は進歩ナッシングw
0889デフォルトの名無しさん
2013/11/22(金) 14:22:38.94それに気が付かないのは新参だけ。
0890デフォルトの名無しさん
2013/11/22(金) 14:37:14.28もっといい言語がいくらでもあるのに。
マゾ?
0891デフォルトの名無しさん
2013/11/22(金) 16:41:34.63が凄く高まっているのを感じる。
MLやNLPを行う欧米のアカデミアに浸透していてそこからのスピンアウト技術が増えたのと、
関数型言語上の「動くDSL」を使ってワークフローを宣言的に記述させることで、フローの
静的解析や各部のプロファイリングなどを通じた最適化につなげるのに好都合とのこと。
特に後者はそういうフレームワークを開発しているグループに先日話を聞いて面白かった。
単に内部の実装技術としてだけでは無く、Scalaを利用して外部の開発者向けに積極的に
関数型のAPIを提供して利用してもらうという動きは今後も増えそう。
0892デフォルトの名無しさん
2013/11/22(金) 17:07:14.950893デフォルトの名無しさん
2013/11/22(金) 18:08:05.57早めに勉強しとく必要がある。
0894デフォルトの名無しさん
2013/11/22(金) 20:45:13.11あんないい嫁中々いないぞ?
0895デフォルトの名無しさん
2013/11/22(金) 21:00:48.65そんなインド人に頼まないといけないような仕事しばらくしないで良さそうだからやらんでいいわ
0896デフォルトの名無しさん
2013/11/22(金) 21:07:22.600897デフォルトの名無しさん
2013/11/22(金) 21:10:12.200898デフォルトの名無しさん
2013/11/22(金) 21:34:09.32静的関数型がいい
0899デフォルトの名無しさん
2013/11/22(金) 22:59:36.620900デフォルトの名無しさん
2013/11/22(金) 23:02:46.320901デフォルトの名無しさん
2013/11/23(土) 08:00:40.21関数型やってますと言えば賢くみられる気分に浸れる。
0902デフォルトの名無しさん
2013/11/23(土) 09:20:53.10やってるやってる!
↑むしろバカっぽい感じするんだけど、そうでもないの??
0903デフォルトの名無しさん
2013/11/23(土) 10:01:53.730904デフォルトの名無しさん
2013/11/23(土) 10:45:18.150905デフォルトの名無しさん
2013/11/23(土) 20:57:57.06ただ起動が遅いのとjar地獄(最近はpomのジャングルも)。
これだけは本当にどうにもならん。
0906デフォルトの名無しさん
2013/11/23(土) 22:56:05.24あれでモリモリ複雑なロジック書くのはお勧めできない
0907デフォルトの名無しさん
2013/11/24(日) 02:32:00.650908デフォルトの名無しさん
2013/11/24(日) 02:51:15.95非同期とかならF#の方がよっぽど得手な気はするけど
0909デフォルトの名無しさん
2013/11/24(日) 03:23:48.360910デフォルトの名無しさん
2013/11/24(日) 06:27:34.540911デフォルトの名無しさん
2013/11/24(日) 07:38:53.50nodeにとって非同期な書き方は手段であって目的では無いと思うのね。
シングルスレッドでリクエストを捌くために非同期な書き方を必要とされているだけで。
生産性という観点からすればあえて非同期な書き方で書くのと普通に同期的な書き方で
書いて並列実行やスケジューリングは上位層に丸投げするのではどちらが書きやすいかが
問われると思うけど、概ね非同期な書き方はより面倒という評価じゃないのかな。
0912デフォルトの名無しさん
2013/11/24(日) 08:03:51.66んー、つうとF#がスキル的にも環境的にも使えるならそこでnodeを使う意味はないのかな
F#だと非同期にしたら効果的な箇所で、同期的な書き方とほぼ同じような感じでかける。
0913デフォルトの名無しさん
2013/11/24(日) 08:52:08.660914デフォルトの名無しさん
2013/11/24(日) 09:16:17.880915デフォルトの名無しさん
2013/11/24(日) 09:29:15.84OCamlだと非同期に向いたモナドとかあるの?
0916デフォルトの名無しさん
2013/11/24(日) 10:31:25.980917デフォルトの名無しさん
2013/11/24(日) 11:48:09.290918デフォルトの名無しさん
2013/11/24(日) 12:39:20.65厳格な関数型言語なんて流行らないだろう
0919デフォルトの名無しさん
2013/11/24(日) 13:15:11.630920デフォルトの名無しさん
2013/11/24(日) 13:18:20.83そこから目をそらし関数型は難しいという衒学趣味をひけらかす
0921デフォルトの名無しさん
2013/11/24(日) 13:21:41.250922デフォルトの名無しさん
2013/11/24(日) 13:23:35.82仕事何やってるの?
いや、単に言語で遊んでるだけなら
簡単に乗り換えられるだろうねって思っただけ。
その言語が失敗しても、失うものは殆ど無いしね。
0923デフォルトの名無しさん
2013/11/24(日) 13:23:39.82開発進むと同時に仕様が変わることもあるし、柔軟性が大事だよね
0924デフォルトの名無しさん
2013/11/24(日) 13:26:43.93安全に正しい設計に修正できる方法があるってことだよ。
仕様変更に無理やり対応して、どんどん設計とコードが
汚くなっていく。そういう柔軟性は不要
0925デフォルトの名無しさん
2013/11/24(日) 13:46:49.24つまり静的型の関数型は使い物にならないということだね。
関数型ではマトモな設計手法なんかないからね。
言語は安全を標榜していても、
プログラマは設計無用の天然カウボーイ、
それが関数型での開発の正体さw
0926デフォルトの名無しさん
2013/11/24(日) 13:47:10.82Twitterの話だよ
0927デフォルトの名無しさん
2013/11/24(日) 13:54:25.37> つまり静的型の関数型は
略
> マトモな設計手法なんかないからね。
「つまり」ってなに?
俺、静的型の関数型言語に
まともな手法がないなんて言ってないんだけど?
勝手に俺がそう言ったように見せかけるのやめてくれない?
0928デフォルトの名無しさん
2013/11/24(日) 14:01:07.68君、頭わるいね。w
0929デフォルトの名無しさん
2013/11/24(日) 14:06:31.680930デフォルトの名無しさん
2013/11/24(日) 14:11:19.19おいw 反論するのかと思ったら
それだけかよw
0931デフォルトの名無しさん
2013/11/24(日) 14:11:45.60あるよ。継承とか型とか言語によって違うから。
0932デフォルトの名無しさん
2013/11/24(日) 14:20:56.12設計はそれとは無関係だよ。
関係あるという根拠も出てないしね。
0933デフォルトの名無しさん
2013/11/24(日) 14:25:28.85設計と関係ないという根拠も出てないじゃん。
何を根拠に無関係と言ってんだ。いいかげんなこと抜かすな。
var a = 1;
a = "a";
型がある言語ではできない芸当です。
0934デフォルトの名無しさん
2013/11/24(日) 14:25:52.710935デフォルトの名無しさん
2013/11/24(日) 14:27:07.41手続き型ベースの構造化分析設計の子孫は関数型とは決定的に合わないよ。
そんなこともわからないんじゃ、君は関数型も設計も、両方わかってないねw
0936デフォルトの名無しさん
2013/11/24(日) 14:27:54.23関数型は使わないなあ、難しいから。
動的言語なら簡単なんだが。
0937デフォルトの名無しさん
2013/11/24(日) 14:30:14.69それが退化だとわからない男の子って
0938デフォルトの名無しさん
2013/11/24(日) 14:31:26.76どこが?ねーどこが?
代数的データ型の代替として使えるだろ。
Javaのように中途半端な言語しか知らないとわからないだろうけどなw
0939デフォルトの名無しさん
2013/11/24(日) 14:31:55.75君ってよく「おまえは結論ありきだな」と言われるでしょ?
0940デフォルトの名無しさん
2013/11/24(日) 14:35:22.82> var a = 1;
> a = "a";
> 型がある言語ではできない芸当です。
ん?
「数値または文字」型 a = 1;
a = "a"
できるけど?
0941デフォルトの名無しさん
2013/11/24(日) 14:36:27.18「安全に正しい設計に修正できる方法がある」>>924
と思い込んでいる関数厨って本当にバカだねw
0942デフォルトの名無しさん
2013/11/24(日) 14:36:30.80やってみろよwJavaでコード書いてみろ。
さらっと嘘ついてんじゃねえぞ。
0943デフォルトの名無しさん
2013/11/24(日) 14:38:53.62Javaで書くならこんな感じかねぇ。
NumOrString a;
a.setValue(1);
a.setValue("a");
setValueの実装はオーバーロードで。
0944デフォルトの名無しさん
2013/11/24(日) 14:40:15.13式を渡して結果をプリントするだけがプログラミングだと思い込んでいる男の子たちとは
理解し合えないものなのかしら
0945デフォルトの名無しさん
2013/11/24(日) 14:41:09.41は?そんなクソなコード思い浮かべてできるとぶっこいたのか?あ?
メソッド呼び出しとかバカじゃねw
NumOrStringの実装省いてんじゃねえぞw書けよちゃんと。
0946デフォルトの名無しさん
2013/11/24(日) 14:43:05.56君が最初の段階で気づかないのは仕方ない。
だけど、ここまでヒント上げて気づかない奴に
俺は興味ないかな。じゃあね。
0947デフォルトの名無しさん
2013/11/24(日) 14:43:14.08何を理解してほしいと思っているのかお前のプレゼンテーション能力が試されるときだな
お前の持てる力、全身全霊をかけて俺の固い頭を揺さぶってみろ!
0948デフォルトの名無しさん
2013/11/24(日) 14:45:49.95逃げたw きっと素敵なコードがあるんだろうと期待してたら
クソ丸出しのコード出してきやがったから戦慄しただけ、NumOrStringの
コードまでちゃんと載せろといったら一目散に逃げ出したw
最後にこんな言葉を残していきました。「俺は興味ないかな」 かっけーw 地獄のミサワさん現るw
0949デフォルトの名無しさん
2013/11/24(日) 14:46:49.73obj.value = 1 で
obj.setValue(1) と解釈されるから、
まさに、
> var a = 1;
> a = "a";
これがそのまま実装できるな。
0950デフォルトの名無しさん
2013/11/24(日) 14:47:08.600951デフォルトの名無しさん
2013/11/24(日) 14:47:21.07弱い犬ほど(略
0952デフォルトの名無しさん
2013/11/24(日) 14:48:32.45状態を作る実装ってダサくないか?
静的関数で不変オブジェクト返すっていうのがスマートだろ。
動的言語厨の俺に指摘されてどうすんだっていうw
0953デフォルトの名無しさん
2013/11/24(日) 14:48:33.94ワロタw まさにw
0954デフォルトの名無しさん
2013/11/24(日) 14:49:35.87意味がわからん。
変数に代入する時点で
それがクラス型だろうが値型だろうが
状態を作ってるわけで同じことだろ。
何がいいたいんだ?
0955デフォルトの名無しさん
2013/11/24(日) 14:52:14.18もしかして状態を”変えられる”ことを
問題にしてるのか?
ならコンストラクタの初期化だけを認めて
setterなくせばいいんじゃね?
0956デフォルトの名無しさん
2013/11/24(日) 14:52:30.52具体的にどうやればいいの?
0957デフォルトの名無しさん
2013/11/24(日) 14:52:40.870958デフォルトの名無しさん
2013/11/24(日) 14:52:41.93・設計技法がないくせに設計している気分になっている
・設計なんてしていない癖に設計していると嘘をつく
・静的型マンセーのくせに型付けされていないプロパティに代入してドヤ顔する
これって技術者失格ってこと?
0959デフォルトの名無しさん
2013/11/24(日) 14:52:43.83C#でもJavaでもいいんだが、NumOrStringの実装書いてみろよ。
オブジェクト作ってそのあと状態変えてるだろ。それが超絶ダセー昭和のコードだって言ってんだよ。
書いてみろよ。メソッドをプロパティに変えてお茶を濁すようなことするから成長しないんだよ。
0960デフォルトの名無しさん
2013/11/24(日) 14:53:43.43NumOrStringはライブラリにあります。
実装は隠蔽されて、使う側が気にすることではありません。
0961デフォルトの名無しさん
2013/11/24(日) 14:54:47.58そうだよ。激ダサなコード提示してヒント上げたとわけのわからない
こと抜かしてるバカに指摘してんだよ。
0962デフォルトの名無しさん
2013/11/24(日) 14:56:11.43へんなの?
型がある言語では実装不可能っていう話だっただろ?
実装可能と気づいた途端。
今度は、実装に文句つけるき?
まずは土下座して謝るべきだよね。
実装不可能じゃありませんでしたって。
0963デフォルトの名無しさん
2013/11/24(日) 14:57:32.22素直に謝ることが出来ない人もいるのです。
0964デフォルトの名無しさん
2013/11/24(日) 14:57:48.01それはライブラリの一般論。俺が言ってるのはNumOrStringの実装をここに書けってこと。
お前が言ってるのは詭弁っていって頭の悪い人間が使う逃げ口上。すごくダサいこと。
社会でやってはいけません。みんな冷めた目で君を見ることになる。
0965デフォルトの名無しさん
2013/11/24(日) 14:58:22.46> a = "a";
> 型がある言語ではできない芸当です。
↓
実装不可能と知った途端
負け犬のようにわめき始めました。
0966デフォルトの名無しさん
2013/11/24(日) 15:00:12.33それが出来ない人は
社会でやっていけないぞ?
なんだろうね。自分が今どんだけ
気違いになってるのか気づいてないのかな?
0967デフォルトの名無しさん
2013/11/24(日) 15:01:01.490968デフォルトの名無しさん
2013/11/24(日) 15:01:02.690969デフォルトの名無しさん
2013/11/24(日) 15:01:43.76お前は実装可能の定義を変えてるだけ。
var a = 1;
a = "a";
俺が示したコードはこれだ。メソッド呼び出しなんて1ミリもない。
考えるまでもなくコードが全然違うじゃないか。だからお前は実装できなかったんだ。
土下座して謝れ。なんていうこともできてしまうわけでつまりはこれが会話のスレ違い。
言葉の再定義が行われるからこういうことが起こる。再代入の恐ろしさ、不変オブジェクトの
すばらしさはこういう日本語のやりとりからも学べるだろ。あれ、俺いますごくいいこと言ってね?
0970デフォルトの名無しさん
2013/11/24(日) 15:02:41.18setter呼び出しになるから
>>969のコードは実装可能。
0971デフォルトの名無しさん
2013/11/24(日) 15:02:48.76>メソッド呼び出しなんて1ミリもない。
ダウト。言語と"var"の意味による。
0972デフォルトの名無しさん
2013/11/24(日) 15:03:13.44まだ気づいていないのか。
哀れだな。
0973デフォルトの名無しさん
2013/11/24(日) 15:03:48.19じゃあ書いてみろよ、メソッド呼び出しの糞コードネタはすでに出たぞ、
とうぜんそれを踏まえて新たな切り口のネタがあるのだろうな、よし書いてみろ。
0974デフォルトの名無しさん
2013/11/24(日) 15:03:54.07わーわーわめく
社会不適合者
0975デフォルトの名無しさん
2013/11/24(日) 15:04:10.28つまり具体的な実装例を示すことができないってことかw
0976デフォルトの名無しさん
2013/11/24(日) 15:04:57.39int a = 1;
a = "a"; ← エラーになる。
型がない言語ではできない芸当です。
0977デフォルトの名無しさん
2013/11/24(日) 15:05:44.17オペレーターオーバーロードで書けるだろ。
0978デフォルトの名無しさん
2013/11/24(日) 15:05:55.65実装が示されていない以上、実装不可能だなw
静的厨はうそつきw
0979デフォルトの名無しさん
2013/11/24(日) 15:06:28.19それが人類の進歩の証だと気づかない男の子って
0980デフォルトの名無しさん
2013/11/24(日) 15:06:46.95君、言ってて恥ずかしくない?
何の恥ずかしさも感じないようなら、人間として終わってるよ。
0981デフォルトの名無しさん
2013/11/24(日) 15:06:56.73main = do
let x = 1
let x = "a"
print x
0982デフォルトの名無しさん
2013/11/24(日) 15:07:13.14は?コード書いてみろ、そういう官僚答弁のようなはぐらかしには
うんざりする、ちゃんとやれシロアリども。
>>971
言語と"var"の意味によるとするならば言語と"var"の意味によって
メソッド呼び出しなんて1ミリもなくなるのだから、
メソッド呼び出しが1ミリもない言語と"var"の意味の文脈であると知れ。
0983デフォルトの名無しさん
2013/11/24(日) 15:07:18.13型がない言語には実装不可能なことがあるのだよ。
静的型付け言語の潜在開発生産性は今の100倍 ×5
http://toro.2ch.net/test/read.cgi/tech/1385273168/
0984デフォルトの名無しさん
2013/11/24(日) 15:07:49.06hidingって視点もあったね。
結局書けてるじゃん。
0985デフォルトの名無しさん
2013/11/24(日) 15:08:57.05人間として最低最悪のゴミ人間のやることだよね。恥を知れw
0986デフォルトの名無しさん
2013/11/24(日) 15:08:59.11こうなってるだけじゃないの
main = let x = 1 in let x = "a" in print x
0987デフォルトの名無しさん
2013/11/24(日) 15:09:28.39謝れ謝れうるせえ奴がいるな、謝罪を共用して牢屋ぶちこまれるのが流行ってるらしいが
お前の方がよっぽど社会不適合者、俺は動的言語が好きなただの常識人。
0988デフォルトの名無しさん
2013/11/24(日) 15:10:32.54自分のほうが正しいって思うんだよ。
病院いってこい。
0989デフォルトの名無しさん
2013/11/24(日) 15:12:08.36人間失格のクズ確定だなw
0990デフォルトの名無しさん
2013/11/24(日) 15:12:22.20http://ideone.com/Oh50C6
0991デフォルトの名無しさん
2013/11/24(日) 15:12:51.51脳みそシロアリに食われた白痴か?
そういう行為が生産性を落とすんだ。
エラーでたわーいわーいと遊んでる暇あったらコード書けタダ飯ぐらいが。
0992デフォルトの名無しさん
2013/11/24(日) 15:12:59.19糞コードワロタw
余計なものを書いてる時点で
それは実装したとはみなせない。
0993デフォルトの名無しさん
2013/11/24(日) 15:14:04.170994デフォルトの名無しさん
2013/11/24(日) 15:14:25.91動的バンザイ!やったぞ勝利だ!
0995デフォルトの名無しさん
2013/11/24(日) 15:14:55.98c++はマルチパラダイムだから動的言語の範疇だ。
静的言語でやってみろ。
0996デフォルトの名無しさん
2013/11/24(日) 15:16:16.95声が震えてるぞw
0997デフォルトの名無しさん
2013/11/24(日) 15:19:16.43モニターから幻聴でも聴こえるのか?近くのパン屋さんに行ってパン切り包丁で
耳切り落としてもらえよ、モニターの調子良くなるんじゃねえの。
0998デフォルトの名無しさん
2013/11/24(日) 15:19:54.28顔が真っ赤だぞw
0999デフォルトの名無しさん
2013/11/24(日) 15:20:00.031000デフォルトの名無しさん
2013/11/24(日) 15:20:18.45こんな名言を >>1000 で決められない男の子って
10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。