1 名前:デフォルトの名無しさん mailto:sage [2012/01/12(木) 13:14:17.03 ] 最強のLL=軽量プログラム言語は、どれよ? エントリーは、Perl、PHP、Python、Ruby、JavaScript・・・ さあ、死ぬまで語りやがれ!!! ■LLとは? 軽量プログラミング言語(Lightweight Language,LL)とは、取り回しに優れ、 コードの作成や修正が容易と見なされるプログラミング言語のことを指す。 ここでいう「軽さ」はプログラマの負担の軽重を指し、 実行速度に優れているという意味ではない。 現在の水準では ・インタプリタ ・動的型 ・正規表現 ・クロージャ などを利用できるものがLLと呼ばれることが多い。(Wikipediaより) 前スレ 【Perl,PHP】LLバトルロワイヤル19【Ruby,Python】 toro.2ch.net/test/read.cgi/tech/1320405770/
552 名前:デフォルトの名無しさん mailto:sage [2012/02/09(木) 23:33:51.71 ] >>550 Rubyと同じ実装方法ではRails作れないかもね 別の実装方法を考えるだけでしょ Rubyと同じ実装方法でRailsを作らないと、 PythonでRailsを実装できないって考えた理由は?
553 名前:デフォルトの名無しさん mailto:sage [2012/02/09(木) 23:43:40.40 ] >>545 仮定を元にした未来予測なら、のび太くんにもできる ・DHHがRailsの開発に着手した時点で、すでにPythonは存在した ・にもかかわらず、DHHはRailsの実装言語として(Pythonではなく)Rubyを選んだ、 というのが事実だ のび太くん、もっと現実見なよ(AA略
554 名前:デフォルトの名無しさん mailto:sage [2012/02/09(木) 23:45:52.50 ] >>552 もし表層的なIFだけ似たようなものを作るということであれば、 理論的には、どんな言語でも実装可能なんだろうなぁとは思ってるんだけど、 メタプロがないと、かなり実装が大変なことになるんじゃなかと思って
555 名前:デフォルトの名無しさん mailto:sage [2012/02/09(木) 23:51:48.99 ] >>546 お題は、二分岐/多分岐/局所宣言の3つあって、 それぞれについてRuby/Standard ML/Haskell/Pythonでコードを示す [二分岐] ==== Ruby: 前スレ>>682 (上段) ==== ys = xs.select { |x| if test if test_1 then test_1_1 else test_1_2 end else if test_2 then test_2_1 else test_2_2 end end } ==== Standard ML: 前スレ>>772 ==== val ys = filter ( fn x => if test x then ( if test_1 then test_1_1 else test_1_2 ) else ( if test_2 then test_2_1 else test_2_2 ) ) xs (続く)
556 名前:デフォルトの名無しさん mailto:sage [2012/02/09(木) 23:52:05.07 ] PHPはCに似てるっていう奴がいるけど動作がメタメタなんだよ。 よっぽど変態文法のPerlの方がCに近く感じる。
557 名前:デフォルトの名無しさん mailto:sage [2012/02/09(木) 23:52:14.63 ] あーらら、話をずらしちゃった 反論できないのかね >>504 の > 以下の事実を忘れずに > ・RubyがあったからこそRailsが生まれた の「Rubyがあったからこそ」はおかしいと思って、 RubyがなくてもDHHはRailsを作っていたと思うよっていうために >>545 で > RubyがなかったらDHHが作ったのはPython Railsだったと思うよ > って言った方がいい? って書いたんだけど、最後の反論が > ・DHHがRailsの開発に着手した時点で、すでにPythonは存在した > ・にもかかわらず、DHHはRailsの実装言語として(Pythonではなく)Rubyを選んだ、 これか。 「Rubyがあったからこそ」っていうのは言い過ぎだと思うよって言いたいんだけど、 反論できる?知能障害起こさず続けれる?火病起こすようなら、もう止めるよ? 自分が何を言い出したかを無視して相手を貶めようと必死ですな
558 名前:デフォルトの名無しさん mailto:sage [2012/02/09(木) 23:52:52.67 ] (>>555 の続き) ==== Haskell: 前スレ>>767 ==== ys1 = [x | x <- xs1, if test x then if test_1 then test_1_1 else test_1_2 else if test_2 then test_2_1 else test_2_2 ] ==== Python: 前スレ>>695 (上段) ==== ys = [ x for x in xs if ( (test1_1 if test1 else test1_2) if test else (test2_1 if test2 else test2_2) ) ] (多分岐に続く)
559 名前:デフォルトの名無しさん mailto:sage [2012/02/09(木) 23:58:16.75 ] で、 だれが、どこで 「あんなのは俺にだってできた」と語っていると思ったの? 「だれが」「どこで」の2点を明確にしてレスしてよ 誰も語っていないことを、語ったかのように偉そうに〜〜と語るのは三流の証 って言ったの?メクラカス
560 名前:デフォルトの名無しさん [2012/02/10(金) 00:00:27.07 ] Pythonは書き方が普通じゃないからキモくて普及しない
561 名前:デフォルトの名無しさん mailto:sage [2012/02/10(金) 00:03:34.84 ] (>>558 の続き) [多分岐] ==== Ruby: 前スレ>>719 ==== ys = xs.select { |color| case color when :green true when :yellow true when :red false else raise RuntimeError end } ==== Standard ML: 前スレ>>772 ==== datatype Color = Green | Yellow | Red val ys = filter ( fn x => case x of Green => true | Yellow => true | Red => false ) xs (続く)
562 名前:デフォルトの名無しさん mailto:sage [2012/02/10(金) 00:04:56.67 ] (>>561 の続き) ==== Haskell: 前スレ>>767 ==== data Color = Green | Yellow | Red ys2 = [x | x <- xs2, case x of Green -> True Yellow -> True Red -> False ] ==== Python: 前スレ>>728 ==== ys = (x for x in xs if { 'green': True, 'yellow' : True, 'red' : False }[x] ) (局所宣言に続く)
563 名前: 忍法帖【Lv=35,xxxPT】 mailto:sage [2012/02/10(金) 00:05:30.63 ] 割り込みの術 忍忍
564 名前: 忍法帖【Lv=35,xxxPT】 mailto:sage [2012/02/10(金) 00:06:05.80 ] 忍忍
565 名前:デフォルトの名無しさん mailto:sage [2012/02/10(金) 00:06:23.43 ] (>>562 の続き) [局所宣言] ==== Ruby: 前スレ>>710 ==== 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 } ==== Standard ML: 前スレ>>772 ==== 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 (続く)
566 名前:デフォルトの名無しさん mailto:sage [2012/02/10(金) 00:07:47.10 ] (>>565 の続き) ==== Haskell: 前スレ>>767 ==== data Option a = None | Some a ys3 = [fn x | x <- xs3] 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) ==== Python: 前スレ>>714 ==== 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]) (これで終わり)
567 名前:デフォルトの名無しさん mailto:sage [2012/02/10(金) 00:54:34.24 ] >>557 ,559 あーあ、これまでは冷静なカキコだったのに、ついには感情を爆発させちゃったのね.... >「Rubyがあったからこそ」っていうのは言い過ぎだと思うよって言いたいんだけど、 であるなら、それを>>545 で書けばよかった こちらはエスパーではないんでね >>545 の仮定を元にした主張は詭弁である、と言いたかったんだけど分かってもらえなかったようだ もちろん>>504 の「RubyがあったからこそRailsが生まれた」という意見は自分の主観であるけれど、 DHH自身はその著書の中で、 ・Rubyのウリは簡潔さであり、アイデアを自然な形で表現できる ・Rubyのパワーによって、Railsの設計哲学であるDRYを実践している と語っている いずれにせよ、「DHHが(Pythonではなく)Rubyを選んだ」という事実に変わりはない
568 名前:デフォルトの名無しさん mailto:sage [2012/02/10(金) 01:02:52.71 ] 自分に都合の悪いことは見ようとしませんか >>559 は>>551 の最後をコピペしただけなんだけどね やれやれ
569 名前:デフォルトの名無しさん mailto:sage [2012/02/10(金) 01:40:13.03 ] 実際にコード例出しての戦いは面白いな あんまりないけど 昔あったマルコフ連鎖の実装合戦面白かった 偉そうなこと書いてるやつがコード実際に書くとぜんぜんダメだったり
570 名前:デフォルトの名無しさん mailto:sage [2012/02/10(金) 01:41:51.39 ] マルコフ連鎖がダメって高卒かよ
571 名前:デフォルトの名無しさん mailto:sage [2012/02/10(金) 01:49:59.27 ] そこまでは知らん
572 名前:デフォルトの名無しさん mailto:sage [2012/02/10(金) 02:03:06.89 ] デバッグの補助だと、bash,awk,sedあたり。 日常的に使わざるをえないならば、構文糖衣の多いperlがいい 下手にグルーだとかウェブ系だとかドメインを広げるとかえって使い勝手が悪い件
573 名前:デフォルトの名無しさん mailto:sage [2012/02/10(金) 02:20:19.58 ] >>567 >いずれにせよ、「DHHが(Pythonではなく)Rubyを選んだ」という事実に変わりはない DHHは自分で積極的にRubyを選んだというよりは、達人プログラマーたちに 勧められたからRubyを選んだだけ。本人がそう言っている。 ただ、PythonでもRailsが生まれたかというと、そうは思わない。 1.years.ago みたいに組み込みクラスを拡張しまくるのはPythonではできないし、 PythonにはRubyのブロックがないからDSLの設計が大きく制限される。 だから自由度の高いRubyならRailsみたいな尖ったフレームワークが作れるけど、 Pythonだとおとなしいのしかできないから、世界を席巻するようなブームは起こせなかったと思うよ。 それを考えると、>>557 の > ・RubyがあったからこそRailsが生まれた は、わりと当たってる。 そういう意味では、Zopeが世界を取れずに失速したのは、RubyじゃなくてPythonだったからと言えなくもない。 という回答でいいかな?>>552
574 名前:デフォルトの名無しさん mailto:sage [2012/02/10(金) 02:46:22.32 ] Pythonでメタプロ出来ないと思ってる人がいるみたいだけど なんでそう思うに至ったのかの経緯に興味あるな 池沼かもな
575 名前:デフォルトの名無しさん mailto:sage [2012/02/10(金) 05:29:46.32 ] その辺の経緯は何度か紹介されてるから ぐぐれば出るはず……と思ったら出た いくつか検討したが、Rubyが一番しっくり来たという話らしい gihyo.jp/dev/serial/01/alpha-geek/0004
576 名前:デフォルトの名無しさん mailto:sage [2012/02/10(金) 08:05:09.60 ] >>566 コピペありがとう。 ぶっちゃけ殆ど差が無い気がするけど、なんで > 条件分岐と反復という極めて単純なコードだ > それにもかかわらず、Pythonでは可読性の悪いコードしか書けなかったから、 > 「Pythonは関数型プログラミングに適していない」という結論になった って結論になったん?
577 名前:デフォルトの名無しさん mailto:sage [2012/02/10(金) 08:29:46.36 ] >>574 おまえが池沼かもな
578 名前:デフォルトの名無しさん mailto:sage [2012/02/10(金) 08:34:45.07 ] >>575 ただの一個人、しかも変人、の意見じゃん。しょぼ
579 名前:デフォルトの名無しさん mailto:sage [2012/02/10(金) 08:37:48.75 ] >>576 Pythonの3項演算子ifや内包表記のfor/inは 英語が読める人には自然に読めるが、 英語に不自由でifやforをプログラミング言語でしか 使わない人には奇妙に見えるらしい
580 名前:デフォルトの名無しさん mailto:sage [2012/02/10(金) 08:46:48.66 ] >>579 そーゆー問題じゃねえんだよあの三項演算子は… そもそも、複雑に入り組んだ文を書くと Python含めてどのプログラミング言語も 英語的になんて読み下せないワケで だったら英語的である必要性は薄い
581 名前:デフォルトの名無しさん mailto:sage [2012/02/10(金) 08:49:58.26 ] そんなのばっかり書いてるから平日のこんな時間に 2chしてるんだよ。。。
582 名前:デフォルトの名無しさん mailto:sage [2012/02/10(金) 09:09:40.28 ] pythonの三項演算子はむしろ書く時に頭を使わなくて良い Cのような書き方に慣れてる人は、単に慣れだけで批判してるんだろうけど そもそもCの三項演算子は if-then の順じゃないから不自然
583 名前:デフォルトの名無しさん mailto:sage [2012/02/10(金) 09:16:41.40 ] いやif-thenの順と言うとおかしいか。でも特にネストして書く時はpythonの方が思考の流れ的には自然 Cは条件が先行してるから : の後ろが結果なのか条件なのか決まってなくて (結果):(結果)になったり(結果):(条件)になるのは気持ち悪い
584 名前:デフォルトの名無しさん mailto:sage [2012/02/10(金) 09:19:24.56 ] 値が先行して、その後ろが常にその値に対する条件になってる方が分かりやすい、と言いかった
585 名前:デフォルトの名無しさん mailto:sage [2012/02/10(金) 09:40:03.97 ] どっちも不自然だろ haskellみたいに、ifが式ならそれでいいのに
586 名前:デフォルトの名無しさん mailto:sage [2012/02/10(金) 09:44:43.28 ] 内包表記はリスト(集合)を辿るだけだし読みやすいと思うが
587 名前:デフォルトの名無しさん mailto:sage [2012/02/10(金) 09:49:32.59 ] >>573 >ただ、PythonでもRailsが生まれたかというと、そうは思わない。 >1.years.ago みたいに組み込みクラスを拡張しまくるのはPythonではできないし、 >PythonにはRubyのブロックがないからDSLの設計が大きく制限される。 ここは同意。Railsを作れるのは、Ruby以外ならLispかSmalltalkぐらいかな。 決まりきった書き方しか許さないPythonじゃ難しいと思う。 >だから自由度の高いRubyならRailsみたいな尖ったフレームワークが作れるけど、 >Pythonだとおとなしいのしかできないから、世界を席巻するようなブームは起こせなかったと思うよ。 RoRが世界を席巻したのは事実だけど、それは技術的な要素より偶然の要素が大きいと思うなあ。 つまりは運がよかった。 と、Zope使いが負け惜しみを言ってみる。なんでZopeは世界が取れなかったんだよクソ!
588 名前:デフォルトの名無しさん mailto:sage [2012/02/10(金) 09:49:46.95 ] >>583 ネストして書く時はインデントだろ・・・ インデント強制までしたのに何やってんだよ
589 名前:デフォルトの名無しさん mailto:sage [2012/02/10(金) 09:51:07.99 ] >>588 Cみたいなのは改行インデントしないと分かりにくいってことだろ pythonはどっちでもいい
590 名前:デフォルトの名無しさん mailto:sage [2012/02/10(金) 11:58:00.93 ] 英語に不自由なRuby使い可哀想
591 名前:デフォルトの名無しさん mailto:sage [2012/02/10(金) 13:28:19.02 ] 英語が不自由でも使えるに越したことはないだろ だってここは言語の使い手を比べるスレじゃなくて 言語そのものを比べるスレなんだぜ?
592 名前:デフォルトの名無しさん mailto:sage [2012/02/10(金) 13:29:52.62 ] 自然言語の話を当て嵌めようとしても無理があるでしょ
593 名前:デフォルトの名無しさん mailto:sage [2012/02/10(金) 13:36:28.62 ] 技術者なのに英語も読めないカスの意見など 聞くに値しない
594 名前:デフォルトの名無しさん mailto:sage [2012/02/10(金) 13:56:37.57 ] 技術者なら英語くらい読めて欲しいが PythonもRubyもエンドユーザを考慮した言語だと思うぞ
595 名前:デフォルトの名無しさん mailto:sage [2012/02/10(金) 14:37:40.87 ] >>574 >Pythonでメタプロ出来ないと思ってる人がいるみたいだけど だれもそんなこと言ってないと思うけど。 #Rubyと比べるとできることに限りがあるのは事実だとしても。 なんでそう思うに至ったのかの経緯に興味あるな 池沼かもな
596 名前:デフォルトの名無しさん mailto:sage [2012/02/10(金) 15:04:36.43 ] >>577 その変人という評価は、彼にとっては最大限の賞賛に等しいと思われる 変人だからこそ、周囲の常識的には人々が考えもつかなかった革新的なアイデアを考案し、 それをRails実現という形で行動に移すことができた
597 名前:デフォルトの名無しさん mailto:sage [2012/02/10(金) 16:21:31.32 ] >>593 それで、Pythonって日本語使えるのかい?
598 名前:デフォルトの名無しさん mailto:sage [2012/02/10(金) 18:18:28.50 ] てめーら中学生レベルの英語もよめねーのかよ 単語がわかんなかったらググれカスども!
599 名前:デフォルトの名無しさん mailto:sage [2012/02/10(金) 18:26:49.17 ] 勝ち馬に乗るべき マイナー単語は使うべきではない
600 名前:デフォルトの名無しさん mailto:sage [2012/02/10(金) 18:44:15.30 ] >>599 つまり、英語もどきでプログラミングしろ、と。
601 名前:デフォルトの名無しさん mailto:sage [2012/02/10(金) 19:25:23.73 ] プログラムの可読性が低いと感じるとき、 自分が英語を読めないカスだから読み難く感じるのかもしれないという 可能性を考慮した方が良いよ
602 名前:デフォルトの名無しさん mailto:sage [2012/02/10(金) 19:27:38.65 ] よし、Pythonsitaは今後英語でカキコしよう。
603 名前:デフォルトの名無しさん mailto:sage [2012/02/10(金) 19:59:59.45 ] >>602 I'm very sorry. I was completely forgetful of the fact that Ruby programmers in Japan CANNOT read English. I didn't intend to humiliate you.
604 名前:デフォルトの名無しさん mailto:sage [2012/02/10(金) 22:29:37.03 ] >>603 必死だな。そんなにRubyとRubyistを貶めたいのか。 何がPython信者をそこまで必死にさせるのだろう。 PythonじゃRailsは生まれなかったと言われたことが、そんなに気に食わなかったのか。
605 名前:デフォルトの名無しさん mailto:sage [2012/02/10(金) 23:25:47.62 ] >>604 OK. I know why you hate Python so hard. You can learn a programming language only when there's detailed documentation in Japanese, but Python doesn't provide it. However, this fact implies that you can't compare programming languages in an equitable manner, because your prejudices come from your English skills. You seem to hate Python, but actually you do hate English.
606 名前:デフォルトの名無しさん mailto:sage [2012/02/11(土) 00:21:11.69 ] 頭デッカチなだけのボンクラ野郎どもの会話は、くだらねーし、つまんねー
607 名前:デフォルトの名無しさん mailto:sage [2012/02/11(土) 00:56:59.09 ] >>582 それはそれで英語の書き方に慣れてるからというだけでCのような書き方を批判してない?
608 名前:デフォルトの名無しさん mailto:sage [2012/02/11(土) 01:24:15.30 ] >>607 ちゃんと後のレス読めよ
609 名前:デフォルトの名無しさん mailto:sage [2012/02/11(土) 01:27:54.61 ] >>597 特に日本ではZope信者がRuby信者以上にキモい
610 名前:デフォルトの名無しさん mailto:sage [2012/02/11(土) 01:29:46.44 ] >>595 くやしかったんですね わかります
611 名前:デフォルトの名無しさん mailto:sage [2012/02/11(土) 01:32:16.31 ] pealとかrubyを好むプログラマは暗号のようなコードを美しいと思っちゃうから話にならない
612 名前:デフォルトの名無しさん mailto:sage [2012/02/11(土) 01:33:44.73 ] 便利な言い訳だな 客観的な指標で比較しないと意味ないやん
613 名前:デフォルトの名無しさん mailto:sage [2012/02/11(土) 01:35:45.51 ] 英語がどうのと言っている人はRSpecはいいと思ってる? 自分は、そこ頑張らんでもと思っちゃって。
614 名前:デフォルトの名無しさん mailto:sage [2012/02/11(土) 01:38:35.67 ] いやだからさー、pythonは客観的に読みやすいって常識だろ? pythonよりperl/rubyが読みやすいって奴いるの?
615 名前:デフォルトの名無しさん mailto:sage [2012/02/11(土) 01:42:06.24 ] >>614 心の中でそう思うのは自由だが、説得力はない
616 名前:デフォルトの名無しさん mailto:sage [2012/02/11(土) 01:42:55.81 ] >>608 すまん読んでなかった 頭の方だけ読んで分かった気になるのは良くないね
617 名前:デフォルトの名無しさん mailto:sage [2012/02/11(土) 01:45:51.68 ] いや、pythonが読みにくいと言ってる奴を見たことがない
618 名前:デフォルトの名無しさん mailto:sage [2012/02/11(土) 01:50:19.97 ] >>617 例えば「いや〜Pythonは読みやすいけど、Rubyの方がもっと読みやすいよ」 っていう誰かがここに出現したらどうするんだよ オレが思うからPythonは客観的に読みやすい、なんていう主観的な主張を続けるのか?
619 名前:デフォルトの名無しさん mailto:sage [2012/02/11(土) 01:53:56.00 ] >>618 俺の意見じゃなくて一般論の話をしてるんだけど 読みやすいとかは数値化しずらいだろうが どう見ても大多数の意見がそうなってるだろ
620 名前:デフォルトの名無しさん mailto:sage [2012/02/11(土) 01:57:16.98 ] >>605 Pythonは日本語のドキュメントあるよ。それも十分detailedなのが。 ttp://www.python.jp/doc/release/ > but Python doesn't provide it. なんていったら、翻訳してくれた人たちに失礼すぎる。 なんでそう思うに至ったのかの経緯に興味あるな 池沼かもな
621 名前:デフォルトの名無しさん mailto:sage [2012/02/11(土) 01:57:19.38 ] >>576 3つに分けて返答するよ [二分岐(>>555 ,558)] ・すでに指摘されているけど、Pythonのif式の構文は特異/異常なもの 自分の知る限り、<then> if <cond> else <false> という 構文を採用しているのはPythonだけ ・直感的に、Pythonの構文はフローチャートやPAD等の分岐図と一致しない 特にこのような分岐がネストする場合には、それが顕著になる コード全体の構造を見れば、Pythonだけが異質なのは明白 [多分岐(>>561 ,562)] ・Pyhtonには多分岐式が存在しないため、ハッシュを用いた 「トリッキー」なコードを書かなければならない ・もちろんRubyでもハッシュによる同様なコードを書けるが、 ・ハッシュを使わなければ書けないPythonと ・ハッシュを使っても使わなくても書けるRubyとの間には 表現力に雲泥の差があるのは明白 [局所宣言(>>565 ,566)] ・Ruby/ML/Haskellの間には それぞれメソッドチェーン/高階関数/リスト内包表記という差異はあるが、 それ以外の全体的なコード構造に関しては類似性がある ・異質なコードはPythonだけであり、 これはPythonに局所宣言(ブロック/let式/where節)が存在しないことに起因する これらから「Pythonは関数型プログラミングには適さない言語である」という 結論に至った
622 名前:デフォルトの名無しさん mailto:sage [2012/02/11(土) 01:58:53.48 ] 関数型プログラミングに適した言語なんて一般的には全然好まれてないじゃん
623 名前:デフォルトの名無しさん mailto:sage [2012/02/11(土) 01:59:07.22 ] >>619 >どう見ても大多数の意見がそうなってるだろ それが主観的ってことでしょ。 主観的でいいなら、「Pythonの内包表記よりRubyのメソッドチェーンの方がわかりやすい」と思う人は多数いるよ。
624 名前:デフォルトの名無しさん mailto:sage [2012/02/11(土) 02:01:05.67 ] >>619 そ、そうか。カンファレンスでアンケートでも取ったのか?
625 名前:デフォルトの名無しさん mailto:sage [2012/02/11(土) 02:01:23.67 ] >>623 だから何?pythonがrubyより読みやすいのは事実だろ。何を否定したいのか分からん rubyがpythonより読みやすいのなら、なんで「関数型プログラミング」にも適したrubyがpythonに負けてるわけ?
626 名前:621 mailto:sage [2012/02/11(土) 02:04:00.13 ] >>621 の[二分岐(>>555 ,558)]への補足として、 前スレでのPythonの異質さに関する解説をコピペする >711 名前: 682 Mail: sage 投稿日: 2011/12/29(木) 15:05:28.17 >>>695 のPythonコードが読みづらい原因はif演算子の構文にある >条件判定が式である言語に限定して、それらの構文を比較してみる > >Ruby: > if 条件式 then 式1 else 式2 end >Smalltalk: > 条件式 ifTrue: [ 式1 ] ifFalse: [ 式2 ] >Lisp: > ( if 条件式 式1 式2 ) >ML: > if 条件式 then 式1 else 式2 >Haskell: > if 条件式 then 式1 else 式2 > >Python: > 式1 if 条件式 else 式2 > >普通の言語は「条件式 -> 式1 -> 式2」と左から右へ流れる(それが自然) >それに対して「Pythonだけ」は「式1 <- 条件式 -> 式2」と >左へ右へと行ったり来たりしないとコードが読めない > >プログラミング言語界の中で「Pythonだけ」が異端な存在で、可読性の悪い構文が採用されている >これは明らかにPython開発陣の言語設計ミス、あるいは判断ミスだね
627 名前:デフォルトの名無しさん mailto:sage [2012/02/11(土) 02:08:44.16 ] >>626 お前その711の言ってることに賛成なの? 異端という言葉を使って一生懸命印象誘導してるけど、アホにしか見えない こいつが自然と言ってるのは、それがCに似てるからに過ぎない 式に条件が後続する書き方が明らかに好都合
628 名前:デフォルトの名無しさん mailto:sage [2012/02/11(土) 02:16:01.85 ] >>627 >式に条件が後続する書き方が明らかに好都合 個人的には理解不能 伝統的なif文(あるいはif式)に対して どういう利点があるのかさっぱり分からん
629 名前:デフォルトの名無しさん mailto:sage [2012/02/11(土) 02:20:38.02 ] まず一番左をみて条件式があるというのが気持ち悪い hoge = 条件式〜 って条件式が長かったら右辺値がどんな値になるのか分かんねえじゃん 結局先に後ろを見てそれで条件式を見直すことになるだろ
630 名前:621 mailto:sage [2012/02/11(土) 02:20:45.94 ] Pythonは英語風だから読みやすいという意見があるけど、本当だろうか? 日本語:もし C であれば T さもなければ F。 英語:If C then T, else F. ルビー語:if C then T else F バイソン語:T if C else F
631 名前:デフォルトの名無しさん mailto:sage [2012/02/11(土) 02:27:29.52 ] if文を読むときに ifが先頭・・・ああ、次の場合条件によって@かAのどちらかを実行しなさいってことね ifが後ろ・・・ああ、@を実行するのね―――っと思ったら例外ありかよ! みたいな感じ、個人の感覚としては
632 名前:621 mailto:sage [2012/02/11(土) 02:28:04.76 ] >>627 「世界中の皆が使っているからPythonを使うべき」という主張は、 Python信者の理屈ではなかったのかな? 同じ理屈を当てはめると、条件式に関して異端なのはPythonのほうになるけど、 違うん?
633 名前:デフォルトの名無しさん mailto:sage [2012/02/11(土) 02:30:34.29 ] >>632 意味不明。どの理屈がどうだって?
634 名前:デフォルトの名無しさん mailto:sage [2012/02/11(土) 02:30:58.26 ] >>631 英語全く読めないでしょ?
635 名前:デフォルトの名無しさん mailto:sage [2012/02/11(土) 02:36:43.79 ] >>634 ああ、結局分かりやすさではなく英語に慣れてるかどうかの問題?
636 名前:デフォルトの名無しさん mailto:sage [2012/02/11(土) 02:37:37.60 ] >>630 英語:T if C. Otherwise, F. python:T if C else F
637 名前:デフォルトの名無しさん mailto:sage [2012/02/11(土) 03:15:57.25 ] Pythonを分かりやすいと感じる理由を自分の理屈で持って解釈して主張する人もいれば 単に俺は英語に慣れてるから英語に近いPythonは英語に慣れてる分わかりやすいんだと、 突き詰めればそういうことにしかならない人もいるらしい、と、そんな感触
638 名前:621 mailto:sage [2012/02/11(土) 03:38:05.29 ] >>631 Python信者の理屈とは「みんなが使っていれば、それは正しい」だろ >>626 のコピペを見れば、 みんなが採用しているのがif <cond> then <true> else <false> であり、 それは正しい という帰結になるのは猿でも分かるよな?
639 名前:621 mailto:sage [2012/02/11(土) 03:40:46.63 ] >>636 >>630 は二分岐に関する「Pythonは英語風」に対する疑問であったけれど、 >>636 へのレスに代えて、今度は別の切り口で疑問を提起してみる まず、英語風(=自然言語風)というよりも、これは 「数学における定義と似ている」と言い換えた方が適切だろう たとえば、[多分岐(>>561 ,562)]を数式として記述すると以下のようになる f(X) = T, if X is "Green" T, if X is "Yellow" F, otherwise 確かにこれは、Pythonの <true> if <cond> .... という構文と似ている 実際Haskell文化では、>>562 (上段)よりも以下のような数式風のコードが好まれる f x | x == "Green" = true | x == "Yellow" = true | otherwise = false では、自分はPythonに詳しくないので、>>562 (下段)のコードを書き直してみてくれ Pythonが英語風で関数型プログラミングにも適しているのなら可能なはず(他の人でもいい) 論よりコードだ
640 名前:デフォルトの名無しさん mailto:sage [2012/02/11(土) 03:47:38.01 ] 後置ifは、他言語にもあるから別に変でも何でもない。 lenの方がよっぽどきもい。 __len__とか勘弁して欲しい。
641 名前:デフォルトの名無しさん mailto:sage [2012/02/11(土) 03:48:02.98 ] if <cond> then <true> else <false> が判り易いなんて思い込みだろ <true> if <cond> else <false> の方がシンプルで良いじゃん っていうか何で「ただの値を返すだけの記号」だと思えないんだろう
642 名前:デフォルトの名無しさん mailto:sage [2012/02/11(土) 03:50:50.25 ] >>640 同意 Python 始めて間もないとき "hoge".len() とか "hoge".length() とか 期待した結果が得られないのでめっちゃ悩んだ len("hoge") なんてインチキというか目から鱗というか C やってたら当たり前なんだろうけど Ruby しか知らない人には習得は厳しい言語かもしれないな
643 名前:デフォルトの名無しさん mailto:sage [2012/02/11(土) 04:08:42.78 ] >>640 他言語にもあるのかよ。>>621 に騙されちゃった
644 名前:デフォルトの名無しさん mailto:sage [2012/02/11(土) 04:13:37.65 ] lenという関数もその名前も別に不満はないが なぜ文字列やリストオブジェクトのメソッドが__len__なのかは確かに理解出来ない 結局は関数のlenしか使わない
645 名前:621 mailto:sage [2012/02/11(土) 04:21:48.61 ] >>640 >後置ifは、他言語にもあるから別に変でも何でもない。 それは話のすり替えだよ 後置if はRubyや他の言語にもあるけど、それらはすべて(式ではなく)文だ 分岐式としてのif構文が後置なのはPythonだけで、それは異端だというのが>>626 のコピペ >>__len__とか勘弁して欲しい。 だよな __init__ とか勘弁して欲しい
646 名前:デフォルトの名無しさん mailto:sage [2012/02/11(土) 04:25:14.17 ] Cやっててもきもいよ。 ほかは、メソッドになってるのになんでこれだけ関数なんだ。 どっちかに統一してほしい。
647 名前:デフォルトの名無しさん mailto:sage [2012/02/11(土) 04:25:25.24 ] >>639 誰が、pythonが関数型プログラミングに適してるって? なぜか、関数型プログラミングに適してるほうが勝利という前提で話を進めているけど それは初めから詭弁だし、お前の文章自体が何かごちゃごちゃしてるのも、その特殊な脳内を表しているの? よくpythonスレでもリスト内包にlambda式突っ込んでごちゃごちゃやってる人いるけど 無理せずに外に関数として定義してやれば何倍もスッキリするし、そうするべきだと俺は思ってるけど lambda式自体は使うべきだけど無理して使う必要ない。読む方にも迷惑
648 名前:621 mailto:sage [2012/02/11(土) 04:26:04.90 ] >>641 シンプルで良いのなら、>>639 で希望したように、 ぜひ極めてシンブルな多分岐処理に対する>>562 (下段)のトリッキーなPythonコードを シンプルで美しいコードに書き直してくれ 繰り返すけど、論よりコードだ
649 名前:デフォルトの名無しさん mailto:sage [2012/02/11(土) 04:31:31.50 ] __init__や__main__は特殊な関数と明示してるから嫌いじゃない __len__は別に特殊である必要がない >>648 他のコード見ても何をやりたいのか分からん
650 名前:621 mailto:sage [2012/02/11(土) 04:36:57.63 ] >>647 >誰が、pythonが関数型プログラミングに適してるって? >なぜか、関数型プログラミングに適してるほうが勝利という前提で話を進めているけど それは「Pythonは関数型プログラミングに適していない」という意見への賛同として 解釈してよいのかな? >よくpythonスレでもリスト内包にlambda式突っ込んでごちゃごちゃやってる人いるけど >無理せずに外に関数として定義してやれば何倍もスッキリするし、 まったくそのとおりだと自分も思う 実際、>>566 (上段)のHaskellコードは、リスト内包表記内にあるごちゃごちゃしたコードを where節を使うことで無理にせずスッキリした読みやすいものになっている >>565 のRubyやMLは内包表記ではないけれど、それぞれブロックとlet式を使ってスッキリしている それに比べて、>>566 (下段)のPythonコードはなんともごちゃごちゃした汚いコードだよね え、Pythonって外で関数定義しないとスッキリさせることができないの? いったい何のためにラムダ式(無名関数)があるんだろう.....
651 名前:デフォルトの名無しさん mailto:sage [2012/02/11(土) 04:39:30.69 ] >>650 お前がスッキリと言ってるものがどんな処理をしてるのか分からないから説明してくれよ
652 名前:デフォルトの名無しさん mailto:sage [2012/02/11(土) 04:41:17.23 ] >>650 関数型プログラミングには適してないんじゃね。望まれてもいないし