1 名前:uy [2012/08/11(土) 12:21:25.19 ] 面白かったのでコピペ 979 名前:uy[sage] 投稿日:2012/08/11(土) 11:53:55.80 面接官「特技はRubyとありますが?」 学生 「はい。Rubyでならなんでもかけます。」 面接官「ではシングルトンパターンを書いてください。」 学生 「存在しません?」 面接官「え、存在しない?」 学生 「はい。存在しません。Rubyはシングルトンパターンを言語でサポートしています。」 面接官「・・・で、その言語でサポートされた機能を使うとシングルトンパターンになるんですよね?」 学生 「はい。シングルトンパターンです。」 面接官「いや、あなたRubyでシングルトンパターンは存在しないといいましたよね。なぜシングルトンパターンになるんですか?」 学生 「でも、シングルトンパターンは存在しないんですよ。」 面接官「いや、存在しないとか問題じゃなくてですね・・・」 学生 「Rubyなら簡単にシングルトンパターン書けますよ。」 面接官「ふざけないでください。それに機能が用意されてるってことは存在するでしょ。だいたい・・・」 学生 「機能は用意されていますが言語でサポートしているんです。だから存在しません。」 面接官「聞いてません。帰って下さい。」 学生 「あれあれ?怒らせていいんですか?シングルトンパターン書きますよ。」 面接官「いいですよ。書いてください。Rubyでシングルトンパターンを。それで満足したら帰って下さい。」 学生 「運がよかったな。Rubyにシングルトンパターンは存在しないようだ。」 面接官「帰れよ。」
2 名前:デフォルトの名無しさん mailto:sage [2012/08/11(土) 12:26:04.75 ] 面白くないし>>1 にそんなもん貼る神経が分からん キモすぎるわ
3 名前:uy mailto:sage [2012/08/11(土) 12:28:09.50 ] >>1 に貼っておけばスレがある限りずっと見れるだろう?
4 名前:uy mailto:sage [2012/08/11(土) 12:32:37.65 ] 993 名前:uy :2012/08/11(土) 12:11:44.29 ほらよ デザインパターンのシングルトン doc.ruby-lang.org/ja/1.9.3/class/Singleton.html rubyのシングルトン doc.ruby-lang.org/ja/1.9.3/doc/spec=2fdef.html#singleton_class はい、"完全"別物です 997 名前:uy :2012/08/11(土) 12:13:37.44 >>995 だーかーら、rubyちょっとは勉強しろよ話にならねーから ヒント:methods.sort.grep(/singleton/)
5 名前:uy mailto:sage [2012/08/11(土) 12:37:30.73 ] はいはい雑魚ざっこ しねしね
6 名前:uy mailto:sage [2012/08/11(土) 12:59:49.00 ] >>4 でさ、マジで聞きたいんだけど、 お前その2つが両方共 シングルトンだと思ってるの?
7 名前:uy [2012/08/11(土) 13:01:39.22 ] なんで知識量で完全に劣ってるのに、そんなに勇猛果敢に挑戦してきて敗北して涙目になろうとするんだろう わけがわからないよ
8 名前:uy mailto:sage [2012/08/11(土) 13:02:12.10 ] >>7 自分のことぐらい自分で分かれw
9 名前:uy [2012/08/11(土) 13:03:18.76 ] はやく謝れよ
10 名前:uy [2012/08/11(土) 13:12:19.06 ] ねえまだ?
11 名前:uy [2012/08/11(土) 13:20:55.28 ] def self.あ end これはシングルトンメソッドです 特異メソッドです
12 名前:uy mailto:sage [2012/08/11(土) 13:34:36.00 ] シングルトンメソッドというのは シングルトンパターンとどういう関連があるのでしょうか?
13 名前:デフォルトの名無しさん [2012/08/11(土) 13:41:46.47 ] ゴミ
14 名前:uy mailto:sage [2012/08/11(土) 13:48:27.68 ] シングルトンメソッドは、 シングルトンパターンという名前の シングルトンを借りただけってことがわかりました。 つまり、目的がぜんぜん違う別物です。 Rubyはもちろんシングルトンパターンがありますが それとは別にシングルトンメソッドがあるということです。
15 名前:デフォルトの名無しさん mailto:sage [2012/08/11(土) 13:50:00.58 ] singletonはインスタンスが複数になりそうな時のが良く使うな。
16 名前:uy [2012/08/11(土) 13:50:16.10 ] よくできましたおめでとうー(≧ヘ≦)
17 名前:uy mailto:sage [2012/08/11(土) 13:52:11.02 ] 書籍「デザインパターン」にも載っていたね。 名前とは反して、インスタンス数を最大いくつって 制限する方法が応用例として書いてあったよ。
18 名前:uy mailto:sage [2012/08/11(土) 13:52:54.07 ] 馬鹿がシングルトンメソッドの話をして 混乱させただけというわけかw さあ、シングルトンパターンの話に戻りましょう。 つまり>>1 です。
19 名前:uy mailto:sage [2012/08/11(土) 13:54:27.80 ] 馬鹿が混乱させたというか、 馬鹿が一人で混乱してただけだろw
20 名前:uy mailto:sage [2012/08/11(土) 13:57:06.71 ] どうやらキチガイも消えたし、 デザインパターンは、考え方であって 実装コードじゃないの意味がやっと理解できたんだろうね。 無知なやつほど、よく噛み付く。
21 名前:uy mailto:sage [2012/08/11(土) 14:07:20.82 ] observerみたいに実装コードを一部巻き込んでるものもあるよ メソッド名がupdateと決まってる
22 名前:uy mailto:sage [2012/08/11(土) 14:09:19.05 ] メソッド名が決まってるだけじゃ 実装コードとは言わんw
23 名前:uy mailto:sage [2012/08/11(土) 14:10:24.11 ] Ruby厨って、インターフェースと 実装を分けて考えるってのが 苦手なのかもしれないね。 インターフェースって言語機能のやつじゃなくて これも考え方の話。
24 名前:デフォルトの名無しさん mailto:sage [2012/08/11(土) 14:49:58.70 ] 無駄に書き込み分けるのってrubyの言語仕様なのかな。
25 名前:uy mailto:sage [2012/08/11(土) 15:18:01.22 ] rubyではこのようにして現在ヒープにある様々なオブジェクト一覧を取得できます p ObjectSpace.count_objects test_uy = 9999999999 ObjectSpace.each_object.map do |m| m end .each do |m| if m.to_s =~ /test_uy/ p m end end こんな事出来る言語ほかにある? 勝てそうな言語ある?
26 名前:デフォルトの名無しさん mailto:sage [2012/08/11(土) 16:05:51.58 ] uyは定期的にRuby関係のスレをageまくる。 そんな事しても、Rubyはそのうちフェードアウトするのでご心配なく。 なぜなら文法が汚すぎるから。
27 名前:uy [2012/08/11(土) 16:23:45.44 ] もともとrubyはperlの代用 一時的にperlがいけなかった場所まで上っているにすぎない
28 名前:uy [2012/08/11(土) 17:02:00.80 ] rubyは日本語資料多いので 英語が苦手なプログラマーにもお勧めです
29 名前:デフォルトの名無しさん mailto:sage [2012/08/11(土) 17:08:49.20 ] スクリプト言語のオブジェクト指向は連想リストと名前空間で十分だろうなと思っている
30 名前:デフォルトの名無しさん [2012/08/11(土) 17:14:16.81 ] 普段の作業はそんなもんだと思う でもそれだけだとスクリプト言語でCのライブラリを書き写して公開するとかが簡単にはできない
31 名前:デフォルトの名無しさん mailto:sage [2012/08/11(土) 17:16:51.40 ] matz,guido,larry,stroustrup,gosling,Hejlsberg,K&R を一ヶ所に閉じ込めれば最強のecmaスクリプトが出来上がると思うの
32 名前:デフォルトの名無しさん mailto:sage [2012/08/11(土) 17:17:59.94 ] >>25 こんなのRubyの専売特許じゃない
33 名前:uy mailto:sage [2012/08/11(土) 18:47:14.71 ] >>25 Java itpro.nikkeibp.co.jp/article/COLUMN/20061102/252525/ > 「localhost:7000/ 」で閲覧できるのはクラスの一覧です。
34 名前:uy mailto:sage [2012/08/11(土) 18:47:55.40 ] こっちのほうがわかりやすいかな。 www.javainthebox.net/laboratory/JavaSE6/managementtools/mngtools.html
35 名前:デフォルトの名無しさん [2012/08/11(土) 18:48:08.19 ] 小学校の頃ヒステリーな奴がいたなぁ
36 名前:デフォルトの名無しさん mailto:sage [2012/08/11(土) 19:09:09.51 ] とりあえずPythonのコード置いときますね foo = 999999 [print(y) for x,y in locals().items() if x == 'foo']
37 名前:デフォルトの名無しさん mailto:sage [2012/08/11(土) 19:51:17.88 ] それ出来ないのって、c/c++だけじゃないのか
38 名前:デフォルトの名無しさん mailto:sage [2012/08/11(土) 20:16:15.88 ] C++の美徳は余計なことをしない、だからな。 そういうことをしたいなら、そういうコードを書いてくださいっていう。 共通の基底クラスすらないし。
39 名前:デフォルトの名無しさん mailto:sage [2012/08/11(土) 21:31:11.39 ] c++で共通の基底クラスを自前で実装しているコードは眺めたことあるな あれは一体、何が嬉しいんだろう
40 名前:デフォルトの名無しさん mailto:sage [2012/08/11(土) 21:40:17.00 ] デバッグがしやすいとかじゃないかな。
41 名前:デフォルトの名無しさん mailto:sage [2012/08/11(土) 21:52:26.98 ] デバッグ用途にutilクラスでも作るのかしら c++にinstanceofみたいな命令あったかな
42 名前:デフォルトの名無しさん mailto:sage [2012/08/11(土) 21:58:13.86 ] 何がしたかったとかC++使いに問うてはいけないと思う
43 名前:デフォルトの名無しさん mailto:sage [2012/08/11(土) 22:21:30.71 ] 〜使いって、はてなやtwitter民だよね リア充臭いから爆発しないかな
44 名前:デフォルトの名無しさん mailto:sage [2012/08/12(日) 01:32:08.05 ] cとmatlabが最強だよ web系記者はアホな記事を書きやがって
45 名前:デフォルトの名無しさん mailto:sage [2012/08/12(日) 01:53:47.56 ] >>31 おい一人鬼籍に入られてる
46 名前:デフォルトの名無しさん mailto:aage [2012/08/12(日) 13:51:52.99 ] LLだの言ってスクリプト言語しか会話できんやつら&言語がキモすぎる。 RubyやPytonなんてLLなんて言わん。単なるスクリプト言語。 もう俺がLLの必須定義を2つ書いておくからお前ら条件満たしてない言語の会話するなよ。 LLの定義 ・C/C++/javaの代替を目指す言語であること。 ・コンパイラが存在すること、VMが充実していること。 この2つは絶対に必要十分条件だ。 低レベルなプログラミングを目指すのに実行環境が用意できん言語とか一発退場だ。 RubyとPythonはこの時点でアウト、スレチ、なんのために存在するの? LLなんて入れるのはJavaScriptしかねえだろ。 VMはほぼどのパソコンにも乗っている。 コンパイラもインテルがHPC向けに作ってる。 サーバーサイドもJavaScriptも浸透してる。 今の世の中、JavaScript以外にLLの選択肢なんてない。 LLの定義を勘違いしてるウンコ君どもはサーバーサイドプログラムのバトルロワイヤルでもやってな。
47 名前:デフォルトの名無しさん mailto:sage [2012/08/12(日) 13:54:27.71 ] うわぁキモいwww お前日本語のLLの定義が嫌なら 書き込みも英語でしろよ
48 名前:デフォルトの名無しさん mailto:aage [2012/08/12(日) 13:59:01.33 ] RubyやPythonは特殊すぎるからスレを分類すべき。 PHPも独立させるべきかな。 あとついでPerlはもう誰も触れないからいっか。
49 名前:デフォルトの名無しさん mailto:sage [2012/08/12(日) 14:03:07.42 ] 次スレはJavaScriptひとりロワイヤルになるのか
50 名前:デフォルトの名無しさん mailto:sage [2012/08/12(日) 14:11:17.83 ] コンパイルしてJavascriptに変換出来る言語処理系リスト この中からバトルロワイヤルします https://github.com/jashkenas/coffee-script/wiki/List-of-languages-that-compile-to-JS
51 名前:デフォルトの名無しさん mailto:aage [2012/08/12(日) 15:11:24.40 ] 他の言語は全部劣ってんだからJavaScriptでいいやん…。
52 名前:デフォルトの名無しさん mailto:sage [2012/08/12(日) 15:14:00.41 ] スクレイピングも出来ない言語はこまる
53 名前:デフォルトの名無しさん mailto:sage [2012/08/12(日) 15:16:12.93 ] >>51 言語として本当にJavascriptが優れてたら >>50 のリストがこんなに一杯にならないと思うよ 直接Javascript書けば済む話だからね
54 名前:デフォルトの名無しさん mailto:sage [2012/08/12(日) 15:21:19.17 ] >>51 試しにコマンドラインから使えるgrepとcurlのサブセットでも書いてみてくれないか(煽りじゃないよ) どんなふうにJavaScriptでPerlやRubyを代替するのか知りたい
55 名前:デフォルトの名無しさん mailto:sage [2012/08/12(日) 16:59:40.67 ] >>36 どちらかというと gc.get_objects() じゃない?
56 名前:uy [2012/08/12(日) 18:22:47.60 ] Xtendが結構やばいよ scala(笑)とは違うのが一目でわかった rubyっぽくかけるJAVAって印象 あれが伸びたら動的言語の地位が危ない気がすると俺様は警告を出してみる
57 名前:デフォルトの名無しさん mailto:sage [2012/08/12(日) 18:33:21.22 ] >>53 お前C言語ディスってんのか
58 名前:デフォルトの名無しさん mailto:sage [2012/08/12(日) 19:09:09.61 ] jsはもう2段階くらい化けないと
59 名前:デフォルトの名無しさん mailto:sage [2012/08/12(日) 20:08:27.37 ] Javaの方向に二段階くらい化けてドカタ専用言語化すると良い
60 名前:デフォルトの名無しさん mailto:sage [2012/08/12(日) 20:19:12.50 ] それがいい。ドカタ専用言語ってことはそれだけ高い生産性と派遣でも理解できる容易さがあるってことだ。 C言語、Java、HTML&JavaScript、PHPやらが現状のドカタ専用言語。 社会で使われないRubyとPythonは生産性の欠片もないんだろうな。
61 名前:デフォルトの名無しさん mailto:sage [2012/08/12(日) 20:27:50.58 ] ドカタは生産性の高い言語を選んでるワケじゃなくて 低能だから習得可能な言語が限られているだけだよ ドカタ専用言語 ≠ 生産性が高い
62 名前:デフォルトの名無しさん mailto:sage [2012/08/12(日) 21:00:52.62 ] で、君の言う生産性の高い言語を使うと、いったい何パーセント生産性があがるわけ? たいして上がらなかったから未だにC言語がシェアNo1なんじゃないの?
63 名前:デフォルトの名無しさん mailto:sage [2012/08/12(日) 21:01:21.06 ] 100歩譲ってrubyがゴミだという事にしても Pythonをバカにする奴はにわか
64 名前:デフォルトの名無しさん mailto:sage [2012/08/12(日) 21:12:14.40 ] つっこみにくい自虐釣りだなあ
65 名前:デフォルトの名無しさん mailto:sage [2012/08/12(日) 21:57:28.35 ] >>62 それ訊いてどうしたいの?どうせ低能の君には使えないのに
66 名前:デフォルトの名無しさん mailto:sage [2012/08/12(日) 22:14:23.14 ] >>54 こんな簡単な問題にレスがつかないのって何で?
67 名前:デフォルトの名無しさん [2012/08/12(日) 22:19:00.80 ] パイソニスタ ルビリストが今日は荒れてるな
68 名前:デフォルトの名無しさん mailto:sage [2012/08/12(日) 22:22:48.79 ] >>65 結局そういう煽りしか出来ねーんじゃん。
69 名前:デフォルトの名無しさん mailto:sage [2012/08/12(日) 22:31:11.68 ] このスレの存在意義って…
70 名前:デフォルトの名無しさん mailto:sage [2012/08/12(日) 22:51:31.69 ] rubyによる他LL公開処刑場だよ スレタイに入ってる言語はruby様に刃向かった為に論破されていく
71 名前:デフォルトの名無しさん mailto:sage [2012/08/12(日) 23:10:27.51 ] >>69 隔離スレ
72 名前:デフォルトの名無しさん mailto:sage [2012/08/12(日) 23:19:31.25 ] >>71 隔離スレとして機能してねーじゃん
73 名前:デフォルトの名無しさん mailto:sage [2012/08/12(日) 23:21:20.74 ] >>69 キチガイをヲチしてニヤニヤするスレです ほーらruby厨がすぐ近くに!
74 名前:デフォルトの名無しさん mailto:sage [2012/08/12(日) 23:26:12.33 ] >>68 自分は>>54 だけど>>66 とは別人(どうでもいいけど) 探してみたらJavaScriptにも雑用向けのライブラリ入りの処理系がちょいちょいあるようだ https://developer.mozilla.org/en-US/docs/JavaScript/Shells そのうちJSDBって処理系だとこう書けるらしい。普通に使えそう www.jsdb.org/cookbook.html
75 名前:デフォルトの名無しさん mailto:sage [2012/08/12(日) 23:35:50.63 ] varってどうにかならんの
76 名前:デフォルトの名無しさん mailto:sage [2012/08/12(日) 23:37:57.29 ] つ coffeescript
77 名前:デフォルトの名無しさん mailto:sage [2012/08/12(日) 23:39:19.32 ] JavaScriptのvarは省略できるけどグローバル変数になるんだったか
78 名前:デフォルトの名無しさん mailto:sage [2012/08/13(月) 10:33:57.60 ] JSはvarがあるから良いんだよ。 動的型言語だから、型を指定する必要は無いけど、 それでも変数のスコープを指定する必要はあるので、 結局変数宣言は省けない。 無理に省くとPythonやRubyみたいに奇妙なことになる。
79 名前:デフォルトの名無しさん mailto:sage [2012/08/13(月) 10:36:32.02 ] JS益々低迷。 www.tiobe.com/index.php/paperinfo/tpci/JavaScript.html
80 名前:デフォルトの名無しさん [2012/08/13(月) 11:11:23.23 ] てかそれだとjsってイテレータ用の変数にまでvarつけなきゃじゃねーの 使われない理由のひとつがまずそこら辺だろう
81 名前:デフォルトの名無しさん [2012/08/13(月) 11:13:52.71 ] グローバル変数のほうが使う機会って少ないんだから 何かオプションつけて宣言するならグローバル変数のほうだよ jsは逆に設計しちゃったのか? ローカル変数は簡単な記述でいいのに
82 名前:デフォルトの名無しさん mailto:sage [2012/08/13(月) 11:56:10.67 ] >>81 一理あるが、それがその場しのぎの屁理屈ではないということを示すためには 「引数も多いから引数も宣言するべきではない」と言い切る覚悟が必要
83 名前:デフォルトの名無しさん mailto:sage [2012/08/13(月) 11:57:16.00 ] ML系の言語、たとえばSML(Standard ML)だと、 代入(名前への値の束縛)にはJSと同様、文の頭に val が付く。 ただし、SMLの場合はあらゆる構文で文が予約語から始まることで 言語全体の構文が簡潔で明解になっている。 また階層的で明確な名前空間があるから、変数にグローバルや ローカルといった区別は不要。トップレベルで代入された変数が、 いわるゆグローバル変数と同等な扱いになる。さらには大規模開発向けに モジュールによって名前空間を明示的に分離できる。 考えるに、元々JSはWebブラウザ上の素朴な簡易スクリプト言語として 設計されたけど、近年では重要度が増して開発規模が増大してきた。 言語設計の想定外の用途に利用が広がったことの弊害ではないかと思う。 結論から言うと、言語設計時に大規模開発を想定していた PythonやRubyといった他のLLと比較して、JSは大規模開発に向いていない。
84 名前:デフォルトの名無しさん mailto:sage [2012/08/13(月) 12:03:30.82 ] そもそもブロックスコープがないjsでローカル変数っていうのもな Cみたいに関数冒頭で宣言する言語なんだろ結局 関数ネストがよく使われる言語だし jsで大規模やろうとするとオレオレのクラス実装や名前空間実装出てきちゃうのはあるな その為のcoffeescriptとかなんだろうけど
85 名前:デフォルトの名無しさん mailto:sage [2012/08/13(月) 12:05:04.84 ] >>82 全然わからんので日本語で頼む
86 名前:デフォルトの名無しさん mailto:sage [2012/08/13(月) 12:06:26.04 ] >>81 グローバルとローカル以外にも、その中間にあたる、ネストスコープとかあるから。 特に最近はクロージャやラムダを多用する方向だから、ネストスコープだらけになる。 もし変数宣言がなければ、の { i=0; { i=1; } } 内側のiと外側のiが同じものなのか違うものなのか区別を付けれない。 ちなみに、Rubyだと同じもの、Pythonだと違うもの、となる。 Ruby方式だと、意図せずに変数名が被ったときにバグるし、 Python方式だと、外のスコープの変数への代入が出来ない。 その点、JSだと、varが付いていれば新しい変数、なければ外のスコープの変数、 だから、使い分けが出来るし、かつ安全で、可読性も高い。
87 名前:デフォルトの名無しさん mailto:sage [2012/08/13(月) 12:13:47.63 ] >>83 言ってることはわからなくも無いが、スコープについて言及しているのであれば、最後の一文、 >PythonやRubyといった他のLLと比較して、JSは大規模開発に向いていない。 これはおかしい。なぜならPythonやRubyのスコープは、JSよりもさらに劣っているから。 特にPythonはスコープ内での代入の有る無しでスコープが切り替わる。 この前代未聞なカス仕様を擁護できる奴は誰もいない。マジでひどい。 3.0でnonlocal追加したときに、このカス仕様も修正すればよかったのに。 nonlocalがあるなら、代入の有る無しでスコープが切り替わるカス仕様は要らないわな。
88 名前:デフォルトの名無しさん mailto:sage [2012/08/13(月) 12:14:01.62 ] >>85 お前それサバンナでも同じこと言い切る覚悟あるの?
89 名前:デフォルトの名無しさん mailto:sage [2012/08/13(月) 12:16:12.13 ] すでにJSはブラウザ上の実装が全世界で広がっているから、 Pyhtonのような思いきって後方互換性を切り捨てるというような 言語仕様の変更や拡張は無理だろうね。 言い換えると、今後とも言語仕様の発展性は見込めない。
90 名前:デフォルトの名無しさん mailto:sage [2012/08/13(月) 12:17:06.52 ] >>86 けどそれだとちょっとした小さな使い捨てスクリプトを書く時に varをつけるかつけないか悩む事にならね? 使い捨てスクリプトとして書いても、後からコピペして別の場所で使う可能性も考えると varつけなきゃいけない気もしてくるし jsのサンプルってみんなそうなってる気がする 俺の気のせいじゃなければjsって 大規模プログラム向いていないし、小規模スクリプトも向いてなくね?
91 名前:デフォルトの名無しさん mailto:sage [2012/08/13(月) 12:36:27.32 ] >>90 外のスコープの変数にアクセスする場合は、つけないし、 そうじゃない場合はつければよい。何も悩む必要は無い。 変数の最適なスコープは常に一つしかないのだから、それに準じればよい。 外のスコープで同名の変数が有るか無いか気を配らなければならないRubyや、 代入の有る無しでスコープが切り替わってしまうPythonなんかに比べれば、 遥かに単純で、考えることは少ない。 スコープ以外のことに関してで、RubyやPythonを持ち上げて、JSをこき下ろす事は結構だけど、 ことスコープに関しては、それは無理。 ただ、JSのスコープの仕様が特に優れているというわけでもないが。 RubyとPython、特にPythonの仕様が異端で、どうかしているってだけの話なので。 JSのスコープのやり方は他の言語でも見られるスタンダードなものだし、 当たり前のことを当たり前にやってるだけ。 難点を挙げるとすれば、ブロックスコープが無いことか。まぁRubyやPythonにも無いんだけどね。
92 名前:デフォルトの名無しさん mailto:sage [2012/08/13(月) 12:44:16.41 ] ただ単にvarかくのが面倒くさいって話だよ 変数宣言が必要になる時点で小さなスクリプトを書くのにjsは向いていない かといって >結論から言うと、言語設計時に大規模開発を想定していた >PythonやRubyといった他のLLと比較して、JSは大規模開発に向いていない。 こういう事情もあるから大規模開発にも向いていない あ、ゴミか^^; rubyを知らない知ったかゴミカス野朗みたいだけど、rubyにブロックスコープはある
93 名前:デフォルトの名無しさん mailto:sage [2012/08/13(月) 12:48:57.94 ] >rubyを知らない知ったかゴミカス野朗みたいだけど、rubyにブロックスコープはある 他の言語で言うところのブロックスコープだ。
94 名前:デフォルトの名無しさん mailto:sage [2012/08/13(月) 13:18:03.83 ] 君の知識レベルで他言語ディスるの無理
95 名前:デフォルトの名無しさん mailto:sage [2012/08/13(月) 13:46:22.71 ] 初心者死ね
96 名前:デフォルトの名無しさん mailto:sage [2012/08/13(月) 16:52:09.34 ] hirata-create.toypark.in
97 名前:デフォルトの名無しさん mailto:sage [2012/08/13(月) 17:28:35.80 ] .NET,ASP,PHP,javaこの辺の言語を何れもやれって会社は大した技術者が居ない糞会社
98 名前:デフォルトの名無しさん mailto:sage [2012/08/14(火) 07:24:16.04 ] Lispのスコープも最初は問題があったがSchemeで解決した Smalltalkの影響を受けた言語は今でもスコープがおかしい
99 名前:デフォルトの名無しさん mailto:sage [2012/08/14(火) 07:55:53.88 ] >>98 Prologにスコープはないな。
100 名前:デフォルトの名無しさん mailto:sage [2012/08/14(火) 08:14:25.83 ] >>99 繰り返しは?
101 名前:デフォルトの名無しさん mailto:sage [2012/08/14(火) 08:53:56.63 ] Prologにはブロックが無いよな Cでも if (foo && bar && ……) return 1; のように書ければ{}はほぼ無くなるし
102 名前:デフォルトの名無しさん mailto:sage [2012/08/14(火) 08:54:26.78 ] スコープについてはRubyもPythonもPHP大きな差はないかな。 ブロックスコープなのはPerlだけでしょ。 それでもJSの場合、名前空間もなければClassもないので、一番分かりづらいというのはあるね。
103 名前:デフォルトの名無しさん mailto:sage [2012/08/14(火) 09:04:12.85 ] >>98 どうおかしいの?
104 名前:デフォルトの名無しさん mailto:sage [2012/08/14(火) 09:16:09.79 ] >>100 繰り返し構文がないのだから、「ない」と言い切っていいんじゃないか。 仕様が「繰り返せ」の場合は再帰で表現するのだが、これも、繰り返しとも 読める、くらいの解釈でいい。節と節がバラバラに主張していて先ずその主張の 核心を「宣言的に」読み取るのがPrologなのではないか。仕様の繰り返しを陽に するには、述語名で「・・・を繰り返す」とはっきり述べるのが一番よいだろう。
105 名前:デフォルトの名無しさん mailto:sage [2012/08/14(火) 09:33:09.22 ] >>103 RubyもPythonも大きな差はないとか言われてもスルーしてる時点でおかしいだろ
106 名前:デフォルトの名無しさん mailto:sage [2012/08/14(火) 09:44:51.21 ] さらっと流されてるが、>>86 とか>>91 のJSに関する説明はちょっとおかしいよね? {i=0; {var i=1;} } とかしてもJSにはブロックスコープは無いから外側のiと内側のiは同じものになってしまう var宣言を単純にブロックの内側と外側の変数を区別するものには使えない JSでブロックスコープ的なものが使いたいときはブロックの代わりに無名関数でくくらないと {i=0; (function(){ var i=1; })(); }
107 名前:デフォルトの名無しさん mailto:sage [2012/08/14(火) 10:20:58.13 ] あーそれは擬似コードだから。 PythonとRubyとJSでそれぞれ記述が違うので、 {{}}で、ネストスコープ一般を表現したってだけ。
108 名前:デフォルトの名無しさん mailto:sage [2012/08/14(火) 10:28:50.69 ] JSのスコープのネストは関数スコープで作る前提の話なのか たしかにブロックのスコープとは書いてないね
109 名前:デフォルトの名無しさん mailto:sage [2012/08/14(火) 10:59:07.14 ] うんこな言語集めてどっちがマシとかマジうけるわ マトモな言語使いたかったら静的型付け関数型言語でも使ってろ
110 名前:デフォルトの名無しさん mailto:sage [2012/08/14(火) 11:15:01.64 ] >>109 スレタイ嫁
111 名前:デフォルトの名無しさん mailto:sage [2012/08/14(火) 11:20:59.96 ] Javascriptを読み書きしてると function() がゲシュタルト崩壊する
112 名前:デフォルトの名無しさん mailto:sage [2012/08/14(火) 12:17:19.67 ] Perlよりマシといえば大抵のことが許される雰囲気があった 実際にはPerlに勝ったとか負けたとか考えない言語のほうがマシだった
113 名前:デフォルトの名無しさん mailto:sage [2012/08/14(火) 16:44:44.54 ] javascriptとsmalltalkのうんこさはそっくり
114 名前:デフォルトの名無しさん mailto:sage [2012/08/14(火) 22:46:09.32 ] # C 1 for() 2 { 3 コード 4 } # ruby 1 map do 2 コード 3 end do 〜 endより { } のほうが、読みやすいことが分かった
115 名前:デフォルトの名無しさん mailto:sage [2012/08/14(火) 22:52:33.16 ] >>113 smalltalk風の開発環境でDOMやhtml5を弄れるruby処理系なんてあれば最強じゃね?
116 名前:デフォルトの名無しさん mailto:sage [2012/08/14(火) 22:58:15.05 ] Smalltalk処理系を流用した Ruby処理系(MagLev)ならあったが……
117 名前:デフォルトの名無しさん mailto:sage [2012/08/14(火) 23:31:05.55 ] >>114 ハア? irb(main):001:0> [1,2,3].each { |x| p x } 1 2 3 => [1, 2, 3]
118 名前:デフォルトの名無しさん mailto:sage [2012/08/15(水) 00:44:10.32 ] codejamってjavascriptだけハブられてるのね PHPからclojureまであるのに
119 名前:デフォルトの名無しさん mailto:sage [2012/08/15(水) 07:29:06.13 ] JSの良さは、熱心なファンがいないってところでもあるからな。 勝手に広まって勝手に定着したから。
120 名前:デフォルトの名無しさん mailto:sage [2012/08/15(水) 08:37:53.53 ] Javascriptのファンなんて希少種だろ 他言語からJavascriptへコンパイルするのが流行り 直接Javascript書くのは低能
121 名前:デフォルトの名無しさん mailto:sage [2012/08/15(水) 09:00:24.91 ] >>120 定着しないのが特徴かな。実行環境が不安定過ぎた。 一時熱中して、そして去っていく。だから、プログラマ数も増えない。
122 名前:デフォルトの名無しさん mailto:sage [2012/08/15(水) 09:31:59.66 ] >>120 今後は、これまでの軽量言語を抑えて最大になると思うけど githubは既にjsの登録数がrubyを越えている そして、熱心なファンは海外ではninjaだとか言われてるみたいだぞ
123 名前:デフォルトの名無しさん mailto:sage [2012/08/15(水) 09:42:35.15 ] >>121 TIOBE INDEX がそれを物語っているね。みんなJSはもっと 使われてるでしょって言う。使ってみた人の数は多いが、 現時点での活性はやはり検索数のようなものに出てしまう。
124 名前:デフォルトの名無しさん [2012/08/15(水) 11:16:18.20 ] jsがどこで流行ってるのかわからない あれがブラウザ以外で使えると思ってる子はちょっとな ブラウザ用に作られてる言語だからそれを外に引っ張り出してきても コーディング自体が楽になるようなシンタックスシュガー系の拡張は何もやってくれないと思うよ そんな言語で頑張りたければどうぞ
125 名前:デフォルトの名無しさん mailto:sage [2012/08/15(水) 11:26:01.35 ] >>124 Ajaxは流行ったと思うけど、それでもダメだった。きびしいですね。
126 名前:デフォルトの名無しさん mailto:sage [2012/08/15(水) 11:29:37.61 ] ここはどんだけガラパゴスですか
127 名前:デフォルトの名無しさん mailto:sage [2012/08/15(水) 11:33:37.84 ] どうであれ、ブラウザでは生き残るから、 流行り廃りに関係ない、息の長い言語になるだろうね。
128 名前:デフォルトの名無しさん mailto:sage [2012/08/15(水) 11:39:35.25 ] >>126 www.tiobe.com/index.php/paperinfo/tpci/JavaScript.html
129 名前:デフォルトの名無しさん [2012/08/15(水) 12:01:49.91 ] まあブラウザに多言語乗っける流れがくるよ その時がjsの終わり
130 名前:デフォルトの名無しさん mailto:sage [2012/08/15(水) 12:17:02.89 ] Googleが乗せようっていうとMSは嫌だって言うだろうし、 MSが乗せようっていうとAppleが嫌だって言うだろうし、 なかなか標準の規格に入らないんじゃないかね。 別に規格外でも、互換性糞食らえで乗せたきゃ勝手に 乗せればよいんだが、特定のブラウザでしか動かないのでは 普及するわけ無いし。 やっぱり足並み揃えない取って事で、 新バージョンのJSが乗っかって終わりでしょう。
131 名前:デフォルトの名無しさん [2012/08/15(水) 12:26:28.68 ] >>129 今以上にカオスになるな クロスブラウザ対応不可能になる
132 名前:uy [2012/08/15(水) 13:14:53.16 ] これから苦労してjsをマシな言語にさせていくよりは他言語入れたほうが早い
133 名前:デフォルトの名無しさん mailto:sage [2012/08/15(水) 13:16:51.90 ] たとえそうでも、他の言語をねじ込むのは無理。 Appleが提案してもGoogleとMSは反対する。
134 名前:uy [2012/08/15(水) 13:30:47.00 ] ruby2.0はChromeで動く可能性が高い
135 名前:デフォルトの名無しさん mailto:sage [2012/08/15(水) 13:40:46.02 ] はぁ、NaCLね。はいはい
136 名前:デフォルトの名無しさん mailto:sage [2012/08/15(水) 14:10:15.96 ] またuyがRuby関係のスレをage荒らしてるな。 議論に負けるといつもこれだ。
137 名前:uy mailto:sage [2012/08/15(水) 14:18:24.05 ] IronRubyは存在する IronJavaScriptは存在しない
138 名前:デフォルトの名無しさん mailto:sage [2012/08/15(水) 14:23:07.71 ] .NetならC#だろ。バカじゃね。 同様にブラウザで動かすならJSだがな。 RubyはPythonともろに食い合う不幸な運命。
139 名前:uy mailto:sage [2012/08/15(水) 14:25:59.58 ] えっ ynupl.com/reddam/archives/155 こういう使い方だと思うけど なんだと思った? Scala(笑)がJavaのクラスを継承できます(キリッ)とかいってたけど それと同じ
140 名前:デフォルトの名無しさん mailto:sage [2012/08/15(水) 14:33:23.30 ] まずさ、Rubyを普及させたいのなら、何かツールを作ったら? C言語はOSを作るために作った言語だし、 JSはネスケ社がブラウザ作る片手間に作った言語だし、 JavaはJavaVMと一蓮托生だし、 C#は.Netのために作った言語。 だからさ、Rubyも普及させたいのなら、marzに頼んで、 社会の基盤になってしまうような、革新的超便利ツール作ってもらって、 その組み込みスクリプト言語としてRuby乗せれば? 言語だけ作って後はポイ投げってのはダメ言語の典型なんだよ。 むしろツールの作成を本業とし、そっちの普及を目的とすべし。 言語開発なんかは、必要に迫られて、傍らでするぐらいでよい。 普及してて人気のある言語はほとんどそう。 ツールに引っ付いて勝手に広まった。
141 名前:デフォルトの名無しさん mailto:sage [2012/08/15(水) 14:36:53.30 ] Rにくっついて広まるかも。 shop.oreilly.com/product/0636920022626.do
142 名前:デフォルトの名無しさん mailto:sage [2012/08/15(水) 14:40:36.21 ] >>137 えっ ja.wikipedia.org/wiki/JScript#JScript_.NET
143 名前:デフォルトの名無しさん mailto:sage [2012/08/15(水) 14:43:17.24 ] >>140 元がPerlに不満を持ったMatzが書き上げたオレ言語がRubyなので 実際今でも一番多い使い方が たぶんシェルスクリプト・Perl・make辺りの代替でしょ プロダクト未満の小物が本来の主戦場 ただ、何か知らんが一部のハッカーの琴線に触れるものがあるらしく RailsやらRedmineやらMetasploitやら 一線級のソフトも出てきた、というのがここ5年ぐらいの話
144 名前:デフォルトの名無しさん [2012/08/15(水) 15:07:36.87 ] (*´・∀・)(・∀・`*)ヘー
145 名前:uy mailto:sage [2012/08/15(水) 15:10:21.84 ] Rubyはまだまだ歴史が浅い
146 名前:デフォルトの名無しさん mailto:sage [2012/08/15(水) 15:17:03.87 ] Rubyはなんでdoに|つけるの?
147 名前:デフォルトの名無しさん mailto:sage [2012/08/15(水) 15:19:13.66 ] たしかJavaと同時期のリリースだったよね。
148 名前:uy mailto:sage [2012/08/15(水) 15:23:41.39 ] どうしてこんなに差がついたのか。
149 名前:デフォルトの名無しさん mailto:sage [2012/08/15(水) 15:39:44.61 ] >>146 パイプでブロック引数をはさまないと、 それがブロック引数なのか、 単に式としてそこにあるのかが区別できない
150 名前:uy [2012/08/15(水) 15:42:23.84 ] クソ仕様ですみませんwww
151 名前:デフォルトの名無しさん mailto:sage [2012/08/15(水) 15:46:24.88 ] >>149 pythonみたいな for t in list: みたいにできなかったの? 絶対にこっちのほうがわかりやすいと思うんだけど||でかこったら特殊な演算やってそうじゃん
152 名前:uy mailto:sage [2012/08/15(水) 15:48:47.94 ] >ただ、何か知らんが一部のハッカーの琴線に触れるものがあるらしく ていうか、何で分からないのか分からない 最初から最後までオブジェクトで出来てる時点でさ if true 5 end.times do | n | p n end こう、IFの戻り値さえそのままメソッドチェインで使えるんだけど
153 名前:デフォルトの名無しさん mailto:sage [2012/08/15(水) 15:49:51.63 ] >>151 for t in list; end という構文も最初から存在していますけど、なにか?
154 名前:デフォルトの名無しさん mailto:sage [2012/08/15(水) 15:54:31.43 ] >>152 Rubyにおいて if や case といった条件分岐は 文(statement)ではなく式(expression)だから これはSmalltalkも同じ 手続き型言語として見れば異端だけど、 関数型言語として考えれば実に自然なプログラミングができる
155 名前:デフォルトの名無しさん mailto:sage [2012/08/15(水) 16:03:00.24 ] >>153 なんであんまりrubyではその構文使わずに使わずにeach doするの?
156 名前:uy mailto:sage [2012/08/15(水) 16:22:03.27 ] for文()よりもeachの方がメソッドチェインできて最強だからだよ
157 名前:uy [2012/08/15(水) 16:23:28.48 ] メソッドチェインってなにがいいの?
158 名前:153 mailto:sage [2012/08/15(水) 16:26:13.52 ] >>155 おそらく列挙オブジェクトへブロック付きメッセージを送るという Smalltalk流のオブジェクト指向スタイルが好まれるからだと思う for構文は手続き型スタイルであり、PerlやPythonから移ってきたばかりの Ruby初心者は、最初for構文を使うけど、Rubyを深く知るにに従って (forよりも柔軟な)オブジェクト指向スタイル、つまりRubyらしい プログラミングスタイルを身につけていく
159 名前:uy mailto:sage [2012/08/15(水) 16:39:40.59 ] メソッドチェインの有用性から説明しないとダメな奴がいるの?
160 名前:153 mailto:sage [2012/08/15(水) 16:42:30.15 ] >>157 メソッドチェインに関しては過去スレで話題になったけど、 最大の利点は左から右へと流れる、自然に読み取れるコードが 書けることだと思う
161 名前:デフォルトの名無しさん mailto:sage [2012/08/15(水) 16:42:44.79 ] 柔軟な例とかない?
162 名前:uy mailto:sage [2012/08/15(水) 16:52:58.51 ] rubyで一番よく使うのはmap、これは戻り値に配列を返す 普通に書いたら p [1,2,3].map { |x| x*2 } # => [2, 4, 6] だけど、メソッド(イテレータ)チェインする事によって、本来配列を返さない each_with_indexなども p [1,2,3].each_with_index { |x,i| x*(2+i) } # => [1, 2, 3] mapを置く事による戻り値を変えられる p [1,2,3].each_with_index.map { |x,i| x*(2+i) } # => [2, 6, 12] これをforで書くとこう s = [] i = 0 for x in [1,2,3] s << x*(2+i) i += 1 end p s for文とイテレータじゃ力の差が有りすぎて異論の余地すらない
163 名前:153 mailto:sage [2012/08/15(水) 17:05:47.91 ] >>161 たとえば「あるリストを選別してソートして計算して書き出す」という お題の場合、以下のような破壊的代入の無い流れるようなコードが書ける list.select { .... }.sort { .... }.map { .... }.each do; .... end もしRubyにfor構文しか存在しなければ、一時変数をゴリゴリと更新していく ループ処理を並べた典型的な手続き型コードになる
164 名前:uy [2012/08/15(水) 17:19:49.47 ] つまり、書き方がちょっと変わっただけである。
165 名前:uy [2012/08/15(水) 17:21:52.02 ] 実際は list.select { hoge hoge hoge hoge hoge hoge }.sort { hoge hoge hoge hoge hoge hoge }.map { hoge hoge hoge hoge hoge hoge }.each do; hoge hoge hoge hoge end となって見難いのである。 だから縦に流れるようなコードにしたほうがいい。 list.select { hoge hoge hoge hoge hoge hoge } list.sort { hoge hoge hoge hoge hoge hoge } list.map { hoge hoge hoge hoge hoge hoge } list.each do; hoge hoge hoge hoge end
166 名前:153 mailto:sage [2012/08/15(水) 17:28:12.26 ] >>165 文が1行で収まらなければ、改行とインデントを使って 上から下へ流れるコードを書けばいい 工夫すれば、実用的なプログラムでもすべて80桁以内になるよ list.select { hoge hoge hoge }.sort { hoge hoge hoge }.map { hoge hoge hoge }.each do hoge hoge hoge end
167 名前:デフォルトの名無しさん [2012/08/15(水) 17:28:58.74 ] >>> [val*(2+idx) for idx,val in enumerate(sorted([3,2,1]))] [2, 6, 12] メソッド入れ子でもいいんちゃう?
168 名前:153 mailto:sage [2012/08/15(水) 17:44:23.49 ] >>167 はPyhon自慢のリスト内包表記だけど、 同じ計算は、Rubyであれば(>>162 を少しだけいじって) 左から右へと流れるコードになる irb(main):001:0> [3,2,1].sort.each_with_index.map { |x, i| x * (2 + i) } => [2, 6, 12] さて、どちらが読みやすいと感じるかな?
169 名前:デフォルトの名無しさん mailto:sage [2012/08/15(水) 17:53:53.31 ] 読みやすさで言えば、一時変数を用意するやり方だろう。
170 名前:デフォルトの名無しさん mailto:sage [2012/08/15(水) 17:58:45.01 ] それはペチパー君が慣れてないだけです
171 名前:デフォルトの名無しさん mailto:sage [2012/08/15(水) 18:05:30.28 ] 慣れ言い出したら、それで全て解決だな。
172 名前:デフォルトの名無しさん mailto:sage [2012/08/15(水) 18:07:20.33 ] 自転車こぐのも慣れが必要だよ
173 名前:デフォルトの名無しさん mailto:sage [2012/08/15(水) 18:08:42.47 ] >>168 どうみてもPythonのほうが読みやすい
174 名前:デフォルトの名無しさん [2012/08/15(水) 18:15:01.60 ] .map{|x| x*2}. みたいに続いていく構文が若干分かりにくいんだよね {}で囲まれてると関数に見えるし ||も引数なのかなんなのか謎だし まあ慣れなんだろうけど
175 名前:153 mailto:sage [2012/08/15(水) 18:21:38.11 ] >>173 >>168 のRubyコードを第三者へ説明しようとしたら リスト定数をソートしてから添字付きで列挙し、各要素の計算値で写像する と、左から右へと流れるコードの構成に沿って記述できる これはトイプログラムに限らず、>>166 のような長く大きなコードでも同じ さて、>>167 を第三者へ説明しようとすれば、どんな文章になるかな?
176 名前:153 mailto:sage [2012/08/15(水) 18:25:51.31 ] >>174 関数に見えるというか、無名関数という関数そのものだよ lambdaのような予約語が省略されているだけ
177 名前:デフォルトの名無しさん mailto:sage [2012/08/15(水) 18:40:16.04 ] だから、分かりやすいのがよいなら、 一時変数用意すればよいだろ。何の説明も要らなくなるよ。
178 名前:uy mailto:sage [2012/08/15(水) 18:46:19.62 ] はーーー ばぐった Rubyごみかす
179 名前:デフォルトの名無しさん mailto:sage [2012/08/15(水) 18:46:32.63 ] 短くて分かりやすいのがベストだよね!
180 名前:デフォルトの名無しさん mailto:sage [2012/08/15(水) 18:58:34.52 ] Smalltalkの #(1 2 3) collect: [:x | x*2] って書き方をパクってこなければ どっちかっていうとPythonっぽいこっちの文法のままだったんだろうな。きっと。 do [1,2,3].map using x; x*2 end
181 名前:153 mailto:sage [2012/08/15(水) 19:14:29.25 ] >>177 一時変数は悪ではないし、否定しないよ 実際に実用的なプログラムでは、あまりに長いメソッドチェーンを 途中で切って、間に一時変数を入れることがある ただし、一度代入したら二度と更新しない 問題は変数の「破壊的代入」 たとえば>>162 の最後にあるforを使った手続き型スタイルでは、 最初にリスト変数とループ変数に初期値を代入した後、 forループ内でこれら変数をゴリゴリと更新(破壊的に代入)している これが可読性の悪化とコード品質の低下をまねく要因 なお破壊的代入の無さは、専門用語だと「参照透明性」と呼ばれる
182 名前:デフォルトの名無しさん mailto:sage [2012/08/15(水) 19:25:04.95 ] 破壊代入が嫌いなら、手続き型言語の世界から去ってもらうしかないね。 表面のコードに表れて無いだけで、結局mapの中で破壊代入しているのだから、一緒だよ。 書いてある場所が違うだけで、本質的な動作が同じなのだから、危険度も同じ。
183 名前:uy mailto:sage [2012/08/15(水) 19:34:44.27 ] ライブラリや言語処理系側に破壊的操作をさせるのと、 自分で直に破壊的操作を行う処理を書くのは全然危険度が違うよ
184 名前:デフォルトの名無しさん mailto:sage [2012/08/15(水) 19:39:26.70 ] だったら、関数型言語の参照透過性のメリットなど何も無いって事だな。 破壊的代入は全てライブラリにやってもらえば安全なのだから。
185 名前:uy mailto:sage [2012/08/15(水) 19:43:25.26 ] 頭悪いね
186 名前:デフォルトの名無しさん mailto:sage [2012/08/15(水) 19:45:30.24 ] >>114 ブロック内の処理が一つの場合は{}で複数処理はdo end がいいってじっちゃが言ってた
187 名前:uy [2012/08/15(水) 20:20:56.63 ] 長く書くとわかりやすいって考える奴居るよなw 数学でも長い式を 一時変数に代入するのにな。
188 名前:デフォルトの名無しさん [2012/08/15(水) 20:22:00.55 ] do | o | ってやったら外人に笑われた なんで?
189 名前:uy mailto:sage [2012/08/15(水) 20:38:54.52 ] キチガイなんじゃね
190 名前:デフォルトの名無しさん mailto:sage [2012/08/15(水) 21:01:43.68 ] >>188 lolはlaugh out loudlyで(笑)と同じように使われるから、笑えよってことだね。英語圏のコミュニティ行くとよくあるよ。
191 名前:デフォルトの名無しさん mailto:sage [2012/08/15(水) 21:10:40.01 ] 内包表記が読み難いとか言ってる奴は 数学の素養が無いって自己紹介してることに気付いてないの? かっこわるいから控えた方が良いよ
192 名前:デフォルトの名無しさん mailto:sage [2012/08/15(水) 21:13:01.31 ] 集合のアレだと気づくのに半年かかったお
193 名前:uy [2012/08/15(水) 21:19:39.91 ] >>191 でも、実際に読みづらいんだろう?
194 名前:デフォルトの名無しさん mailto:sage [2012/08/15(水) 21:27:25.15 ] ブロック記法は任意の(ただし関数引数は一つだけの) 高階関数を記述できる分だけ汎用性があるが、 mapとかfilterとかの組み合わせに関してはリスト内包表記のほうが簡潔になりうる 細かい優劣はあれど、matzは内包表記みたいな専用構文を用意するのを嫌った PythonあるいはHaskellその他のように、頻出する記述に糖衣構文を与えるのは間違っていないと思うが、 Rubyはそれよりもブロック構文による均質性を採ったという事
195 名前:デフォルトの名無しさん mailto:sage [2012/08/15(水) 21:40:16.38 ] なんでSmalltlakみたく{ |x| x*2 } をファーストクラスにしなかったの? そしたらもっと簡潔にも均質にもなったのに。
196 名前:デフォルトの名無しさん mailto:sage [2012/08/15(水) 21:50:52.54 ] Pythonの内包表記はプログラミング独特の手続き的なところをない交ぜにしてるから 数学の内包表記は読みやすいからPythonのも読みやすいみたいな論法はちょっとしっくり来ないな
197 名前:153 mailto:sage [2012/08/15(水) 21:57:54.67 ] >>191 自分は内包表記が読み難いとは思わないね ただしPythonの場合、局所宣言またはクロージャがないから せっかくの内包表記構文が台無しになっている 過去スレ19,20で議論になったコードを以下に示す ==== Haskell ==== data Option a = None | Some a ys = [fn x | x <- xs] where fn x = let h = if is_first_page x then generate_header else None b = generate_body x f = if is_last_page x then generate_footer else None in (h, b, f) Haskellには局所宣言としてwhere節があるから、関数fnを定義することで 内包表記を含む式をトップダウンに数学っぽく記述できる ==== Python ==== ys = (Document.new(h,b,f) for x in xs for h in [generate_header() if x.is_first_page else None] for b in [generate_body(x)] for f in [generate_footer() if x.is_last_page else None]) このPythonコードが何をしているかどうか、はたして一目で把握できるかな?
198 名前:153 mailto:sage [2012/08/15(水) 22:01:18.03 ] 参考として、>>197 に関するRubyのコードを過去スレからコピペする ==== Ruby ==== ys = xs.map { |x| h = if x.first_page? then generate_header else nil end b = generate_body x f = if x.last_page? then generate_footer else nil end Document.new h, b, f } Rubyには内包表記構文は無いけれど、普通に書ける(実に初歩的なコードだ)
199 名前:uy mailto:sage [2012/08/15(水) 22:05:42.94 ] いやそこは h = generate_header if x.first_page? b = generate_body x f = generate_footer if x.last_page? だろ falseだろうとローカル変数は宣言されるから
200 名前:デフォルトの名無しさん mailto:sage [2012/08/15(水) 22:07:42.58 ] >>197 HaskellもPythonも使えるから どっちも楽勝で読める あとHaskellならそのケースだと内包表記じゃなくて map fn xs だな 短いし読み易い
201 名前:デフォルトの名無しさん mailto:sage [2012/08/15(水) 22:08:07.08 ] >>195 確かGroobyはそういう仕様だったから、整合性は何とかなるんだろうけど 実際問題として誰も困ってないんじゃないの ブロックがリテラルとして書けたとしても、どっちみちブロック付きメソッド呼び出しの時は ブロックを特別扱いする構文を認めることになるから、特段簡潔になるというほどでも…… いわゆる無名関数を直接操作したいならブロック(Procオブジェクト)ではなくてlambdaが適当で lambdaに関しては1.9から糖衣構文が入った
202 名前:uy mailto:sage [2012/08/15(水) 22:09:14.11 ] Rubyは色々考えながら作っていってる感はあるよね 現在のrubyに>>197 こういうの導入すれば、開発効率は一時的に上がるけど 低脳プログラマは優秀なプログラマが管理してやらないと 意味不明なコード書いて自滅するから 全体パフォーマンスを見れば入れるべきでないものもある
203 名前:デフォルトの名無しさん mailto:sage [2012/08/15(水) 22:13:47.89 ] >>197 どっちにしても、酷いコードだ。
204 名前:デフォルトの名無しさん mailto:sage [2012/08/15(水) 22:16:27.85 ] メソッドチェインって書いた後から付け足す事って結構あるからね イテレータやループの書き方は統一されてたほうが良い
205 名前:デフォルトの名無しさん mailto:sage [2012/08/15(水) 22:17:50.65 ] この辺りはある程度個人の感性だけど 内包表記が多段ネストし始めるのはさすがに勘弁して下さいっていうか 読むのも書くのも面倒じゃない? Haskellはまだwhere節で後ろに押しこみ直すことでトップダウンに読めるから 場合によっては許せるかなあと。少なくとも適切な変数名が条件w
206 名前:デフォルトの名無しさん mailto:sage [2012/08/15(水) 22:22:51.19 ] 内包表記が活きるのはイテレートする変数が 複数になったときじゃねーの f n = [(x,y,z) | x <- [1..n], y <- [1..n], z <- [1..n], x^2 + y^2 == z^2]
207 名前:デフォルトの名無しさん mailto:sage [2012/08/15(水) 22:31:21.07 ] >>201 どうして? ブロックがファーストクラスなら yield や &block なんて小細工いらなくなるし、 複数のブロックを引数として簡単に渡せるから表現の幅も広がるし、 機能も意味もずっと簡潔になると思うよ。
208 名前:デフォルトの名無しさん mailto:sage [2012/08/15(水) 22:32:31.13 ] 内包表記とか参考演算子なみのウンコやん。 Pythonってそんな誰得非効率機能が特徴なの?ウンコやん。 ついでにRubyもウンコやん。 ラムダ式とかevalが使えんコンパイル言語がなんちゃってevalを実装してるようにしか見えん。ウンコやん。
209 名前:デフォルトの名無しさん mailto:sage [2012/08/15(水) 22:42:15.44 ] >>207 もっと具体的に実現例を出してもらわないと よく分からない
210 名前:デフォルトの名無しさん mailto:sage [2012/08/15(水) 22:48:10.24 ] とりあえずsmalltalkは演算子優先順位すらないクソ言語だから このスレで議論する価値無い Java以下のウンコの中のウンコ
211 名前:デフォルトの名無しさん mailto:sage [2012/08/15(水) 22:52:50.85 ] >>197 をPythonで(RubyやHaskellのコード相当で)書くならごく素直に def preprocess(x): h = generate_header() if x.is_first_page else None b = generate_body(x) f = generate_fotter() if x.is_last_page else None return h, b, f ys = [Document(preprocess(x)) for x in xs] じゃないかと。まずリスト内包で書くことはない
212 名前:uy mailto:sage [2012/08/15(水) 22:53:01.74 ] 初心者は消えろ
213 名前:デフォルトの名無しさん mailto:sage [2012/08/15(水) 23:10:42.33 ] みんな消えたか…
214 名前:デフォルトの名無しさん mailto:sage [2012/08/15(水) 23:59:55.09 ] >>209 - 複数のブロックをとるメソッド呼び出しを簡潔に書ける [1,2,3].find(lambda{ :not_found }){ |e| e>5 } [1,2,3].find { :not_found }, { |e| e>5 } - ブロックをレシーバーにできる lambda{ :do_something }.should_not raise_error { :do_something }.should_not raise_error - ブロックをとるメソッドの仮引数に前置&が不要になる def meth(&block); other(&block) end def meth(block); other(block) end
215 名前:デフォルトの名無しさん mailto:sage [2012/08/16(木) 00:05:36.35 ] -> をタイプする手間すら億劫っていうのは ちょっと病気ですよ Rubyってそういう言語かもしれないけど
216 名前:デフォルトの名無しさん mailto:sage [2012/08/16(木) 00:06:27.09 ] >>204 付け足す事もあるけど、途中の処理の内容を変えたり、途中で処理を分岐する事もあるよね?その場合、一時変数を使ってる方がやりやすくない?
217 名前:デフォルトの名無しさん mailto:sage [2012/08/16(木) 00:11:36.22 ] >>143 Perl代替で一番成功してるのはPythonじゃない? Rubyの場合、作者の思惑はともかく、現状はほぼRails専用と言っていいのでは。 Railsを便利に使うためのツールはいろいろあるけど、OSだったりミドルウェアから使うようなRuby製のツールってPerlやPythonと比べて全然無いでしょう。
218 名前:デフォルトの名無しさん mailto:sage [2012/08/16(木) 00:18:16.38 ] >>214 >- 複数のブロックをとるメソッド呼び出しを簡潔に書ける そういう部分でメソッド引数括弧の省略を使うのは筋悪でしょ 現在のRubyのコーディングスタイルでも、引数がある場合は原則省略しないのが主流 あるいは括弧を省略しない場合、確かにルールは単純だけど見栄えがよろしくない hoge({|x| p x }) そしてブロック構文の仮定として 大部分の高階関数は関数引数を一つしか取らないという 観察結果があるわけだから、一つに特化した構文でも十分
219 名前:デフォルトの名無しさん mailto:sage [2012/08/16(木) 00:35:02.92 ] >>217 ここで小物と表現していたのは、ツールと呼ぶのもおこがましいほど小さい 日常の雑務を処理するような小規模スクリプトだよ。ワンライナーも含む 例えばRubyに大量に残ってるPerl譲りの特殊変数とか、 外部コマンドのためにリテラルとか、インタプリタの変な起動引数とか、 色々あるが、おそらく全部そういう小物のためのもの
220 名前:デフォルトの名無しさん mailto:sage [2012/08/16(木) 00:43:48.75 ] >>218 しかし関数型言語で圧倒的に利用頻度の高い 関数合成は関数引数を複数取る関数なんだよね (.) :: (b -> c) -> (a -> b) -> a -> c Rubyではブロックとブロックを合成して 新しいブロックを作りたくなることは無いの? xs.map(f).map(g).map(h) を xs.map(f.g.h) と書けたら良いと思わない?
221 名前:uy mailto:sage [2012/08/16(木) 01:00:12.30 ] 俺はrubi使いだけど、ちょっとrubyの考えは改めようかな 言語が複雑なことやってるから、実装もバグ取るのも大変なんだろうし 俺が普通じゃないコード書いてるからなんだけど バグ多すぎてワロタwwww 今日だけで2個踏んだったwwww なんでだろ、世界でずいぶん使ってる奴いるはずなのに、 俺はもういままでrubyのバグには自分で出したのだけで少なくとも10個以上 どうなってるのこの言語 とりあえずlambda周りとハッシュ周りに何かがある・・・
222 名前:デフォルトの名無しさん mailto:sage [2012/08/16(木) 01:02:21.44 ] それがパーサのバグなら諦めろ Rubyのパーサはどうもならん
223 名前:デフォルトの名無しさん mailto:sage [2012/08/16(木) 01:11:31.94 ] rubi使いはフリガナふってろ。初心者って自分のバグを人のせいにするよな。
224 名前:デフォルトの名無しさん mailto:sage [2012/08/16(木) 01:19:03.05 ] >>218 201,209が「簡潔にならない」「具体例がないと分からない」というから挙げた例に 横からしゃしゃり出てきて一例だけピックアップして筋悪とか十分とか 結論ありきの難癖つけるってなんなのあんた?
225 名前:uy [2012/08/16(木) 01:20:06.45 ] > なんなのあんた? 俺俺。俺だよ。
226 名前:デフォルトの名無しさん mailto:sage [2012/08/16(木) 01:29:22.60 ] コミュ障です。
227 名前:uy mailto:sage [2012/08/16(木) 01:30:59.89 ] >>223 ひとつは普通に[BUG]ってでた これはlambda周りのバグ もうひとつは、これはハッシュ周り [BUG]とはでないが、 存在しているはずの変数の中身が一定確率で(1度のイテレーションのみ?)だけ勝手にnilになってる nil => nil のハッシュなんか追加した覚えないのに両方nil とりあえずイテレータでまわしてる時に中でこれをやってはいけないっぽい task = Hash.new task.marge(...) task.each do task = 新しいハッシュ end これをどうにかなくしたらバグらなくなった いずれも小さなコードで再現させようとしてもバグってくれない 俺がわけわからんコード書いてるせいもあると思う もういやだ
228 名前:デフォルトの名無しさん mailto:sage [2012/08/16(木) 01:35:09.09 ] >>227 中級者はバグを回避するコード書くのがあたりまえっえこと。
229 名前:uy [2012/08/16(木) 01:35:37.63 ] >>227 [BUG]というのは テメーのバグっていう意味だよw
230 名前:uy mailto:sage [2012/08/16(木) 01:36:32.34 ] >>227 あ,ごめんハッシュのほうは両方nilではないわ でも何か動作おかしいのは事実
231 名前:デフォルトの名無しさん mailto:sage [2012/08/16(木) 01:42:31.92 ] そりゃお前、コンテナをイテレートしている最中にコンテナいじったら、 危ないだろうJK。Rubyに限らずどの言語でもご法度。
232 名前:デフォルトの名無しさん mailto:sage [2012/08/16(木) 01:43:59.81 ] >>224 この一例が重要だから214が例示して、218が反論したんだよ もしブロックが単独のリテラルだったなら 1. Procを簡潔に記述できる 2. ブロック構文に関わる一連の糖衣構文(yield、&block、)が 通常のメソッド引数括弧の省略という形で統一的に記述できる 3. またこの枠組みでは複数の関数引数の記述も自然にできる それに対する反論が 1. 関数型スタイルを使いたいならProcではなくてlambdaでいいじゃん(糖衣構文がある) 2. メソッド引数括弧の省略に頼った記法は良くないとされている 逆に省略しないと記述が煩雑になる。つまり専用構文を用意するのがベター 3. 複数の関数引数は出現頻度が低いことが分かっているから重要でない むしろ一引数に特化している事が重要 →再反論:関数合成のような例は? っていう議論なんだから
233 名前:uy mailto:sage [2012/08/16(木) 02:12:27.19 ] もういいじゃんruby最強なんだから バグがあっても使う価値があるくらいには最強
234 名前:デフォルトの名無しさん mailto:sage [2012/08/16(木) 08:15:45.11 ] 日本人の韓国旅行終了! 三井住友、韓国旅行者向けの新カード発行延期 engawa.2ch.net/test/read.cgi/poverty/1345036192/ 韓国旅行者向けの新カード発行延期 三井住友カード 三井住友カードは15日、韓国に旅行する日本人向けに予定していた新たなカードの発行を延期すると発表した。 提携する韓国のカード会社と22日にソウル市内で記者発表会を計画していたが、これも延期する。 韓国の李明博(イ・ミョンバク)大統領の竹島上陸や対日批判などを考慮し、「今サービスを始めるのはふさわしくない」(広報室) と判断したという。 このカードは、旅行前に日本円で入金しておけば、韓国のお店で韓国ウォンでの支払いができるプリペイド式で、9月上旬から 発行する予定だった。記者発表会は、日本でも人気の高い韓国人俳優らが出席する計画だった。 www.asahi.com/business/update/0815/TKY201208150428.html
235 名前:153 mailto:sage [2012/08/16(木) 10:04:35.58 ] >>211 ん、最終行にはリスト内包表記が見えるけど、気のせいかな? それはさておき、Pythonでは「ごく普通に」関数を定義して適用するのに対して、 Ruby(および関数型言語)では「ごく普通に」ブロックや無名関数を使って シンブルな式として表現できる、ということになった また当たり前だけど、>>211 のような関数を定義するコードはRubyでも書ける これは>>197 ,198で述べたように、関数型言語風プログラミングにおいて 局所宣言が無いというPythonの欠点、そしてRubyの優位性を示している
236 名前:デフォルトの名無しさん mailto:sage [2012/08/16(木) 11:03:14.55 ] 無名関数のあるJSの勝利ですね。
237 名前:デフォルトの名無しさん mailto:sage [2012/08/16(木) 11:05:52.40 ] >>235 Rubyは関数内関数を素直に定義できないじゃん Proc と lambda の違いとかキモイし どさくさにまぎれて関数型言語と一緒にすんなよ
238 名前:デフォルトの名無しさん mailto:sage [2012/08/16(木) 11:45:22.78 ] phpでの話なんですが教えて下さい あるアドレスに下記の様にHTTPヘッダー関数で移動すると返ってくる内容がブラウザに表示されるのですが header("Location: {$add}") ; file関数、fgets関数等で下記の様に読み込むと中身がカラッポで入っていません $data = '' ; if ($fp = @fopen($add, "r")) { while (!feof($fp)) $data .= @mb_convert_encoding(fgets($fp, 1024), "EUC-JP", "auto"); fclose($fp); } $data = htmlspecialchars($data); file関数、fgets関数等で読み込んで中身を得るにはどうしたら良いでしょうのでか 教えて頂ける様お願いします
239 名前:238 mailto:sage [2012/08/16(木) 12:26:57.50 ] エラー抑制を外してみました if ($fp = @fopen($add, "r")) { ↓ if ($fp = fopen($add, "r")) { そしたら次の様なワーニングが出てきました 『 Warning: fopen(アドレス) [function.fopen]: failed to open stream: HTTP request failed! HTTP/1.0 403 Forbidden in 動いてるスクリプト on line 374 』 どうもアクセス相手側から拒否されている様です しかしヘッダー関数では取得できる様なのでどうにかしてfile関数等でデータを取り込みたいのですが どうしたら良いかご存知のかたいらっしゃったら教えて頂ける様お願いします
240 名前:デフォルトの名無しさん mailto:sage [2012/08/16(木) 12:30:36.27 ] >>239 WebProg kohada.2ch.net/php/
241 名前:238 mailto:sage [2012/08/16(木) 12:32:19.66 ] >>240 thx
242 名前:uy [2012/08/16(木) 14:10:29.16 ] rubyは[]でかけるLISPとしても使えるんじゃなかった? メソッド揃えば完全変換できるかもよ procのlambda違いは有りなんだよ rubyは同じに見えて微妙に違う動作をするメソッドが数多く存在する それだけ細かい調整が標準ライブラリで効くってこと
243 名前:153 mailto:sage [2012/08/16(木) 14:13:16.73 ] >>237 >Rubyは関数内関数を素直に定義できないじゃん エッ!、Rubyは普通に関数内関数を定義できるよ??? 以前(1.8)は関数内関数のスコープに問題があったけど、今(1.9)では解消されたし ・メソッド定義のネスト - Ruby 1.9.3 リファレンスマニュアル doc.ruby-lang.org/ja/1.9.3/doc/spec=2fdef.html#nest_method というか、OOPLであるRubyでは、プライベートメソッドとして定義するのが一般的で、 関数内関数はまず目にすることはない しかも(>>211 のPyhtonのような)他LLでは関数定義を「普通」に使うけど、 Rubyならブロックがあるから一度しか適用しない関数は式の中に埋め込むのが「普通」 つまり、(関数内関数を多用せざるをえない他LLと違って)関数内関数を使う頻度は少ない >Proc と lambda の違いとかキモイし 確かにProcとlambdaの微妙な差異は分かりづらいよね でもRubyにはブロック構文があるから、(Procやlambdaのような)明示的な無名関数宣言を 使う頻度は比較的少ないし、使うケースでもどちらか一方を使えば済むことが多い また、言語の微妙な弱点を避けて、良い点を引き出すことに注力することが (Rubyに限らず)中級プログラマのたしなみの一つだと考える >どさくさにまぎれて関数型言語と一緒にすんなよ え、一度も「Rubyは関数型言語である」とは言ってないけど.....??? 「関数型言語風プログラミングには(他LLよりも)Rubyは明らかに優れている」と主張している
244 名前:デフォルトの名無しさん mailto:sage [2012/08/16(木) 14:25:57.61 ] >>243 > エッ!、Rubyは普通に関数内関数を定義できるよ??? はあ?じゃあ何で関数内関数が外から見えてんだよ ideone.com/4J057
245 名前:デフォルトの名無しさん mailto:sage [2012/08/16(木) 14:42:18.11 ] > つまり、(関数内関数を多用せざるをえない他LLと違って)関数内関数を使う頻度は少ない 関数型言語でも関数内関数を多用するけど...? 「関数型言語風プログラミング」って何? それってただの「Ruby風プログラミング」なんじゃないの?
246 名前:uy mailto:sage [2012/08/16(木) 14:43:56.36 ] rubyの仕組みがなんにもわかってないんだな それは結局selfが省略されているに過ぎない rubyはすべてがオブジェクトであり、インスタンスは特異メソッドをもつ事が出来る self.define_singleton_method :uy do p :uy end お前らの大好きなシングルトン でもこの設計はゴミカスだな 俺様個人の意見を言わせてもらうならdef内のdefは使わないほうがいいよ 普通にlambdaで ->{ } 書いたほうが短いんだからそっち使えばいいじゃん
247 名前:uy mailto:sage [2012/08/16(木) 14:48:03.05 ] >>246 すいません、思いっきり間違っていました忘れてください 旅にでます
248 名前:153 mailto:sage [2012/08/16(木) 14:50:55.63 ] >>244 わざわざideon上のコードを引用しなくても、Rubyの振る舞いは>>243 で示した リファレンスマニュアル「普通のメソッド定義式と同じ」の通りだよ??? 確かに、理想的には内側のメソッドが外部から隠蔽されたほうが望ましいことは認める これが>>211 のPythonコードのように、関数定義を多用するのが「普通」、 あるいは関数定義を多用「しなければならない」言語であれば、致命的な欠陥になる でも>>243 で述べたように、Rubyでは関数内関数の必要性がほとんど存在していないんだ もしも可能であるならば、ブロックやプライベートメソッド定義では読みづらかったり 冗長だったりするけど、関数内関数であれば素直に表現できるコード例を示してほしいなあ...
249 名前:デフォルトの名無しさん mailto:sage [2012/08/16(木) 14:57:03.42 ] rubyはそこら中が関数といえば関数だからね do 〜 endって、でてきたらそれ全部関数だよ
250 名前:デフォルトの名無しさん mailto:sage [2012/08/16(木) 15:03:34.35 ] だから関数型言語では関数内関数を多用するって言ってるのに... 関数型言語と違うスタイルなんだから「関数型言語風プログラミング」とか言うなよ
251 名前:デフォルトの名無しさん mailto:sage [2012/08/16(木) 15:07:46.32 ] > 確かに、理想的には内側のメソッドが外部から隠蔽されたほうが望ましいことは認める 理想的にはじゃなく、ここが一番大事なところ
252 名前:uy [2012/08/16(木) 15:08:18.16 ] proc Proc.new lambda ->{ } def define_method define_singleton_method Module.new / Class.new / Struct.new こんくらいかな?メソッド内で関数のようなものを定義する方法 動作違うものが、これだけあるんだから動作調べて好きなの使えよ? defしか使えないバカなの?
253 名前:デフォルトの名無しさん mailto:sage [2012/08/16(木) 15:23:14.80 ] >>248 > もしも可能であるならば、ブロックやプライベートメソッド定義では読みづらかったり > 冗長だったりするけど、関数内関数であれば素直に表現できるコード例を示してほしいなあ... なんだ、読みづらさや冗長さの観点で批判してたのか?関数型うんぬんは関係なく? じゃあ>>198 に比べて>>211 は読みづらくて冗長だからダメって言いたいんだな? そういうことは最初から言えよ
254 名前:デフォルトの名無しさん mailto:sage [2012/08/16(木) 15:35:35.20 ] はよ旅立て。
255 名前:153 mailto:sage [2012/08/16(木) 15:41:10.73 ] >>245 >関数型言語でも関数内関数を多用するけど...? うん、関数型言語では関数内関数でプログラムを構築していくのが普通だね でもRubyはオブジェクト指向言語であり(>>243 の最後で書いたように)関数型言語ではないから、 モジュールやクラスでプログラムを構築するのが普通なんだ >「関数型言語風プログラミング」って何? 「(破壊的代入を含む)副作用を避けた参照透明性のあるプログラミング」(>>181 も参照) これは関数型言語のパラダイムと同じ もちろん(関数内関数ではない)Rubyでは、入出力や効率(性能や資源)といった理由から 完全に参照透明性のあるコードは書けないけど、それでも副作用を極力避けたり、 参照透明性のある部分とない部分を意識的に使い分ける、あるいは副作用のあるコードを隠蔽する 現実に実用的なテキスト処理プログム開発で試したところ(全体で約20Kstep)、 8割は参照透明性のあるコードで実装することが可能だった 残る2割の部分は、トップレベルの(入出力を含む)メイン処理モジュール群と 最下層の副作用をカプセル化(隠蔽)した内部ライブラリ群になる
256 名前:avacript [2012/08/16(木) 16:27:56.11 ] 関数型扱えない言語は終わってるよな rubyとか
257 名前:uy [2012/08/16(木) 16:51:25.73 ] rubyは関数型プログラミングも出来て便利だよな
258 名前:デフォルトの名無しさん [2012/08/16(木) 16:55:24.10 ] でもOSやミドルウエア、あるいはビジネスアプリにいたるまで 日本製ソフトのシェアはゼロに等しいよね。
259 名前:153 mailto:sage [2012/08/16(木) 16:57:54.51 ] >>250 >関数型言語と違うスタイルなんだから「関数型言語風プログラミング」とか言うなよ うん、ググってみたら確かに「関数型言語風プログラミング」は風変わりだった では、一般的な「関数型プログラミング(functional programing)」と改めよう
260 名前:153 mailto:sage [2012/08/16(木) 17:09:48.97 ] >>251 >理想的にはじゃなく、ここが一番大事なところ そう、クロージャやまともなラムダ式の無いPythonのような手続き言語における 関数型プログラミングでは、関数内関数こそが一番大事だよね Rubyはというと、(>>248 で書いたように)OOPLでブロックがあるからそれほど大事じゃないけど....
261 名前:デフォルトの名無しさん mailto:sage [2012/08/16(木) 17:15:09.50 ] ラムダの文法を def 1; end にして、 メソッド定義は @method = def 1; end こんな感じの文法でよかったんだよ。 func = def 1; end こう書けばfuncはローカル変数だから外から見えないし。 同じようなものが一杯ありすぎる。 C++みたいに厳しいパフォーマンスが求められるってわけでも無いのにさ。 こんな行き当たりばったりな言語を良しとしている人は、 さぞプログラムも行き当たりばったり何だろうな。 かといって、ラムダの弱いPythonは土俵にすら立ててないのだが。 普及しててまともなLLって無いのかね。 もしJSにブロックスコープがあったなら、かなり良い言語になりえたんだがな。
262 名前:uy [2012/08/16(木) 17:42:47.29 ] >>261 おいバカ これ lambda ↓ ->{ } これlambda
263 名前:デフォルトの名無しさん mailto:sage [2012/08/16(木) 17:43:38.98 ] ラムダしか知らないのかよお前はw
264 名前:デフォルトの名無しさん mailto:sage [2012/08/16(木) 17:48:13.46 ] 旧世代的なラムダ脳にはリスト内包表記、イテレータ、ジェネレータ、デコレータを上手く使うPythonicなコードは理解出来ない なんとかラムダで書こうとするのは、どの言語でもCみたいなコードを書く奴と何も変わらん
265 名前:153 mailto:sage [2012/08/16(木) 17:59:30.07 ] >>261 >ラムダの文法を def 1; end にして、 ....(以下、省略) 構文の簡潔さという意味では、>>83 で紹介したSML(Standard ML)が理想に近いのではないかと 【ラムダ式】 fn hoge x y = <expr> 【条件分岐式】 if <expr1> then <expr2> else <expr3> 【多分岐式】 case <expr> of <pat1> => <expr1> | <pat2> => <expr2> | .... 【代入(束縛)】 val x = <expr> 【関数定義】 fun fuga x y = <expr> 【局所宣言式】 let val x = <expr> fun fuga x y = <expr> in <expr> 【モジュール定義】structure bar = struct <declarations> end 構文要素が必ず予約語で始まっていることがポイントになる また ;(セミコロン)は演算子であり、式「a ; b」は(aを捨てて) b の評価値を返すという意味になる 結果として言語仕様はコンパクトにまとまっているので習得が容易であり、 しかも言語全体の公式な形式的定義が存在するという特異な存在となっている ・Amazon.co.jp: The Definition of Standard ML: 洋書 www.amazon.co.jp/The-Definition-Standard-Robin-Milner/dp/0262631814/ >もしJSにブロックスコープがあったなら、かなり良い言語になりえたんだがな。 これは同感だね さらに条件分岐(if や switch)が文(statement)ではなく式(expression)であることも大切だと思う
266 名前:デフォルトの名無しさん mailto:sage [2012/08/16(木) 18:07:02.49 ] そう思ってしまうのはクロージャがないC脳だから。 内から外へのスコープを区切るものは関数しかない、という単純さが損なわれる。 クロージャがあるからそれだけでも既にややこしくなってるのに。
267 名前:153 mailto:sage [2012/08/16(木) 18:11:28.09 ] >>264 論よりコード
268 名前:デフォルトの名無しさん [2012/08/16(木) 18:35:16.39 ] つまり、日本国はこの町並みを維持できる限り安泰ということだから、 大声張り上げて街中をデモ行進する人は宇宙空間にでも行って欲しい。
269 名前:153 mailto:sage [2012/08/16(木) 18:39:03.55 ] >>265 のカキコの中で、最後の「>もしJSにブロックスコープがあったなら、」以降を取り消す ブロックスコープをスコープと早合点していた
270 名前:デフォルトの名無しさん mailto:sage [2012/08/16(木) 18:42:06.27 ] >>267 Closures in Python (part 1) ivan.truemesh.com/archives/000392.html >(ie. use a "list comprehension" - I think it reads a bit easier than using the map/lambda).
271 名前:153 mailto:sage [2012/08/16(木) 18:53:18.70 ] >>270 リンク先を眺めたけど、これらの例というのは(説明も何も無いから) RubyでもPyhtonでも同レベルで簡潔に書けるコードに見える これらの例について、いかにPythonが優れているかを「>>270 自身の言葉で」語って欲しい あるいは>>197 ,198のように、明らかにPythonが優位性であることが分かる例を希望する これじゃバトルにならんのだよ....
272 名前:デフォルトの名無しさん mailto:sage [2012/08/16(木) 18:54:43.69 ] >>271 別にRubyが劣ってるなんて言ってないよ 馬鹿が譫言のようにクロージャクロージャと連呼してたから ああ、こいつはPythonのことをあまり知らないんだなあ、と思っただけ
273 名前:デフォルトの名無しさん mailto:sage [2012/08/16(木) 18:55:24.50 ] Pythonが優位であることが分かる例か。シェアだな。
274 名前:153 mailto:sage [2012/08/16(木) 18:56:07.05 ] >>269 (>>265 )を再訂正 ....orz X: スコープと早合点していた O: ブロックと早合点していた
275 名前:デフォルトの名無しさん mailto:sage [2012/08/16(木) 18:56:16.68 ] なお>>197 ,198でPythonが明らに劣勢であることを示せてると思ってる所にも同情する
276 名前:153 mailto:sage [2012/08/16(木) 19:00:35.26 ] >>272 では、そのPythonのクロージャとやらを使って、>>211 を書き直して欲しい Pythonにはクロージャがあるから、関数定義無しに書けるよね?
277 名前:デフォルトの名無しさん mailto:sage [2012/08/16(木) 19:01:46.12 ] >>273 それに伴うライブラリの充実とかコミュニティの活発さはあるね
278 名前:デフォルトの名無しさん mailto:sage [2012/08/16(木) 19:02:19.29 ] そもそも関数定義無しに書けなきゃダメって 勝手にルール作ってるところがおかしい
279 名前:デフォルトの名無しさん mailto:sage [2012/08/16(木) 19:02:23.31 ] なぜ関数を定義したらいけないのか理解できない
280 名前:デフォルトの名無しさん [2012/08/16(木) 19:05:32.80 ] 領空侵犯機 ロシア約68%、中国約25%、その他約7%
281 名前:153 mailto:sage [2012/08/16(木) 19:09:44.52 ] >>275 独り言かな?
282 名前:デフォルトの名無しさん mailto:sage [2012/08/16(木) 19:09:59.70 ] 153はダブルスタンダードすぎる
283 名前:デフォルトの名無しさん mailto:sage [2012/08/16(木) 19:12:19.57 ] >>279 そりゃ明らかに面倒だろ。 いまどき、あのC++にすら無名関数やラムダがあるのに。 あの保守的なC++が取り入れたんだよ? しかも文法を [&](int i)-> int { return i; } って糞キモくしてまで取り入れた。 今までのC風の関数のスタイルを捨ててまで、取り入れたんだよ。 今までになかったこと。それぐらい無名関数やラムダは求まれた。 int func( int i ){ return i; } これが auto func = []( int i ) -> int { return i; } こんなになっちゃったんだよ。こんなに見た目が変わったんだよ。 それを受け入れたんだよ、あのC++er達が。その意味を考えろ。
284 名前:デフォルトの名無しさん mailto:sage [2012/08/16(木) 19:15:38.78 ] >>283 いや上の例を見ても明らかとは思えないけど 別にC++erだって全ての関数をラムダ式で書くわけもなく、普通に関数定義するし
285 名前:デフォルトの名無しさん mailto:sage [2012/08/16(木) 19:21:31.64 ] >全ての関数をラムダ式で書くわけもなく、普通に関数定義するし 普通の関数もかけるのは当たり前で、 それだけじゃつらいからラムダを導入したって話だろ。 論点ずれてるだろ。何言ってんだか。 ラムダが要らないものならわざわざ変な文法作ってまで導入するかよ。
286 名前:デフォルトの名無しさん mailto:sage [2012/08/16(木) 19:23:37.43 ] >>285 上のはラムダで書くべき例なの?
287 名前:153 mailto:sage [2012/08/16(木) 19:26:19.29 ] >>278 ,279 あらゆる関数型言語であれば関数定義無しにかけるから、 それは「関数型プログラミング」の特徴の一つである、という理屈 だってPythonだけが関数定義が無ければ書けないんだから、 マイナス評価されても当然だろ? というかさ、もしルールに不満があるならそれを最初に主張すべきだった 具体的には、>>235 の指摘に対して即座に反論すればよかったのに.... いろいろゴネたあげく、技術論で反論できないからルールに不満を言うのは カッコワルイと思うよ
288 名前:デフォルトの名無しさん mailto:sage [2012/08/16(木) 19:29:06.48 ] >>287 つまり、実用上では何の意味もない所で優劣を競ってるのか?
289 名前:デフォルトの名無しさん mailto:sage [2012/08/16(木) 19:30:21.57 ] 昔からお題を出し続けてる奴だろうけど、出題がゴミすぎるよね
290 名前:デフォルトの名無しさん mailto:sage [2012/08/16(木) 19:30:51.67 ] 実用上問題がなければC++にラムダが導入されるわけ無いだろ。 あんな変な文法にしてまで、無理にでも導入したんだぞ。
291 名前:デフォルトの名無しさん mailto:sage [2012/08/16(木) 19:36:11.33 ] ラムダの有用性は、このお題では1ミリも示せなくても、いくらでもあるだろ C++がさらに糞言語化したからラムダは有用!とか言わなくてもさ
292 名前:デフォルトの名無しさん mailto:sage [2012/08/16(木) 19:42:16.59 ] 「こんな書き方も出来る、こんな書き方も!」 で?もっと身のある話はないのかよ
293 名前:デフォルトの名無しさん [2012/08/16(木) 19:55:52.82 ] www.youtube.com/watch?v=cjhV2OzifSg&feature=relmfu
294 名前:デフォルトの名無しさん mailto:sage [2012/08/16(木) 20:14:22.38 ] >>287 あれ?お前>>255 でRubyはOOPLだから関数内関数無くても良いんだとか 言ってなかったっけ? 関数型言語では関数内関数あるんだからRubyではdefの入れ子で 関数内関数が定義できないのはマイナス評価されても良いの?
295 名前:デフォルトの名無しさん mailto:sage [2012/08/16(木) 20:16:11.07 ] Pythonに無名関数(複数行lambda)あってもいいじゃんと思ってたけど [Python-ideas] a new lambda syntax mail.python.org/pipermail/python-ideas/2009-October/006208.html めぐりめぐってGuidoのコメント mail.python.org/pipermail/python-ideas/2009-October/006306.html # mail.python.org/pipermail/python-ideas/2009-October/006228.html のコードをもとに ys = [Document(lambda{ h = generate_header() if x.is_first_page else None b = generate_body(x) f = generate_fotter() if x.is_last_page else None return h, b, f}) for x in xs] こういうコード書く人が出てくるからやめたほうがいいね
296 名前:uy [2012/08/16(木) 20:16:17.97 ] それはマイナスだよ ゴミ
297 名前:デフォルトの名無しさん mailto:sage [2012/08/16(木) 20:18:08.51 ] (1)Pythonのlambdaじゃ書けなくて (2)関数を定義したら冗長になってしまうほど短い そんな例題があればいいんだよ
298 名前:デフォルトの名無しさん mailto:sage [2012/08/16(木) 20:22:49.99 ] 153は出す御題もゴミの上に 都合の悪いレスはスルーするというゴミっぷり ゴミの中のゴミ
299 名前:uy [2012/08/16(木) 20:23:21.31 ] 勘違いされやすい文法はゴミカスだ
300 名前:デフォルトの名無しさん [2012/08/16(木) 20:24:33.39 ] 私が改造したソース帰ってこないじゃん。
301 名前:uy [2012/08/16(木) 20:33:38.40 ] ゴミだからだろ
302 名前:デフォルトの名無しさん [2012/08/16(木) 20:38:52.33 ] 8時半だしお家かえる
303 名前:デフォルトの名無しさん mailto:sage [2012/08/16(木) 20:42:02.02 ] >>287 いやいや、スレ読んでみたら、>>211 に対して後付けで 関数定義はダメって言い出してるけど? 後付けでルールを追加するのってカッコワルイね
304 名前:uy [2012/08/16(木) 20:53:09.03 ] rubyのメソッド内メソッド定義はカス しかしそれをマイナス点にしても最強なのだった
305 名前:デフォルトの名無しさん mailto:sage [2012/08/16(木) 20:57:19.93 ] Rubyはひたすらendでも打ってろ
306 名前:153 mailto:sage [2012/08/16(木) 21:05:50.99 ] 関数型言語としてHaskellだけを取り上げて「あらゆる関数型言語(>>287 )」と言うのは 不公平だと思うから、それ以外の関数型言語のコード例について、過去スレ19,20からコピペする なお、このコードは>>286 氏ご希望のラムダ式で書く典型的なコード例となる ==== Standard ML ==== datatype 'a Option = None | Some of 'a val ys = map ( fn x => let val h = if is_first_page x then generate_header else None val b = generate_body x val f = if is_last_page x then generate_footer else None in (h, b, f) end ) xs 同等な多言語のコード例については以下を参照 ・Haskell >>197 上段 ・Python >>197 下段および>>211 ・Ruby >>198
307 名前:デフォルトの名無しさん mailto:sage [2012/08/16(木) 21:10:23.55 ] 関数型言語の話をしたいだけなんだな、こいつは
308 名前:デフォルトの名無しさん mailto:sage [2012/08/16(木) 21:10:42.85 ] お題がクソだと散々言われてるのに 話を引っ張る空気読めないっぷりがウケるw
309 名前:uy [2012/08/16(木) 21:15:05.50 ] たまに関数型言語厨が迷い込むよね 同じ奴なんですか?
310 名前:153 mailto:sage [2012/08/16(木) 21:19:31.47 ] >>294 >関数型言語では関数内関数あるんだからRubyではdefの入れ子で >関数内関数が定義できないのはマイナス評価されても良いの? 正確には「関数内関数定義で内部の関数が外部から隠蔽されない」だね もちろんこの点はRubyのマイナス評価であると認めるよ また、アンカも間違いで(>>255 ではなくて)>>243 じゃないかな? さらに言えば、>>297 自身も(>>243 ,248から)引用しているように、 このマイナス評価はRubyにとっては致命的な欠点ではない もしも致命的ではないという意見が不満ならば、 >>248 の最後でリクエストしたように具体的なコードで語って欲しい 論よりコードだ
311 名前:デフォルトの名無しさん mailto:sage [2012/08/16(木) 21:23:03.20 ] >>310 > もしも致命的ではないという意見が不満ならば、 Pythonの関数定義が致命的だって話は何時同意を得たんだ? 少なくとも>>211 は関数定義で全く問題ない せめて>>297 を満たす御題くらい作れよ 論よりコードなんだろ?
312 名前:デフォルトの名無しさん mailto:sage [2012/08/16(木) 21:23:21.86 ] >>310 Pythonユーザなら誰も書かないようなコード貼っといて論よりコードは流石になかろう
313 名前:153 mailto:sage [2012/08/16(木) 21:23:30.23 ] >>289 その「都合の悪いレス」とやらのレス番を書きなさい そうすれば反論してあげるよ それとも反論されるのが怖いヘタレかい?
314 名前:デフォルトの名無しさん mailto:sage [2012/08/16(木) 21:23:47.98 ] 関数型言語としてどれが素晴らしいかって、HaskellとかSMLが素晴らしんじゃないでしょうかw でも関数型言語スレって盛り上がらないんだよな。TIOBEのランキング見れば分かるけど そもそも利用者が少ない。LispはまだしもHaskellとかMLとかは、マイノリティすぎる 結局、関数型言語としての評価軸って対して価値がないのかなと思う まあノイジィマイノリティのノイジィ具合は全てのパラダイムの中で群を抜いてるだろうけど それに対応してRuby、Pythonその他の言語にも導入されてる機能もあるし 導入された分は使える範囲で使えればいいと思うし、それで足りないなら関数型言語を使うしかないけど そういう選択をする人が少ないのも事実で、関数型言語でなければならないという観点は間違ってる気がする
315 名前:153 mailto:sage [2012/08/16(木) 21:33:07.50 ] >>303 リスト内包表記(Haskell: >>197 )にせよラムダ式(SML: >>306 )を使うにしても、 関数型言語プログラマであれば「再利用されないコード断片」は 関数定義無しでも書けるのは「常識」なんだから、そんなルールはわざわざ書かなかった 今の議題は「LLにおける関数型プログラミングの適性比較」なんだよ
316 名前:デフォルトの名無しさん mailto:sage [2012/08/16(木) 21:34:19.08 ] 「LLにおける関数型プログラミングの適性比較」というスレでやれば?
317 名前:デフォルトの名無しさん mailto:sage [2012/08/16(木) 21:34:28.89 ] えーその議題いつ決まったのーーーー!!! さすがに突っ込ませてもらうわ。 とりあえず君は関数型言語の巣へ帰った方がよいね。
318 名前:デフォルトの名無しさん mailto:sage [2012/08/16(木) 21:35:10.02 ] >関数型言語プログラマであれば (笑)
319 名前:uy [2012/08/16(木) 21:36:45.56 ] 関数型言語でスクレイピングしたいんですけど あ、やっぱあいいや
320 名前:デフォルトの名無しさん mailto:sage [2012/08/16(木) 21:48:26.95 ] >>295 > I believe that the main reason > people keep arguing for anonymous blocks (and this will never stop) is > simply that there is **a certain segment of the programmer** population > that is used to solving a large variety of problems with anonymous > blocks and that **they don't want to learn how to solve each of those > cases using the existing tools in Python.** (強調引用者) どう考えても>>153 そのものです。本当にありがとうございました
321 名前:153 mailto:sage [2012/08/16(木) 21:49:45.82 ] >>312 では、議題(>>315 )に沿った「Pythonユーザなら誰でも書くコード」を提示しなさい >>272 氏がPythonにもクロージャは存在すると指摘してくれたので >>276 でコード例をリクエストしてレスを待っているんだけどな.... 残念ながら、今のところ具体的なPythonコードを書いてくれたのは>>211 一人だけだ 過去スレ19,20でも結局は一人だけだったし、もしかして同じ人かなあ....
322 名前:デフォルトの名無しさん mailto:sage [2012/08/16(木) 21:51:22.33 ] 俺RubyもPythonもHaskellもOCamlも仕事で使った事在るけど こんなスレで関数型言語アピールとかアホとしか思えん 関数型言語が好きなら黙って使ってろっての
323 名前:デフォルトの名無しさん mailto:sage [2012/08/16(木) 21:52:27.55 ] なんでお前に命令されなきゃいかんのか分からんし なんか前もお前の間違いを訂正したのは 「ああ、そうなんだ、ふうん。でも俺の主張は間違ってない。じゃあこのお題はどうよ?」 みたいな対応しかしなかったし、関わるだけ無駄。関数型云々について、いつまで続けるんだ? もう結論出して良いよ。それでLLの優劣なんて何も決まらんから
324 名前:デフォルトの名無しさん mailto:sage [2012/08/16(木) 21:52:32.06 ] 覚えた言葉をすぐに使いたがる小学生。
325 名前:デフォルトの名無しさん mailto:sage [2012/08/16(木) 21:53:32.53 ] >>321 まず議題が承認されてないじゃん というかPythonいけてねえって主張するあなたのほうに立証責任がある 「なんでPythonで(名前つき)関数定義するのがよろしくないのか」を示すべき
326 名前:デフォルトの名無しさん mailto:sage [2012/08/16(木) 21:55:05.79 ] 315は関数型言語で遊ぼう!みたいな本が大好きな関数型マニアだってことは分かるけど このスレで何をしたいのかは理解できない
327 名前:デフォルトの名無しさん [2012/08/16(木) 21:57:21.87 ] このスレ住民は現実的な意見が多いな 関数型は効率というベクトルからは外れた趣味だもんな
328 名前:デフォルトの名無しさん mailto:sage [2012/08/16(木) 22:02:23.59 ] Pythonディスりたければ、俺みたいに、 あの糞みたいな、ネスとスコープの仕様をつつけば良いのに。 あれだけは生粋のパイソニストでも擁護不可能だからね。 擁護しようものなら、 今になってnonlocal追加した事実に反してしまうしな。
329 名前:デフォルトの名無しさん mailto:sage [2012/08/16(木) 22:02:35.37 ] というか、ある程度はそのプログラミング言語の用途とかが競合しないとさ
330 名前:デフォルトの名無しさん mailto:sage [2012/08/16(木) 22:06:00.91 ] ガチでぶつかるのはPythonとRubyぐらいでしょう。 しかも外国VS国内みたくなってるから余計に。 他の言語は大体用途が被らないし、 その用途でのスタンダードを確立しているものばかりだからな。 shとJSで喧嘩するのは無理。
331 名前:デフォルトの名無しさん mailto:sage [2012/08/16(木) 22:07:22.74 ] >>328 nonlocalの追加は、リストにする手間が省けたという意味では確かに改善だけど スコープ自体は問題なくね。だからこそnonlocalが要るんだし
332 名前:153 mailto:sage [2012/08/16(木) 22:08:05.65 ] >>311 >せめて>>297 を満たす御題くらい作れよ え、>>197 ,198,306の御題は>>297 を満たしているけど、何か? > (1)Pythonのlambdaじゃ書けなくて ==> わざわざ複数の引数を渡しているから、Pythonのlambdaじゃ書けない (タプルを使えば書けないことも無いかもしれないけど冗長になる) > (2)関数を定義したら冗長になってしまうほど短い ==> 1カキコ内に収まるほどのコードなので、十分に短い しかも再利用されないコード断片なのだから、関数定義が冗長なのは明らか (Pythonの無名関数(=ラムダ式)って、一体何のために存在してるの?) また、お題について不満があるなら、それを最初に(>>198 の直後に)主張しないとね 散々ゴネたあげく後出しでブーブー文句を言うのはカコワルイよ
333 名前:デフォルトの名無しさん mailto:sage [2012/08/16(木) 22:08:32.79 ] >>328 nonlocal(酷い名前だ)を追加したPython3ではネストスコープの問題は無いの?
334 名前:デフォルトの名無しさん mailto:sage [2012/08/16(木) 22:09:07.30 ] じゃあ前もって言うけど、今後二度とクソレスすんな
335 名前:デフォルトの名無しさん mailto:sage [2012/08/16(木) 22:10:44.41 ] >>332 >> (2)関数を定義したら冗長になってしまうほど短い >>211 のコードは>>197 のHaskellや>>306 のSMLより簡潔だけど? ああ関数型言語は冗長なのか
336 名前:デフォルトの名無しさん mailto:sage [2012/08/16(木) 22:11:12.57 ] 皆が153みたいに粘着してないんだから、後から文句言うなとか文句言ってる時点で頭おかしい 間違いは素直に認めろよ
337 名前:デフォルトの名無しさん mailto:sage [2012/08/16(木) 22:13:45.93 ] 間違いを認めるなんて無理だろうから 目の前のPCを破壊して二度と書き込まないでほしい
338 名前:デフォルトの名無しさん mailto:sage [2012/08/16(木) 22:15:45.76 ] >>330 RubyとPerlは? というかPerlが完全に空気化してるのは、負けたからか? まだそこそこ使われてるイメージだけどなあ
339 名前:153 mailto:sage [2012/08/16(木) 22:16:29.83 ] >>314 >関数型言語でなければならないという観点は間違ってる気がする ああ、これについては同感だね 現状のどの関数型言語も文字列、パターン、ハッシュの操作に難があるから、 現行LLであるPerl/Python/Rubyを置き換えるには無理があると思う ただし、関数型言語にも良い特性がある訳で、実際に(LLを含む)多くの言語に影響を与えている だから自分は「LLにおける関数型プログラミング」に注目している
340 名前:デフォルトの名無しさん mailto:sage [2012/08/16(木) 22:18:23.40 ] >>331 意味わかんねー。問題があったからnonlocalが追加されたんだろ。 しかもnonlocalが有るんなら、代入のある無しでスコープが変わる糞仕様は要らないだろ。 互換性のために残っちゃってるけど。 代入が無ければネストスコープ。 代入が有ればローカルスコープ。 しかしnonlocalが有れば代入があってもネストスコープ。 はぁ、糞ややこしいな。 代入の有る無しと、nonlocalの有る無しの、 二箇所を確認しないといけないなんて。 直感的でも無いしな。 しかし、代入の有る無しでスコープ切り替わるってのは意味分からないよな。 代入は「代入」だろ。代入に別の意味持たせるなよ。
341 名前:デフォルトの名無しさん mailto:sage [2012/08/16(木) 22:18:38.00 ] >>339 LLにおける関数型プログラミング toro.2ch.net/test/read.cgi/tech/1345123070/ お前一人が明らかに邪魔なので、こちらでどうぞ
342 名前:デフォルトの名無しさん mailto:sage [2012/08/16(木) 22:21:13.16 ] >>340 いや互換性はもはやないよ。あと、代入するならnonlocalだよ
343 名前:デフォルトの名無しさん mailto:sage [2012/08/16(木) 22:24:19.36 ] >>332 再利用しないものに名前を付けるのが冗長だというなら >>197 にあるh,b,fという一次変数も冗長で不要
344 名前:デフォルトの名無しさん mailto:sage [2012/08/16(木) 22:24:22.12 ] >>333 ああ、問題残ってるよ。代入の有る無しでスコープが切り替わる問題が。 互換性のためか残っちゃってるけど、 nonlocal追加したんなら、思い切ってこの糞仕様は廃止すべきだったな。 nonlocal有りならネストスコープ、無しならローカルスコープ。 一貫してそれでよかったんだよ。シンプル、単純、分かりやすい。 スコープ調べるのに代入の有る無し調べるとか意味わかんねー。 折角nonlocal追加したのに、なぜに。 二箇所調べなきゃならなくなったから、状況はより悪化したともいえる。
345 名前:デフォルトの名無しさん mailto:sage [2012/08/16(木) 22:25:04.92 ] >>340 shadowingの概念知らんの?
346 名前:デフォルトの名無しさん mailto:sage [2012/08/16(木) 22:26:16.84 ] >>344 ちょっと待てよ。nonlocal追加以前はそもそも代入不可だろ
347 名前:デフォルトの名無しさん mailto:sage [2012/08/16(木) 22:27:08.83 ] 代入と宣言の区別もつかんアホがスコープ批判か...
348 名前:uy [2012/08/16(木) 22:27:35.56 ] perlは終了 jsは用途が違う PHPはいわずもがな pythonは日本じゃ流行らない rubyですね
349 名前:デフォルトの名無しさん mailto:sage [2012/08/16(木) 22:30:33.87 ] >>346 いや、代入できるよ。ローカルスコープの変数になるけどな。 代入があっても、nonlocalならネストスコープ。 nonlocal無くても、代入が無ければネストスコープ。 あー超ややこしいね。 単に、nonlocal有り/無しで、ネスト/ローカルが切り替わる 方が直感的で良いよなぁ。
350 名前:デフォルトの名無しさん mailto:sage [2012/08/16(木) 22:31:24.90 ] >>349 いや、nonlocalを何のために使うのか理解してないでしょw
351 名前:デフォルトの名無しさん mailto:sage [2012/08/16(木) 22:34:27.06 ] >>349 その側の変数には代入できない。それを可能にするのがnonlocal
352 名前:153 mailto:sage [2012/08/16(木) 22:34:31.89 ] >>335 え、単純なステップ数で比較しているの! こちらとしては「再利用されない(一度しか使われない)コード断片を わざわざ関数として定義するのは無駄(=冗長)」と言ってるだけだけど、これは非常識なのかな? というかPythonの無名関数(=ラムダ式)は、いったいぜんたい何の為に存在してるんだろう? ああPythonのラムダはやっぱり「まがい物」なのか
353 名前:デフォルトの名無しさん mailto:sage [2012/08/16(木) 22:35:25.54 ] >>351 訂正:その側→外側 globalに似てて、globalとも違うから、いいネーミングだと思うけどなあ
354 名前:デフォルトの名無しさん mailto:sage [2012/08/16(木) 22:37:12.96 ] >>350 その変数がネストスコープであることを示すためだ。 しかし、nonlocalが無くても、参照のみならネストスコープだ。 ここがまずおかしいね。普通、ローカル変数となるべきところだ。 そして、(代入無しで参照しているから)プログラムはエラーで落ちなければならない。 普通そういう動作が求められるところ。
355 名前:デフォルトの名無しさん [2012/08/16(木) 22:40:05.99 ] そんな基地外スコープの言語がつかわれてる理由ってなに
356 名前:デフォルトの名無しさん mailto:sage [2012/08/16(木) 22:42:12.88 ] >>351 なぜnonlocal無しで代入は出来ないのに参照は出来るんだ? そこがまずおかしいと思わないと。しかも完全なリードオンリーならまだ使い道もあるが、 実際にはメンバ変数を変更したりは自由なんだからCのconstの代わりとしても役に立たない。 別に狙ったものでもなんでもなくて、代入で宣言を代用したことによる単なる文法上の不備でしかないからな。 しかし代入の有る無しでスコープの変わるカス仕様を擁護できるとはおめでたい。 そういう頭じゃないとPythonに惚れ込むのは無理なのか。
357 名前:uy [2012/08/16(木) 22:44:18.14 ] なんかpython使いたくなってきた スコープは基地外なほうが便利なこともあるんじゃない
358 名前:デフォルトの名無しさん mailto:sage [2012/08/16(木) 22:44:18.55 ] 2.xは外側の変数を書き換えられなかったけど、3.xは明示すれば書き換えられるようになっただけじゃね なにを混乱するんだろう
359 名前:デフォルトの名無しさん mailto:sage [2012/08/16(木) 22:45:56.65 ] >>356 局所変数を定義したら外側のスコープの 同名の変数は直接見えなくなる Cで書けばこういうことね int x = 0, y = 0; { int x = 1; printf("%d,%d\n", x, y); } printf("%d,%d\n", x, y); こんな簡単なことも分からない馬鹿って生きてる意味あるの?
360 名前:デフォルトの名無しさん mailto:sage [2012/08/16(木) 22:47:51.21 ] >>352 Pythonのラムダ式は要らんね ただ再利用されなくても関数として定義するのは言語問わず無駄ではないよ…マシンには無駄かも知れないが コードを読む際には処理の区切りや、その処理の区切りにとって必要なデータは何なのか、などが明確になる
361 名前:uy [2012/08/16(木) 22:48:23.51 ] >>359 それはCのゴミカスコープ
362 名前:デフォルトの名無しさん mailto:sage [2012/08/16(木) 22:51:18.10 ] >>359 だからそれがカス仕様だって言ってるんだ。 >局所変数を定義したら外側のスコープの同名の変数は直接見えなくなる それはごもっとも。しかしだ、問題はそこじゃない。 変数の宣言に代入を代用しているから、代入しようとすると宣言する羽目になって、 お前の言う、「局所変数を定義したら外側のスコープの同名の変数は直接見えなくなる」 に陥ってるんだ。だから変数の宣言と代入が別の構文なら、こういう問題は発生しない。 宣言せずに、代入だけすれば、その側のスコープの変数に代入できるからな。 そこがまずミスってるわけ。そんで今になってnonlocal追加。余計にカオス。 他の言語で見られるようなvar方式の方がましだったってわけ。
363 名前:153 mailto:sage [2012/08/16(木) 22:52:20.86 ] >>341 お、わざわざスレを立ててくれたんだね、ありがとう 早速、Python関連サイトへのリンク集をカキコしておいたよ では、このスレでは議題が「Pythonにおけるnonlocalの是非」へと移ったからみたいだから、 (このスレでは)しばらくROMにまわることにする
364 名前:デフォルトの名無しさん mailto:sage [2012/08/16(木) 22:53:35.57 ] いや、そんなに混乱することコレ?w なんか本当に混乱して全く理解できない状態で説明してるんだよね
365 名前:デフォルトの名無しさん mailto:sage [2012/08/16(木) 22:54:19.53 ] >>363 お前の引き出しの少なさに唖然とするわ というかお前Pythonのこと何も知らんくせにPythonのリンク貼るなカス
366 名前:デフォルトの名無しさん mailto:sage [2012/08/16(木) 22:55:12.21 ] var: 局所変数を宣言するときに付ける nonlocal: 外側のスコープの変数へ代入するときに付ける 局所変数の宣言の方が沢山書くんだからvarの方が冗長 ていうかnonlocalが無ければ外側の変数に代入できないんだから 混乱するのはアホだけだ
367 名前:デフォルトの名無しさん mailto:sage [2012/08/16(木) 22:55:34.09 ] >>363 良かったね^^ これで思う存分お前のやりたい議論が出来るね^^
368 名前:デフォルトの名無しさん mailto:sage [2012/08/16(木) 22:58:26.10 ] 簡単に言えば、「何で代入したいだけなのに勝手に宣言しちゃうわけ?」ってこと。 代入と宣言はまったく別のものだろ。 代入は代入だし、宣言は動的型言語の場合スコープを決めるためのものだ。 一緒くたにしてしまって、使い分けできなくなってしまって不便になったものだから、 あとからnonlocal追加。塩と砂糖を混ぜておいて、後から塩だけ分離するようなものだ。 はじめから混ぜるな。あたりまえ。
369 名前:デフォルトの名無しさん mailto:sage [2012/08/16(木) 23:00:16.56 ] いやだから、nonlocalの追加で解決したんだろ?w
370 名前:デフォルトの名無しさん mailto:sage [2012/08/16(木) 23:00:51.21 ] >>366 自分で書く場合は混乱しない。問題はは他人のソースを読む時。 ある変数のスコープを調べたい時、nonlocalと代入の有る無しの両方を確認しないと スコープが確定しない。
371 名前:デフォルトの名無しさん mailto:sage [2012/08/16(木) 23:03:05.53 ] そうかなあ、混乱するコード見せてよ
372 名前:uy [2012/08/16(木) 23:03:18.38 ] uyを分離するにはpythonの話題にすればいい だったら最初から混ぜるな!
373 名前:デフォルトの名無しさん mailto:sage [2012/08/16(木) 23:03:35.02 ] >>370 > 自分で書く場合は混乱しない。問題はは他人のソースを読む時。 いや、お前明らかに混乱してたろww 面白い奴だな
374 名前:デフォルトの名無しさん mailto:sage [2012/08/16(木) 23:06:00.64 ] >>369 解決していない。代入の有る無しでスコープが変わる糞仕様は残ったまま。 代入で宣言を代用する、アホな発想は残ったまま。 便利な万能調味料を作ろうとして、塩と砂糖を混ぜたのが今までのPython。 使い分けできなくなって困ったから、そこから塩だけ分離する機能をつけたのが新しいPython。 しかしだ、小学生でも言うぜ? はじめから混ぜなければ、あとで分離する必要は無いのにって。
375 名前:デフォルトの名無しさん mailto:sage [2012/08/16(木) 23:07:31.61 ] 宣言するの面倒じゃん
376 名前:デフォルトの名無しさん mailto:sage [2012/08/16(木) 23:09:13.91 ] 代入でスコープが変わるって何? 代入で宣言するから、宣言でスコープが決まるだけでしょ
377 名前:デフォルトの名無しさん mailto:sage [2012/08/16(木) 23:10:17.73 ] >>374 だからお前がアホなのは分かったって
378 名前:デフォルトの名無しさん mailto:sage [2012/08/16(木) 23:11:41.04 ] nonlocalも宣言だから、別に矛盾してないよなあ
379 名前:デフォルトの名無しさん mailto:sage [2012/08/16(木) 23:13:36.05 ] >>375 なぜか知らないが、君がそう勘違いしているだけ。 たとえ宣言をしなくて良かったとしても、 どの道、初期化してからしか変数を使用できない。 さすがに初期化するの面倒じゃん、とは言えないでしょ。 初期化は必ず必要。だから、初期化するついでに宣言すればよい。 手間は変わらないということ。varが嫌なら、i @= 0とかでも良い。 何でも良い。普通の代入と宣言付き代入の区別さえ付けばよい。
380 名前:デフォルトの名無しさん mailto:sage [2012/08/16(木) 23:15:09.84 ] >>379 i @= 0とかいくらなんでもキモすぎだろ。そういう言語があるの?
381 名前:デフォルトの名無しさん mailto:sage [2012/08/16(木) 23:16:46.28 ] >>376 なんで代入で宣言するんだよ。宣言無しの普通の代入は? 代入と宣言は別のものだろ。代入は代入。宣言はスコープを決めるもの。 ぜんぜん動作が違う。なぜ両者を混ぜる?そしてなぜ後で分離する(nonlocal)? ナンセンスだろ。馬鹿げてるって分からない?
382 名前:デフォルトの名無しさん mailto:sage [2012/08/16(木) 23:16:53.87 ] > i @= 0 Perlに倣ってシメジ代入演算子と命名しました
383 名前:デフォルトの名無しさん mailto:sage [2012/08/16(木) 23:17:30.34 ] PythonはNoneにappendしたらリスト作ってほしい
384 名前:デフォルトの名無しさん mailto:sage [2012/08/16(木) 23:18:27.99 ] リストとNoneを返す関数の返り値にappendするならいいけど それ以外の場合はろくなことにならない悪寒
385 名前:デフォルトの名無しさん mailto:sage [2012/08/16(木) 23:18:54.59 ] >>381 便利だからだろ。それで必要な所だけで宣言するようにしたんだから お前の案よりエレガントじゃね
386 名前:デフォルトの名無しさん mailto:sage [2012/08/16(木) 23:19:35.83 ] >>380 宣言が i := 0 って言語なら有る。 @=はキモいけど、今回あえてそう書いたのは、 プロポーショナルフォントだと「:」が潰れて:=と=の区別がつきにくく、 掲示板に投稿するのには向いて無いから。 でも実際なんでも良い。普通の代入と宣言付き代入の区別さえ付けば。
387 名前:デフォルトの名無しさん mailto:sage [2012/08/16(木) 23:23:04.62 ] 動的言語を使わないほうが精神衛生上良いのでは…
388 名前:デフォルトの名無しさん mailto:sage [2012/08/16(木) 23:26:50.76 ] Pythonのネストスコープに欠陥がある!なんて言うから楽しみだったのに 自分の好みを連呼するだけの馬鹿だと分かってガッカリ
389 名前:デフォルトの名無しさん mailto:sage [2012/08/16(木) 23:29:09.85 ] のんろーかるってなんぞ?
390 名前:デフォルトの名無しさん mailto:sage [2012/08/16(木) 23:29:37.78 ] nonlocal使った具体的なソースがみたい
391 名前:デフォルトの名無しさん mailto:sage [2012/08/16(木) 23:30:33.43 ] さぁ、これでまたパイソニストの数が減ったかな。 ラムダは貧弱だし、スコープはおかしいし、 単純にラムダ多用が当たり前の今の風潮に向いて無い言語なんだよね。 ラムダはスコープが重要になってくるし、しかもそのラムダ自体が貧弱なのだから。
392 名前:デフォルトの名無しさん mailto:sage [2012/08/16(木) 23:31:54.33 ] はい勝利宣言はいりました
393 名前:デフォルトの名無しさん mailto:sage [2012/08/16(木) 23:35:12.23 ] こりゃラムダ
394 名前:デフォルトの名無しさん mailto:sage [2012/08/16(木) 23:37:44.86 ] これだけは断言できる 今日一日で関数型言語を嫌う人間は確実に増えた
395 名前:デフォルトの名無しさん mailto:sage [2012/08/16(木) 23:44:43.34 ] Pythonのリスト内包は見にくくて、Rubyの関数型の記述は見やすいの?
396 名前:デフォルトの名無しさん mailto:sage [2012/08/16(木) 23:51:58.10 ] 仮にPythonのラムダが強化されて無名関数が作れるようになったとしても、 こんどは代入の有る無しでスコープが切り替わる変な仕様が牙をむいてくる。 ことラムダに関してはPythonは2重に詰んでいる。 逆にその辺を何故かうまくかいくぐったJSの先見の明には驚かされる。 シンプルで素直な言語仕様が生きたな。 Cにも通ずるものがある。
397 名前:デフォルトの名無しさん mailto:sage [2012/08/17(金) 00:07:03.34 ] >>390 クロージャでよくある例として、関数が呼び出された回数を数えるカウンタ ここではデコレータで、カウントしたい関数をデコレートして実現してみた Python2.x:参照が読めるだけだからリストを使う ideone.com/aa0et Python3.x:nonlocalで宣言した外側の変数に代入できる ideone.com/8C3tB
398 名前:デフォルトの名無しさん [2012/08/17(金) 00:13:45.80 ] c = 0 def f(): nonlocal c c += 1 print(c) f() つかこれは動かないけどw メソッドの内部にはない変数はまた別ってこと?
399 名前:デフォルトの名無しさん mailto:sage [2012/08/17(金) 00:15:21.58 ] それはnonlocalじゃなくてglobal。Python2.xから出来る
400 名前:デフォルトの名無しさん [2012/08/17(金) 00:19:40.50 ] www.python.jp/doc/release/tutorial/index.html チュートリアルにデコレータないんだけどなんなの
401 名前:uy [2012/08/17(金) 00:21:22.59 ] うえ ちょっと試したけどPythonきも これはrubyで余裕で勝てる
402 名前:デフォルトの名無しさん mailto:sage [2012/08/17(金) 00:26:22.46 ] デコレータは使い方が色々あって重いし、なくても当面はなんとかなるからな チュートリアルに載ってないことなんてナンボでもあるべ
403 名前:デフォルトの名無しさん mailto:sage [2012/08/17(金) 00:30:07.04 ] いちおー言っとくけど重いってのは学習のことね
404 名前:デフォルトの名無しさん mailto:sage [2012/08/17(金) 00:37:20.38 ] ちなみにPythonスレに2タブのコードを貼ると掘られます
405 名前:デフォルトの名無しさん mailto:sage [2012/08/17(金) 00:45:42.98 ] >>391 減るわけないじゃん。 >>385 を論破してみろよ
406 名前:デフォルトの名無しさん mailto:sage [2012/08/17(金) 00:54:36.95 ] 代入で宣言を兼ねるのは問題が全く無いワケではないが、彼はそれについて全く説明できていないんだよなあ。 面白いから答え書かずに眺めておこう。
407 名前:デフォルトの名無しさん mailto:sage [2012/08/17(金) 00:59:43.48 ] はいはい、頭良いフリはいいからROMってろよ
408 名前:デフォルトの名無しさん mailto:sage [2012/08/17(金) 01:11:43.19 ] >>405 代入で宣言を代用する方式は、ネストスコープを持つ最近の言語には殆ど採用されて無い、 というか、俺は見たことが無い。優れた方式ならもっと採用されているはずだろ。
409 名前:デフォルトの名無しさん mailto:sage [2012/08/17(金) 01:18:03.74 ] >>407 バカですが何か
410 名前:デフォルトの名無しさん mailto:sage [2012/08/17(金) 01:35:29.44 ] >>408 そのレスだけでは詭弁でしかない
411 名前:デフォルトの名無しさん mailto:sage [2012/08/17(金) 01:39:45.14 ] 採用されてれば優れてるのか Python自体はあちこちにそこそこ採用されてるからやっぱり優れた言語なんだな
412 名前:デフォルトの名無しさん mailto:sage [2012/08/17(金) 01:59:31.43 ] >>410 どこが詭弁なんだよ。 Pythonが出来た時代にはこんなにラムダが多用されるようになるとは 夢にも思わなかったんだろうよ。 だから、インナー関数は殆ど使われないし、ネストスコープもそんなに現れない、 そういう前提で、代入で宣言を代用したんだろう。 ところが、世の中ラムダだらけ、スコープだらけになってしまった。 時代を読むのは難しいが、ネスケ社が片手間に作ったJSがその辺上手に切り抜けているから 言い訳は出来ないわ。やはり言語仕様はシンプルで素直なのが一番。 当時の常識で変に捻ると後々邪魔になる。
413 名前:デフォルトの名無しさん mailto:sage [2012/08/17(金) 02:05:54.04 ] JSのどこがシンプルなんだよ。JSの本にもクセがあると書いてあるくらいなのに まず、Pythonでも普通にラムダは使うし、他の言語より使わないとしたらそれはリスト内包表記が便利だからだよ
414 名前:デフォルトの名無しさん mailto:sage [2012/08/17(金) 02:08:22.62 ] JSの何をもってシンプルと言ってるのか分からない 自分が好き=シンプルなのか?
415 名前:デフォルトの名無しさん mailto:sage [2012/08/17(金) 02:10:14.31 ] >>413 Pythonのラムダって、あの式しか書けないやつですか?
416 名前:デフォルトの名無しさん mailto:sage [2012/08/17(金) 02:10:46.27 ] >>413 どっちかっつーと機能制限のせいだと思う、というか自分はそれがあるから内部関数のほうが多い 今は三項if式があるから昔よりマシになったけど、文が書けないってのは何気にキツいと思う
417 名前:uY ◆gXFLM6waxs mailto:sage [2012/08/17(金) 02:12:07.39 ] なんでこのスレ今日はこんなにヒートアップしてんの ちょっと落ち着けば? img.pics.livedoor.com/011/c/6/c6a670a71f0ef9867635.gif img.pics.livedoor.com/012/8/8/880651e544c143b0cbce.jpg
418 名前:デフォルトの名無しさん mailto:sage [2012/08/17(金) 02:13:45.30 ] CoffeeScript はプログラミング言語のひとつである。コードはJavaScript のコードに変換される Ruby や Python、Haskell から影響を受けたシンタックスシュガーの導入により、JavaScript に比べ簡潔さと可読性を向上させた ワロタ
419 名前:デフォルトの名無しさん mailto:sage [2012/08/17(金) 02:16:05.29 ] ラムダを多用ってどこの誰が多用してんの?
420 名前:デフォルトの名無しさん mailto:sage [2012/08/17(金) 02:19:28.36 ] 最近の言語と言ってるが、最近の言語で言語仕様がシンプルなんてなくね? JSがシンプルというのも甚だ疑問だけど、他の最近の言語だって全然シンプルじゃないだろ
421 名前:デフォルトの名無しさん mailto:sage [2012/08/17(金) 02:20:53.14 ] >>419 関数型では多用するけど、手続き型では代替手段を使うことのほうが多いよね PerlやRubyはブロックだし、Pythonはforイテレータやリスト内包、ジェネレータ式や内部関数 強いて言えば無名関数リテラルでやるJSくらいじゃないか?当て嵌まるのって
422 名前:デフォルトの名無しさん mailto:sage [2012/08/17(金) 02:25:00.28 ] 俺は式の途中で関数オブジェクトが入るべき場所に 巨大なラムダをねじ込む方が明らかに醜いと思うけど
423 名前:デフォルトの名無しさん mailto:sage [2012/08/17(金) 02:27:11.15 ] >>421 え、このスレでは、Rubyのブロックをラムダって言ったら怒られるわけ?
424 名前:デフォルトの名無しさん mailto:sage [2012/08/17(金) 02:29:13.98 ] 式で表現できるくらいならまだしも、ある程度まとまった機能を分けるのは当然のことだと思うけど 関数定義してはいけないという宗教の人は酷いコードを書いてそうだな
425 名前:uY ◆gXFLM6waxs mailto:sage [2012/08/17(金) 02:33:33.57 ] 俺様から言わせてもらうとラムダとオブジェクト指向は相性悪いと思うよ ある程度まで大きな処理になるならラムダじゃなくてクラスにするべきなんだよ そこら辺のさじ加減を間違えるとゴミ
426 名前:デフォルトの名無しさん mailto:sage [2012/08/17(金) 02:35:21.78 ] >>424 嫌だよ。俺の感覚だと、ラムダはfor文やif文に続くブロックと同じ扱いだから。 あそこを名前つけて関数化したいやつはおるまい。
427 名前:デフォルトの名無しさん mailto:sage [2012/08/17(金) 02:40:31.77 ] それはお前の感覚が完璧に間違ってるだけ
428 名前:デフォルトの名無しさん mailto:sage [2012/08/17(金) 02:45:41.20 ] >>423 Rubyのブロックはそれ自体ではまだ値ではないからな オマケにラムダは別で存在するし
429 名前:uY ◆gXFLM6waxs mailto:sage [2012/08/17(金) 02:57:30.07 ] むしろrubyのブロックは標準では(ラムダ)lambdaじゃなくてprocだよ lambdaを渡す事も出来るってだけで別物
430 名前:デフォルトの名無しさん mailto:sage [2012/08/17(金) 03:02:03.44 ] >>429 いや{|v| }の段階ではまだprocですらないだろ ただのメソッド呼び出しの一部でしかない
431 名前:デフォルトの名無しさん [2012/08/17(金) 08:56:29.28 ] Ruby(笑) スレタイ見えない馬鹿がいる
432 名前:デフォルトの名無しさん mailto:sage [2012/08/17(金) 09:09:32.70 ] 良くも悪くもRubyはこのスレの主役
433 名前:デフォルトの名無しさん mailto:sage [2012/08/17(金) 09:33:25.47 ] スレタイにRubyが入っていないのは永久欠番だから?
434 名前:uY ◆gXFLM6waxs mailto:sage [2012/08/17(金) 10:08:49.41 ] 勝ち抜け
435 名前:デフォルトの名無しさん mailto:sage [2012/08/17(金) 10:51:41.54 ] >>433 どこぞのクソコテのせい。
436 名前:uY ◆gXFLM6waxs [2012/08/17(金) 11:22:36.94 ] 使えば使うほど他言語との差を感じる rubyをはじめ動的言語は型情報がない分、ソースを書くのが楽だから 静的言語だと作業時間や労力的に見て 絶対にかけないようなシステムが構築できると思う 人間は例外なくプログラミング言語を完璧には使いこなせないので 「理論的に出来る」じゃ、出来ないんだ 動的言語がオモチャだなんてとんでもない 型エラーで悩まされることのない動的言語はやばいぞ
437 名前:デフォルトの名無しさん mailto:sage [2012/08/17(金) 22:35:04.98 ] ねぇーよ。動的言語なんてIDE直結の開発できねえから大規模な開発なんて不可能に決まってんだろ。 コーディングの量が多くても潜在バグを探知できるから静的型付けは生産性が高いんだ。 JavaScriptでバグがでようがでまいがどうでもいい箇所しか使い道なんて無いんだよ動的型付けは。 RubyやPythonでサーバーサイドなんえ実用性とか全くない。
438 名前:デフォルトの名無しさん [2012/08/17(金) 22:39:12.61 ] IDEだと静的言語でも今時のテンプレートバリバリのソースとか うまく扱えないだろ? あの手の環境って時代遅れかもよ?
439 名前:uY ◆gXFLM6waxs [2012/08/17(金) 23:12:05.26 ] やってる奴もいるのに不可能とか言われてもね 動的言語で大規模開発できる奴らはスキル低くないんだってば
440 名前:uY ◆gXFLM6waxs [2012/08/17(金) 23:25:37.50 ] 動的言語と静的言語を比べる時に なんか静的言語ならバグが混入しないみたいな事言ってる奴いるけど 凄い勘違いだと思う 実際はただ混入しやすいバグの種類が違うだけ
441 名前:デフォルトの名無しさん mailto:sage [2012/08/18(土) 00:41:53.89 ] 韓国最大手の釜山貯蓄銀行が破産。自己資本比率は驚異の-50.29% engawa.2ch.net/test/read.cgi/poverty/1345217353/ 釜山(プサン)地方裁判所は16日、債務超過に陥った釜山貯蓄銀行に対し、破産を宣告しました。 釜山貯蓄銀行は去年2月17日に営業停止処分を受けたのに続き、去年4月29日には、BIS=国際決済銀行による 自己資本比率がマイナス50.29%と、健全性を示す基準の1%を大幅に下回っていたため、 不健全金融機関に指定されました。 当時、釜山貯蓄銀行の資産総額は1兆3000億ウォン、借金は3兆5000億ウォンで、 資本金の増額や第三者による買収など経営改善の可能性も低いことから、 管財人が清算に向けて破産を申請していました。 5000万ウォン以下の預金資産や優良資産などはすでにブリッジバンクのイェソル貯蓄銀行に引き継がれており、 破産宣告により、釜山貯蓄銀行に5000万ウォンを超える預金を預けている 預金者と後順位の債権者は、破産手続きによる配当を受けることになりますが、 残った資産を処分しても、配当として受け取る資金はほとんどないものとみられます。 ただ、5000万ウォン未満の預金者は、今後もイェソル貯蓄銀行の管理のもとで、金融取り引きを続けることができます。 これに先立ち、今月14日には第一(チェイル)、第一2、プライム相互貯蓄銀行が ソウル中央地方裁判所に破産申請を行っており、 トマト貯蓄銀行とパランセ貯蓄銀行もすでに先月、裁判所に破産を申請しています。 world.kbs.co.kr/japanese/news/news_Dm_detail.htm?No=44906
442 名前:デフォルトの名無しさん [2012/08/18(土) 00:46:48.57 ] z
443 名前:デフォルトの名無しさん mailto:sage [2012/08/18(土) 01:02:28.22 ] >>419 LLがどうとかおいておくとC#とか?あとPowerShellもか
444 名前:デフォルトの名無しさん [2012/08/18(土) 01:37:03.91 ] >>443 お前それマジなの?
445 名前:デフォルトの名無しさん mailto:sage [2012/08/18(土) 01:43:56.23 ] PyPyのSTM早く来てぇ
446 名前:デフォルトの名無しさん mailto:sage [2012/08/18(土) 02:02:51.80 ] >>444 2ch総力を上げてもいいのよ?
447 名前:デフォルトの名無しさん mailto:sage [2012/08/18(土) 02:24:21.07 ] 韓国経済が急激に失速している。一番の原因は、これまで韓国経済を引っ張ってきた原動力である輸出に陰りが見え始めたためだ。 輸出に次いで内需の鈍化も懸念されている。住宅価格の下落とそれに伴う消費や投資の抑制がみられ、バブル崩壊以降日本が苦しんだ 「日本型長期デフレ」の兆候が現れている、との指摘も少なくない。 ■好調に見えたのはヒュンダイやサムスンだけ 韓国の輸出は、2012年7月の通関ベースで前年同月に比べて8.8%減と大きく減った。マイナス幅は3年ぶりの高い数値だという。 これまで韓国の輸出をけん引してきた自動車の輸出が頭打ちになったのをはじめ、船舶や石油化学製品、携帯電話など主力製品の輸出が急速に落ち込んだ。 韓国の輸出額は国内総生産(GDP)対比で50%を超える。「輸出国」といわれる日本でもGDP対比では10%半ばだから、輸出依存度の高さは圧倒的だ。 そのため、輸出の不振は即韓国経済の失速に直結する。 なかでも韓国経済を支えてきたのが欧州連合(EU)向けの輸出。EUとは自由貿易協定(FTA)を結んでいる。そのEU向けが12年1〜6月期には前年同期に 比べて16.0%も減った。EU諸国の債務危機から発した景気低迷が影響した。 さらには中国向けも1.2%減った。第一生命経済研究所経済調査部の主任エコノミスト、西?徹氏は、「中国向け輸出の減少はボディブローのように効いています」と話す 。韓国の素材や部品メーカーは中国を介して、間接的にEU向け輸出を増やしてきたからだ。 headlines.yahoo.co.jp/hl?a=20120817-00000006-jct-bus_all
448 名前:デフォルトの名無しさん mailto:sage [2012/08/18(土) 04:18:00.22 ] まー、Twitter社がRuby捨てたっていう事実関係は大きいよな。
449 名前:デフォルトの名無しさん mailto:sage [2012/08/18(土) 04:30:22.45 ] え、なにが ツイッター潰せばいいだけでしょ
450 名前:デフォルトの名無しさん mailto:sage [2012/08/18(土) 09:45:36.90 ] >>443 テキトー抜かすな
451 名前:デフォルトの名無しさん mailto:sage [2012/08/18(土) 11:28:02.65 ] TwitterはRuby捨ててJavaに移りましたよ。 動的型付け言語に人生をかけてるuvさんもきっとどこかに捨てられたんでしょうね。
452 名前:デフォルトの名無しさん mailto:sage [2012/08/18(土) 11:35:57.91 ] 関数の引数不正、演算の型不一致は静的ならエラーを吐いてくれる。 型宣言がソースが長くなるだけの無用なものとか言ってるやつらは開発なんてしたことがないエセプログラマー。 オブジェクト指向言語でわざわざpublicとかの修飾子つけるのが無駄だとしか思ってないんだろうな
453 名前:デフォルトの名無しさん mailto:sage [2012/08/18(土) 12:02:57.81 ] そらRubyは捨てられるでしょ。 可読性ゼロの変態文法だし、アプデするごとに互換性なくなるんだもんw
454 名前:デフォルトの名無しさん mailto:sage [2012/08/18(土) 12:06:16.28 ] 静的言語ってウンkばっかなんだよな Goには頑張って欲しい
455 名前:デフォルトの名無しさん mailto:sage [2012/08/18(土) 12:22:28.86 ] Xtend使えばJavaの冗長さも大半解消されるわけで
456 名前:デフォルトの名無しさん mailto:sage [2012/08/18(土) 12:28:14.05 ] >>452 型チェックがないと簡単にバグってしまうような技術レベルなら それこそエセですよ
457 名前:デフォルトの名無しさん mailto:sage [2012/08/18(土) 12:45:51.68 ] 多分452と456とでは想定してるコードの規模が全く噛み合ってない
458 名前:デフォルトの名無しさん mailto:sage [2012/08/18(土) 13:15:12.79 ] >>453 言語仕様が変だというのが捨てる理由なら、真っ先にPHPのシェアが0に なってなければ変なんだけどwwwwwwww
459 名前:デフォルトの名無しさん mailto:sage [2012/08/18(土) 14:03:14.72 ] >>448 捨ててないよ Rubyのエンジニアが多いからこれからも使っていくみたいだよ
460 名前:uy [2012/08/18(土) 14:14:03.81 ] なんていうかわかったんだけどさ 言語の互換性ってそれほど大きな問題でもない気がする 仕様変わっても1日あればバグ全部とれるわ それにrubyは順調にひろまってるwww 評判がわるいガラパゴスは2chだけwwww
461 名前:デフォルトの名無しさん mailto:sage [2012/08/18(土) 15:05:28.42 ] Rubyって韓流と同じ臭いがする 流行ってる、流行ってるっていうけどRuby使ってるヤツなんか見たこと無い
462 名前:デフォルトの名無しさん mailto:sage [2012/08/18(土) 15:07:25.28 ] rubyでめし食っててスマン
463 名前:デフォルトの名無しさん mailto:sage [2012/08/18(土) 15:11:58.61 ] 参考資料に https://github.com/languages JavaScript 20% Ruby 14% Python 9% Shell 8% Java 8% PHP 7% C 6% C++ 4% Perl 4% Objective-C 3% JavaScript相変わらずつよす
464 名前:デフォルトの名無しさん mailto:sage [2012/08/18(土) 15:26:32.95 ] >>463 それってプロジェクト数で出してるのかなぁ。そしたら使い捨てほど上に来やすいと納得。
465 名前:デフォルトの名無しさん mailto:sage [2012/08/18(土) 15:27:47.86 ] どーいう集計のしかただよw。 Rubyが高いとか捏造ランキング乙w >>462 え?なに?ウンコでも食ってんのRuby使いは?
466 名前:uy [2012/08/18(土) 15:38:52.03 ] だってgithubってこういう認識だもの・・・ d.hatena.ne.jp/keyword/GitHub Rails や RSpec 等、また gems.github.com/ の Rubygems のレポジトリソース等、Ruby 関係のライブラリの コードを中心とした様々なオープンソースの開発の場所ともなっている。 それに 「参考資料に https://github.com/languages 」というのは実は www.infoq.com/jp/news/2011/04/github-2m > 言語に関する統計ページがあるが、これは > プロジェクト数ではなくコード行数をカウントしている。 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
467 名前:デフォルトの名無しさん [2012/08/18(土) 15:48:55.18 ] え? コード行数でカウントしててruby2位って相当じゃねーの
468 名前:デフォルトの名無しさん mailto:sage [2012/08/18(土) 15:53:27.80 ] Rubyのスパゲッティっぷりを証明してるサイトってことか。
469 名前:uY mailto:sage [2012/08/18(土) 15:53:45.61 ] 念のため d.hatena.ne.jp/keyword/GitHub >git のプロジェクトホスティングサービス。Rails で作成されており、使いやすいインターフェイスが特徴。 ~~~~~~~ R a i l s ~~~~~~~~~~~
470 名前:デフォルトの名無しさん mailto:sage [2012/08/18(土) 15:57:38.08 ] じゃあZopeで作成されたプロジェクトホスティングサービスの統計を 調べればいいんじゃね? ところで、どこにあるん?
471 名前:デフォルトの名無しさん mailto:sage [2012/08/18(土) 16:02:57.25 ] おいやめろ >>467 行数でカウントしたいならこっちか www.ohloh.net/languages?query=&sort=code
472 名前:デフォルトの名無しさん [2012/08/18(土) 16:19:16.14 ] ___ /| | ||. |∧_∧| ||. (´・ω・| うわっ、クソスレに来てしまった。 ||oと. U| || |(__)J| ||/ ̄ ̄ ___ | | | | | o| | | | | 彡 ̄ ̄ パタン、
473 名前:uy [2012/08/18(土) 16:29:17.41 ] 行数でカウントなんてプロっぽくないな。 ステップ数でカウントと言おう Rubyはステップ数が多い。
474 名前:デフォルトの名無しさん mailto:sage [2012/08/18(土) 17:08:37.68 ] RubyやPythonなんて使ってる時点でプロじゃねぇだろw
475 名前:デフォルトの名無しさん mailto:sage [2012/08/18(土) 17:22:25.77 ] そもそもプロってなんだよ、みんなプロぐらまーだよってか?
476 名前:デフォルトの名無しさん mailto:sage [2012/08/18(土) 17:35:21.01 ] プロならスクリプティング言語じゃなくてプログラミング言語と言いたいわけですね。
477 名前:デフォルトの名無しさん mailto:sage [2012/08/18(土) 17:36:33.02 ] かぶってたはずかしい
478 名前:デフォルトの名無しさん mailto:sage [2012/08/18(土) 17:57:03.32 ] いやいや、君のオヤジギャグの方がクールだよぉ〜 オレのは余計サブくなったけど・・・
479 名前:デフォルトの名無しさん [2012/08/18(土) 18:11:35.41 ] i="" if(i) puts "true" else puts "false" end; なんでtrueになるの?
480 名前:uY ◆gXFLM6waxs mailto:sage [2012/08/18(土) 18:43:59.73 ] 空っぽになっても自分を曲げたくないからだよ
481 名前:デフォルトの名無しさん mailto:sage [2012/08/18(土) 20:03:14.87 ] サブッ・・
482 名前:uY [2012/08/18(土) 22:10:47.15 ] ha?
483 名前:デフォルトの名無しさん mailto:sage [2012/08/18(土) 23:23:57.45 ] Lisp由来の、非nilはすべて真ルールは なかなかうまく機能する
484 名前:デフォルトの名無しさん [2012/08/19(日) 01:06:57.21 ] blank? が欲しい時はあるけどね
485 名前:デフォルトの名無しさん mailto:sage [2012/08/19(日) 01:28:14.60 ] blank?ってどういう意味?
486 名前:uy [2012/08/19(日) 01:36:50.63 ] (頭が)空っぽ?って意味だよw
487 名前:デフォルトの名無しさん mailto:sage [2012/08/19(日) 03:42:32.99 ] 白板
488 名前:デフォルトの名無しさん [2012/08/19(日) 04:18:39.97 ] >>479 文字のインスタンスがあるから
489 名前:デフォルトの名無しさん [2012/08/19(日) 04:21:03.00 ] ruby流行ってるていうのはステマ まわりでruby使ってるやつみたことない
490 名前:デフォルトの名無しさん mailto:sage [2012/08/19(日) 04:39:40.97 ] >>484 もし空文字列(長さがゼロの文字列)かどうか調べるならString#empty?があるよ
491 名前:デフォルトの名無しさん mailto:sage [2012/08/19(日) 05:37:53.95 ] 使ってる人の声が大きいんだろう
492 名前:uY ◆gXFLM6waxs mailto:sage [2012/08/19(日) 06:10:13.39 ] >>489 かわいそう
493 名前:デフォルトの名無しさん [2012/08/19(日) 07:03:19.28 ] rubyさいきょう