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/
684 名前:デフォルトの名無しさん mailto:sage [2012/02/11(土) 07:30:17.42 ] ハッシュってキーを間違えた時 エラー出る?
685 名前:デフォルトの名無しさん mailto:sage [2012/02/11(土) 07:37:26.32 ] >>679 > 詭弁であると思うのなら、その時点で(=一番最初に)指摘すればいい > たとえば>>539 では、>>510 の主張が仮定を元にした詭弁であると即座に反論している >>504 >・RubyがあったからこそRailsが生まれた >>510 >> RubyがなかったらPython Railsができていたと思うよ >>539 > 革新的な発明/発見/発想に対して、後になってから > 「あんなのは俺にだってできた」と語るのは三流の証(あかし) >>510 を「あんなのは俺にだってできた」と語っていると考えたのは 馬鹿の証 ただ、証(あかし)ってかっこつけて書きたかったんでしょ。 バーカ
686 名前:デフォルトの名無しさん mailto:sage [2012/02/11(土) 07:41:31.82 ] ならない キーワード引数をハッシュで模倣するのは 間違った引数を書いてもエラーにならないという 明らかな欠点が存在する
687 名前:デフォルトの名無しさん mailto:sage [2012/02/11(土) 07:46:02.36 ] >>665 ifが式のHaskell様の素晴らしいコード s = "begin" ++ if True then "foo" else "bar" ++ "end" 答え:s = "beginfoo" あれ?endは?
688 名前:デフォルトの名無しさん mailto:sage [2012/02/11(土) 07:54:27.17 ] >>683 一応2.0では本物のキーワード引数が入るっぽいよ
689 名前:デフォルトの名無しさん mailto:sage [2012/02/11(土) 07:56:04.39 ] とういかさ、なんでそういう基本的な機能を 最初に作らないの?
690 名前:デフォルトの名無しさん mailto:sage [2012/02/11(土) 07:59:45.72 ] >>686 ハッシュで分岐を表現する>>562 と違って ハッシュでキーワード引数を表現するのは 本物のキーワード引数より機能的に劣るってことか 異質とかトリッキーなんて主観よりも明確だな
691 名前:デフォルトの名無しさん mailto:sage [2012/02/11(土) 08:02:20.66 ] Pythonのインデント強制はなにか意味があるのかね? インデント程度でコードが読みやすくなるわけ無いし。 強制されなくてもインデントするでしょ? それよりか、スペース強制のほうがいいと思う。 たとえば × foo+bar、○ foo + bar こんな感じ。 英語文化的にこういう場合にはスペースを開けるのが普通。 そしてスペース強制と書いたけど、本当は、 「foo+bar」いう変数名として解釈される。 関数もオブジェクトという考えと同じように 記号もまた名前なんだよ。
692 名前:621 mailto:sage [2012/02/11(土) 08:03:50.40 ] >>683 トンチンカンな指摘だなあ Rubyには(Pythonの)キーワード引数に相当する構文は無いよ Pythonのディクショナリを展開して関数へ渡す方法に相当するのが、 Rubyのハッシュによる引数渡しになる >>684 (Pythonの)ディクショナリってキーを間違えた時エラー出る? >>686 ,690 上で書いたようにディクショナリに相当するのがハッシュであり、 Pythonのディクショナリ渡しで間違ったキーを書いてもエラーにはならないから、 これまたトンチンカンな指摘だ ただし、Pythonのキーワード引数そのものはRubyには無い優れた特徴だと思う
693 名前:デフォルトの名無しさん mailto:sage [2012/02/11(土) 08:13:35.20 ] Rubyではキーワード引数をハッシュで代用する話をしてるのに 何でPythonで辞書で渡す話にすり替えてるの? Pythonにはキーワード引数があるんだから キーワード引数を使いたい(引数を間違えたときにエラーにしたい)なら 辞書じゃなくてキーワード引数を使うよ
694 名前:621 mailto:sage [2012/02/11(土) 08:18:15.25 ] >>693 すり替えたつもりはないよ >>692 にはPythonのキーワード引数は(Rubyには無い)優れた特徴であると 書いてあるのに、読めなかったのかな?
695 名前:デフォルトの名無しさん mailto:sage [2012/02/11(土) 09:51:05.87 ] 引数の取り回しは、 オプション引数・デフォルト引数、キーワード引数、型チェック、バリデーション機能 くらいは言語仕様でどの言語も実装してほしいな
696 名前:デフォルトの名無しさん mailto:sage [2012/02/11(土) 09:54:49.33 ] そうだね ブロック引数もどの言語でも実装してほしいよね
697 名前:621 mailto:sage [2012/02/11(土) 10:08:24.71 ] そうだなw でも、それを言い出すと PHP: HTML内にコードを埋め込むのはLLならできて当然だよね Javascript: 今の時代、デフォでWebブラウザ上でも動くのが常識だろ などと言う輩が続出して、収拾がつかなくなると思われ
698 名前:デフォルトの名無しさん mailto:sage [2012/02/11(土) 10:11:40.70 ] まあ引数の話だし 最低要件PowerShellレベルってことで
699 名前:デフォルトの名無しさん mailto:sage [2012/02/11(土) 10:45:37.43 ] オプション引数(デフォルト引数)とカリー化の相性の悪さは異常
700 名前:デフォルトの名無しさん mailto:sage [2012/02/11(土) 10:57:52.50 ] >>665 ys = (x for x in xs if (lambda x : True if x == "Green" else True if x == "Yellow" else False)(x))
701 名前:デフォルトの名無しさん mailto:sage [2012/02/11(土) 12:05:42.87 ] 実装してほしいとか言うなよ それは日本語に翻訳してほしいって言うのと同じレベルの発想だ
702 名前:デフォルトの名無しさん mailto:sage [2012/02/11(土) 12:33:06.02 ] Rubyは書き捨てスクリプト専用言語だから キーワード引数なんて要らない あれは大きいプログラム用の機能だからね 当然トイプログラム専用言語Haskellにも要らない
703 名前:621 mailto:sage [2012/02/11(土) 12:39:48.07 ] >>700 ありがとう もしも今後関数型プログラミングの議論が再開してコードを引用する場合、 >>700 のコードも忘れずに引用します
704 名前:621 mailto:sage [2012/02/11(土) 12:43:56.75 ] >>702 だよね RedMineみたいなプロジェクト管理ツールなんてちっぽけな使い捨てスクリプトだし、 Railsみたいなフレームワークもオモチャみたいなもんだしね .... .... .... これでいいのかなw
705 名前:デフォルトの名無しさん mailto:sage [2012/02/11(土) 12:48:39.90 ] キーワード引数ってシェルコマンドから来た発想じゃねーの?
706 名前:デフォルトの名無しさん mailto:sage [2012/02/11(土) 12:57:13.47 ] >>704 その辺はRuby本来の使い道を既に外れてると思われ
707 名前:621 mailto:sage [2012/02/11(土) 12:58:20.60 ] >>699 オプション引数・デフォルト引数・キーワード引数というのは、 それらを個々にひとまとめとした直積データ構造であると考えた方が自然な気がする たとえばオプション引数は省略可能な要素から成るタプル型で、 キーワード引数はレコード型であると解釈する
708 名前:デフォルトの名無しさん mailto:sage [2012/02/11(土) 13:01:24.42 ] Ruby本来の用途を外れた使い方された挙げ句 GCが遅いおそい言われてるのを見ると ちょっと可哀想ではある
709 名前:621 mailto:sage [2012/02/11(土) 13:18:32.55 ] >>706 たとえ生まれが使い捨てプログラミング用途だとしても、 可能性があり実現に望ましい性質を持つ言語であるのなら、 どんな用途に使われようと周囲がとやかく言うべきではないと思う >>706 は、子供達を無理矢理自分の枠にはめようとする 逝き遅れたオールドミス数学教師(>>442 )の発想だね Rubyたん(>>437 )は、 RailsでメタプログラミングをそしてRakeおよびRSpecで内部DSLという、 これまでにない新しい扉を開いた まだまだ潜在的な可能性がRubyには残されている 今回議論になった「Rubyによる関数型プログラミング」もそんな可能性の一つ まだまだ成長と進化を続けていくだろうと思う
710 名前:デフォルトの名無しさん mailto:sage [2012/02/11(土) 13:39:24.44 ] >>709 別に使われること自体は構わないけど それを基準にするのはおかしくね?ってことだよ
711 名前:621 mailto:sage [2012/02/11(土) 13:57:29.18 ] >>710 生まれが書き捨てスクリプト言語であることを基準にする >>702 の発想はおかしくね?ってことだよん
712 名前:デフォルトの名無しさん mailto:sage [2012/02/11(土) 14:30:37.38 ] まぁ、勝手に使っておいて文句ばっかり言うのは うんkだな。
713 名前:デフォルトの名無しさん mailto:sage [2012/02/11(土) 14:36:27.02 ] >>711 まあそこはね 無くてもやれるが、その内ほしいな
714 名前:デフォルトの名無しさん mailto:sage [2012/02/11(土) 14:52:03.72 ] 主要なものは既に存在する。 まだないのは、マイナーすぎて作れないもの。 マイノリティを肯定しないと作れない。
715 名前:621 mailto:sage [2012/02/11(土) 15:13:20.36 ] >>714 そのとおりだと思う おそらく、それには変人の発想(>>575 ,578,596)が必要になる 簡単に言うと、周囲のマジョリティーと安易に同調しない強い意志/自我を持つこと そしてRubyスレによれば、どうやらRubyにはそんな変人達を引きつける魔力があるらしいw
716 名前:621 mailto:sage [2012/02/11(土) 15:33:40.22 ] >>713 確かに>>695 の中でRubyには欠けている キーワード引数、型チェック、バリデーション機能は (欲張りかもしれないが)Rubyにもほしいところだね ただ、キーワード引数については、Ruby 1.9で順序付きハッシュが導入されたことだし、 Smalltalk(あるいはObjective-C)風のメッセージ式によるメソッド定義のほうが (Pythonのキーワード引数よりも)可読性が高くて望ましいなぁ たとえば、def put: str at: point; .... end みたいに でも、Rubyの構文に大掛かりな変更が必要になるから、採用される見込みは無いだろうw あと、型チェックとバリデーション機能についてはTestUnit風の アサーションライブラリ関数で(暫定的に)対応できないかと開発を進めているところ たとえばこんな感じ def put_at str, point ASSERT.kind_of str, String ASSERT.tuple_of point, [Float, Float] 最終的には、この型アサーション(表明)を関数アノーテーション(注釈)と見なして、 ドキュメント内に型式(あるいは自然言語風の解説)を自動生成することも視野に入れている
717 名前:デフォルトの名無しさん mailto:sage [2012/02/11(土) 15:52:16.64 ] お題って621がlambda式に条件分岐が必要なものを自分で考えたんだろうなあw
718 名前:デフォルトの名無しさん [2012/02/11(土) 16:13:29.15 ] Ruby をシェルの変わりに使いたいな シェルだと、以下のような記述をして実行したとき rm -rf ${TEMP_DIR}/*.* 変数を定義しているソースの取り込み忘れや、 変数のスペルミスがあったときに悲惨な結果になるんだよな てかやっちまったんだよ……orz
719 名前:デフォルトの名無しさん mailto:sage [2012/02/11(土) 16:20:41.47 ] まあ型チェックもバリデーションも Pythonならデコレータで簡単にできるんですがね
720 名前:デフォルトの名無しさん mailto:sage [2012/02/11(土) 16:22:25.98 ] 621は人の話を聞かず、正反対の意味に曲解して話を進めるのをやめた方がいい
721 名前:621 mailto:sage [2012/02/11(土) 16:55:30.71 ] >>717 そうだよ、今頃気が付いたのw Ruby/ML/Haskellでは簡潔に書けるけどPythonではそうでないお題を選んでいる つまり、Pythonは「どちらが関数型プログラミングに適しているか」という勝負に 負けるべくして負け、「不適格」という烙印を押されたことになる >>720 前にも書いたけど(>>679 )、もしも悪意のある曲解があるならその時点で強引にでも止めればいい その判断が正当なものであれば、いくら強引でも止める行為を非難するヤシはいないはず 後になってから「xxすべき」を言い出すのは、敗者の泣き言(あるいは負け犬の遠吠え)だ では、>>720 を添削しておこう X: 621は人の話を聞かず、正反対の意味に曲解して話を進めるのをやめた方がいい O: 技術的な議論では自分の思い通りに話を進められないので、個人攻撃に移るよ
722 名前:デフォルトの名無しさん mailto:sage [2012/02/11(土) 16:56:39.82 ] >>703 せっかくpythonがクールでないというお題を考えたのに残念だったね
723 名前:デフォルトの名無しさん mailto:sage [2012/02/11(土) 16:57:07.50 ] >>721 >>700 でちゃんと出来たじゃん。残念
724 名前:デフォルトの名無しさん mailto:sage [2012/02/11(土) 16:58:07.24 ] >>721 そういう議論の進め方が下衆だって言ってるんだよ
725 名前:デフォルトの名無しさん mailto:sage [2012/02/11(土) 16:58:29.46 ] 荒らしに何を言っても無駄
726 名前:デフォルトの名無しさん mailto:sage [2012/02/11(土) 17:21:47.15 ] まあバトロワスレなんて基本はこんなもんじゃね
727 名前:デフォルトの名無しさん mailto:sage [2012/02/11(土) 17:43:01.03 ] QZはずっとここにいろ ここQZ隔離スレにしてよ
728 名前:621 mailto:sage [2012/02/11(土) 17:47:14.12 ] >>722 ,723 3つあるお題の内、多分岐については>>700 がコードを示してくれたので >>621 の「Pythonではハッシュを使わなければ書けない」という主張を取り下げる ただし、もし可能であったなら>>700 のコードは前スレで示すべきだった 前スレのPythonな人も難しいと言われるリスト内包表記を使いこなすだけの技量はあったけど、 >>562 (下段)のようなハッシュを使うコードしか思いつけなかった そして今レスでも誰も>>562 に対してコードで反論できずにいて、 >>639 ,665と誘導することによってようやく>>700 の「ちゃんとした」コードが完成した これは、Pythonによる多分岐のコード化が いかに難解なものであるかを示しているのではないのかな? Rubyなら簡単に書ける初歩的なお題なんだよ あと、>>621 の残る2つのお題、二分岐と局所宣言に関するPythonへの問題指摘に対しては 明解な反論が無いまま、>>650 の > それは「Pythonは関数型プログラミングに適していない」という意見への賛同として > 解釈してよいのかな? という問いかけに対して>>652 が > 関数型プログラミングには適してないんじゃね。望まれてもいないし と返答しているけど、別人さんなのかな? それともPython支持派には意見の不統一があるのかな? >>661 で書いたように逃げる気は無いので、議論の続きを再開しても自分はかまわないよ
729 名前:デフォルトの名無しさん mailto:sage [2012/02/11(土) 18:01:41.70 ] >>728 どこが難解なんだよw お前がpythonのことを1ミリも知らなかっただけじゃねえか もう黙れ。二度と再開するな
730 名前:デフォルトの名無しさん mailto:sage [2012/02/11(土) 18:02:57.77 ] お題が悪い pythonのlambda式が不便になることがあるのは事実だが、こういうパターンではない おそらく不便という事実だけ聞いてこの問題を作ったんだろうけど的外れもいいところ
731 名前:デフォルトの名無しさん mailto:sage [2012/02/11(土) 18:07:32.90 ] らむだこりゃ
732 名前:デフォルトの名無しさん mailto:sage [2012/02/11(土) 18:09:49.97 ] / ..::::::...ヾ,-┐:::::.. ヽ、 /:::::::: :::::::::::::::..ヽ|、::::::::... ヽ、 ラムだっちゃ♥ / :::::::: 、:::::::::::::::::...ヽ::::::::::::.. ヽ / ::::: 人、 | ヽ、_:::::::::::::: |:::::::::::::. | ,イ´ | :::ト、 | `'-,r‐=,、ヽ、 ::: |:::::::::::::: | rv' l´ ヽ、:.| r-、 p ヽ `l ,ヘ::::::::::::::::: | | | | ヾヽ、 ハ ヾ_ノ .| |' .|:::::::::::::::::: | ''´ ̄ ̄`ヽ、、_ | | | ヽ、l ゞ ー | レ'::::::::::::::::::: | ´ ̄ ` r-L l ', |` 、 ,' |:::::::::::::::::::::: | _rヾニ `ヽ ', ヽ、 r‐-ァ /::|::::::::::::::::::::::::.. | ヾゝイ´ ,/ .', ヽ、ゝ' _,.-;ノ:: |:::::::::::: ::::.. | ::.. ト ´ /.... 'ヽ,、_ >r' /:: /::::::::::::: ::: | : 〉 .|:::::::::::...... `ー-‐'´,-/ /::::: / `ヽ、::: | ::.... .:::::::::::| |:::::::::::::::::,、-r―'''´ ̄ ,.-‐'´:::. / |:::::.... . | :::::::::::::::::::::::::::::::::| ',:::::::::::::∧ヾ V/―/::::::::::: / |:::::::::::.......:::. | :::::::::::::::::::::::::::::::::| ',:::::::::::ト kl /三/:::::::::: / ,'::::::::::::::::::::::: | :::::::::::::::::::::::::::::::::| ',:::::::::|ヾヾ|、 /::::::::: ,イ ,'::::::::::::::::::::::::: | | :::::::::::::::::::::::::::::::::| ',/ヽ__ヾ、|:::::: ∧/ /:::::::::::::::::::::::::: |.|.| ::::::::::::::::::::::::::::::::::', ! / ヾ:: ∠__/ /:::::::::::::::::::::::::: | ||
733 名前:621 mailto:sage [2012/02/11(土) 18:37:08.10 ] >>729 いや、Pythonのことは部分的に知っているはずだよ だって、Pythonの弱点を突けるコードを意図的に選んだのだからw あと、>>658 は「逃げんなよ」と言い、>>729 は「二度と再開するな」と言う 同じ人ではないと思うので、別人さんでPython支持派内に意見の不統一があるのかな いったいぜんたい、どっちにすればいいんだろう 関数型プログラミングへの適合性について議論を再開する or しない、 Python支持派内で意見を統一した上で、どちらにするのか返答を希望する >>730 だから、もしもお題が悪いのなら、最初にお題が示された時点で(=前スレで)反論しないとね 議論が終わってから「xxが悪い」と言い出しても遅いよ もし今から反論したいのなら、Python/ML/Haskellでは簡潔に書けるけど Rubyではそうではない「単純明快な」お題を、Python/ML/Haskellのコードで示してくれ 論よりコードだよ なお、議論の再開に関しては即答しなくともかまわない たとえば次スレでバトルの第三ラウンドを始めてもいいよ 判断はそちらにあずける
734 名前:デフォルトの名無しさん mailto:sage [2012/02/11(土) 18:48:23.94 ] 前スレも>>700 も書いたのは俺 あのときハッシュを使ったのはRubyのコードが例外を投げてたから 最後に関数型っぽいコード ys = filter(lambda x: x in ["Green", "Yellow"], xs)
735 名前:デフォルトの名無しさん mailto:sage [2012/02/11(土) 19:10:15.80 ] >>733 いや、お前の主張が間違ってたのだからそこで終了だろw 結局優位性すら認められずw
736 名前:621 mailto:sage [2012/02/11(土) 19:17:12.53 ] >>734 >あのときハッシュを使ったのはRubyのコードが例外を投げてたから お題のコードは変数宣言が欠けているから例外が発生するのは明白 こちらとしては、その程度の壁なら自力で対処できるくらい「Rubyを知っている」と思っていた また、もしも例外発生を自力で解決できないかったのなら、 その時点でそれを言うべきだったと思うよ そんな機会はいくらでもあった 例外うんぬんのいい訳は、前スレ(あるいは今スレ>>621 )から>>700 のレスまで 「ちゃんとしたコード」の完成に時間を要した理由にはならない >ys = filter(lambda x: x in ["Green", "Yellow"], xs) ys = xs.select { |x| ["Green", "Yellow"].include? x }
737 名前:デフォルトの名無しさん mailto:sage [2012/02/11(土) 19:24:56.68 ] 「Pythonを知らない」奴がなぜ偉そうなのか分からん
738 名前:デフォルトの名無しさん mailto:sage [2012/02/11(土) 19:25:20.24 ] >>736 > お題のコードは変数宣言が欠けているから例外が発生するのは明白 そうじゃなくて、>>561 のRubyコードはgreen, yellow, red 以外なら raise RuntimeError の行で例外を投げてるだろ
739 名前:621 mailto:sage [2012/02/11(土) 19:26:17.24 ] >>735 1つの主張が崩れても全体が否定されないよう、意図的にお題は3つに分かれている 残念ながら「Pythonは関数型プログラミングには不適格」という烙印は消えていないw では、残る2つの主張を崩せる反論の準備をよろしく頼むぜ 議論の再開を待っているよ
740 名前:デフォルトの名無しさん mailto:sage [2012/02/11(土) 19:28:30.99 ] やはりPythonの解答が「明らかに」美しいな。この問題だと
741 名前:621 mailto:sage [2012/02/11(土) 19:35:15.41 ] >>738 ML/Haskellといった静的型付け関数型言語は、green, yellow, red 以外なら型エラーになる それに合わせてRubyは動的型付けだから例外を投げるコードにしている それがお題だ(関数型言語は知っているんだよね?) ただし、Pythonでは例外を投げるコードが難しいみたいだったから、 あの時はその部分について「見逃してあげた」だけの話 もし反論があるなら、>>700 のコードについて、例外処理を含めて再実装してくれ
742 名前:デフォルトの名無しさん mailto:sage [2012/02/11(土) 19:38:43.73 ] >>741 >>562 のPythonのコードも green, yellow, red 以外なら例外投げる 見逃してもらう必要は無い
743 名前:デフォルトの名無しさん mailto:sage [2012/02/11(土) 19:40:32.46 ] 非現実的な馬鹿らしいお題だな
744 名前:デフォルトの名無しさん mailto:sage [2012/02/11(土) 19:48:13.07 ] >>737 同意するわ。 こいつPythonのプログラム読めて無いじゃん。 可読性を議論するレベルに達してない。
745 名前:デフォルトの名無しさん mailto:sage [2012/02/11(土) 20:06:42.60 ] PHP最強ということで結論が出たようだな。
746 名前:デフォルトの名無しさん mailto:sage [2012/02/11(土) 20:13:32.23 ] >>561 >>562 ML,Haskell,Pyhtonは似てるけどRubyだけ異質で浮いてる。 はっきり言ってRubyだけキモい。
747 名前:621 mailto:sage [2012/02/11(土) 20:13:33.28 ] >>742 あっそうなんだ、>>562 でもハッシュを投げるんだね 失礼した、謝罪する では、型エラーまたは例外発生をお題に含めるものとして、 >>621 の「Pythonではハッシュを使わなければ書けない」という主張を崩すために、 >>700 (あるいは>>734 )のコードについて例外処理の実装を追加してみて欲しい こちらで試したところ、>>700 ,734とも例外は発生してない
748 名前:621 mailto:sage [2012/02/11(土) 20:17:06.28 ] >>740 ,746 そういった意見は、主観であり客観的な判定材料にならないことは すでに結論付けられている だから>>621 では具体的で客観的な問題指摘を示した したがって、同様なレベルの意見を希望する
749 名前:デフォルトの名無しさん mailto:sage [2012/02/11(土) 20:31:40.61 ] いまをときめくFacebookも、ブログシステムてして他の追随を許さないWordPressも CMSとして最強の呼声高いDrupalも、みんなPHPで作られているんですね。 すごいよなぁ。
750 名前:デフォルトの名無しさん mailto:sage [2012/02/11(土) 20:35:29.04 ] PHP遅すぎてC++に変換したり 苦労しているみたいだけど
751 名前:デフォルトの名無しさん mailto:sage [2012/02/11(土) 20:38:45.64 ] え? ここLLのスレだよね?
752 名前:デフォルトの名無しさん mailto:sage [2012/02/11(土) 20:46:39.95 ] >>748 >>621 は間違ってただろwさっさと訂正しろよ
753 名前:デフォルトの名無しさん mailto:sage [2012/02/11(土) 20:48:52.46 ] >>748 「ハッシュは異質・トリッキー」が主観で無くて何なんだ? 客観的と言うなら、ハッシュで分岐するのが キーワード引数の例(>>690 )のように 機能的に劣った点があることを示せ
754 名前:デフォルトの名無しさん mailto:sage [2012/02/11(土) 20:54:05.79 ] 621が自分の主観を客観的を言ってるんだけど、何なの
755 名前:621 mailto:sage [2012/02/11(土) 20:58:47.63 ] >>752 >>742 から再実装されたコードが提示されたら、まとめて訂正するつもりだよん 今のままだと>>700 のコードは例外を投げないから仕様不整合であり、 >>621 の「ハッシュを使わなければ書けない」という主張は崩れていない >>742 が(仕様不整合を)見逃してもらう必要は無いと、明確に意志を示してくれたので、 それを尊重してコードの提示を待っているところ
756 名前:デフォルトの名無しさん mailto:sage [2012/02/11(土) 21:07:28.71 ] >>755 お前はコードの提示を待つ前に>>753 に答えるべき
757 名前:デフォルトの名無しさん mailto:sage [2012/02/11(土) 21:09:31.44 ] 長文=客観的
758 名前:621 mailto:sage [2012/02/11(土) 21:35:08.04 ] >>756 では、>>753 に答えよう(>>753 は見落としていたので、指摘ありがとう) まず、お題の題名が多分岐なのだから、Ruby/ML/Haskellのように 言語仕様に多分岐式を含む言語であれば、多分岐式を用いてコードを実装するのが当たり前 でもPythonは言語仕様に多分岐式を含まないから、 それをハッシュで「代用」しなければならない 次にハッシュで代用することの問題点を述べる ・Ruby/ML/Haskell 予約語 case によってコードが多分岐処理の実装である事は一目で判断できる ・Haskell コードをじっくり眺めなければ、それが多分岐処理なのか、それとも 本質的にハッシュを用いる処理なのかを判断できない つまり、Pythonのハッシュによる「代用」は、可読性の悪化という影響をもたらす
759 名前:デフォルトの名無しさん mailto:sage [2012/02/11(土) 21:39:05.26 ] おおむねRubyしか使ってないけど (趣味プログラマです) 他の言語を知るにつれて Rubyってメタプログラミング力が弱いような気がしてくる ちょうどいい感じに使いやすくメタプログラミングできるようになってるだけで なんか、深い事しようとすると出来ないようなきがする 実際にはそこまでのメタプログラミング能力は要らないのだけど ブログなどのネタなんかだと、他言語の方がダイナミックなこと出来るなぁ などと思ってしまう 例えば、Rubyではスクリプトのパース時に細工したりは出来ないし かといって他の言語に移ろうとかいう気は起こらないけど
760 名前:デフォルトの名無しさん mailto:sage [2012/02/11(土) 21:43:08.35 ] >>758 > 本質的にハッシュを用いる処理なのかを判断できない これを主観という
761 名前:デフォルトの名無しさん mailto:sage [2012/02/11(土) 21:46:44.47 ] Rubyがプチヒットしたのは 主にRailsのおかげなんだろうけど たまたま備わっていた ・完全なオブジェクト指向&オープンクラス ・DSLに向いてたブロック構文 ・同メソッド呼び出し括弧の省略 ・適度なメタプログラミング力 がマニアにうけたのかなぁ 島根県の公式サイト程度ならまだしも イギリスの公式サイトがRuby製で製作中なんて 無茶しやがってとか思うけど よくは知らんがクックパッドとか、そこそこ大きそうなサイトも運営されてるので 大丈夫なんだろうか GitHubもRailsらしいが
762 名前:621 mailto:sage [2012/02/11(土) 21:52:05.58 ] まだ時間があるようなので、>>758 を続ける 次にハッシュを用いる事それ自身の問題点を示す Pythonのハッシュは、そのキーとして用いれるのは不変なデータ型(数値/文字列/タプル)だけ これは、このお題の入力値が「たまたま」文字列であったから何の問題も無いが、 課題をより一般化して、任意のレコード(オブジェクト/ハッシュ)が渡されたと「仮定」する この場合、Pythonだと多分岐処理をハッシュでは実装できなくなる これは「Pythonは拡張性に劣る」という欠点となる また、Rubyではハッシュのキーとして任意のオブジェクトを用いることができるから、 多分岐処理をcase式とハッシュのどちらでも実装が可能になる これは「Pythonは表現力に劣る」あるいは「ハッシュの機能性が劣る」という欠点となる 以上
763 名前:デフォルトの名無しさん mailto:sage [2012/02/11(土) 21:53:21.33 ] >>758 ハッシュで代用するというか、Visitorパターンだな じっくり眺めなければ判断できないという批判は、全てのデザパタに当てはまる
764 名前:名無し~3.EXE mailto:sage [2012/02/11(土) 22:02:05.48 ] ざっと流し読みしたら、一人で頑張ってるのがいるようだけど 大好きなRubyたんのシェアが伸びるどころか落ち込んでるのが 余程気に食わなかったのかね Railsがありながらシェアが伸びないのは何故なんだろうね
765 名前:デフォルトの名無しさん mailto:sage [2012/02/11(土) 22:04:17.12 ] >>755 def Raise(e): raise e ys = (x for x in xs if (lambda x : True if x == "Green" else True if x == "Yellow" else False if x == "Red" else Raise(KeyError))(x))
766 名前:デフォルトの名無しさん mailto:sage [2012/02/11(土) 22:04:40.85 ] 藪をつついてデザパタ全否定
767 名前:621 mailto:sage [2012/02/11(土) 22:10:36.90 ] >>760 その判断が一目で(瞬時に)できるか、じっくり眺めなければならないかは、 プログラマの能力に依存する話 そして全世界のあらゆるPythonプログラマが優れた能力を備えていると仮定すれば、 瞬間的な判断の可否は主観と言えるだろう でも現実は、そうではないハズだ(それとも、これすら主観であると決めつけるのかな?) 経験豊かなプログラマもいれば、ビギナーもいる 従って、これを主観と決めつけることはできないと判断する また、可読性という評価基準そのものが主観性を含むものだ 「予約語caseがあれば分岐処理の始まりであると一目で分かる」と考える人は多いと思うが、 中には「caseを見落とすかもしれない」と屁理屈をごねる変な人もいるかもしれない でも、これらはそれぞれの人達の主観であるから客観性は存在しない では、本当に「可読性」を完全に無視していいのか?という話になる Pythonの優れた特徴である可読性の良さという利点も無視されるけど、 それでもいいの?という意味だ 判断は>>760 に委ねたい
768 名前:デフォルトの名無しさん mailto:sage [2012/02/11(土) 22:18:04.10 ] うんこ
769 名前:デフォルトの名無しさん mailto:sage [2012/02/11(土) 22:18:37.53 ] >>762 > Pythonのハッシュは、そのキーとして用いれるのは不変なデータ型(数値/文字列/タプル)だけ > これは、このお題の入力値が「たまたま」文字列であったから何の問題も無いが、 いるよな。都合が悪くなると後から条件変えてくる奴。 不変なデータ型ってことにケチつけるなら、 まずHaskellでmutableなデータ型が入力値のときのコードを出せよ
770 名前:デフォルトの名無しさん mailto:sage [2012/02/11(土) 22:18:39.79 ] >>702 >Rubyは書き捨てスクリプト専用言語だから >キーワード引数なんて要らない 冗談じゃない。 Rubyにも本物のキーワード引数が欲しいし、Matzもそう言っている。だからこそ2.0で導入される予定。 >あれは大きいプログラム用の機能だからね 冗談じゃない。キーワード引数は小さいプログラムでも実に役に立つ。 こんなこというのは、Pythonをまともに使ったことないんだろう。 キーワード引数は、Python使って嬉しかったことの筆頭。 しかしlambdaが文をとれないなど残念な面も多い。RubyのブロックがPythonにも欲しい。
771 名前:デフォルトの名無しさん mailto:sage [2012/02/11(土) 22:18:43.40 ] 関数型言語のコードを一見して分かる優れたプログラマばかりなら 621の理屈は通るけどね
772 名前:621 mailto:sage [2012/02/11(土) 22:18:56.77 ] >>765 コードありがとう でも、このコードは外でRaise(e)という関数を定義しているよね ここまで提示されたすべてのコードには、外部定義は一つもなかった このままだと「Pythonは外部定義が無ければ書けない」という 批判材料を敵に与えてしまうことになるけど、それでもいいのかな? もし可能であれば、外部定義の無いコードに書き直して欲しい
773 名前:デフォルトの名無しさん mailto:sage [2012/02/11(土) 22:19:55.73 ] >>772 外部定義をしてはいけない理由はなに? 明らかに全てのコードの中で一番スッキリしてるだろ
774 名前:デフォルトの名無しさん mailto:sage [2012/02/11(土) 22:20:40.61 ] >>772 Raise() は一度定義すれば何度でも使えるけど? つまり一切のライブラリの使用を禁止ってこと?何の縛りプレイ?
775 名前:デフォルトの名無しさん mailto:sage [2012/02/11(土) 22:20:43.38 ] 敵なんてどこにいるんだと思ったが、バトロワスレだからべつにいいか。
776 名前:デフォルトの名無しさん mailto:sage [2012/02/11(土) 22:23:53.83 ] >>775 敵はあなたの心の中に潜んでいるのだよ。
777 名前:デフォルトの名無しさん mailto:sage [2012/02/11(土) 22:24:51.58 ] たしかに うんこ と 言わざるを得ない
778 名前:デフォルトの名無しさん mailto:sage [2012/02/11(土) 22:25:30.92 ] 今にして見れば、Rubyのコードが終わってる
779 名前:デフォルトの名無しさん mailto:sage [2012/02/11(土) 22:26:24.86 ] うんこーど
780 名前:デフォルトの名無しさん mailto:sage [2012/02/11(土) 22:26:33.28 ] Perlの話もしろよ
781 名前:デフォルトの名無しさん mailto:sage [2012/02/11(土) 22:28:45.39 ] >>772 SML の datatype や Haskell の data も外部定義
782 名前:621 mailto:sage [2012/02/11(土) 22:29:09.41 ] >>763 >じっくり眺めなければ判断できないという批判は、全てのデザパタに当てはまる 「じっくり眺めなければ判断できない」ことが全ての言語に当てはまるのなら批判はしない Ruby/ML/Haskellであれば予約語caseがあるから一目で判断できるのに、 Pythonは「じっくり眺めなければ判断できない」から批判されている 分かるかな?
783 名前:デフォルトの名無しさん mailto:sage [2012/02/11(土) 22:32:49.01 ] 今にして見れば、Rubyのコードが一番終わってる
784 名前:621 mailto:sage [2012/02/11(土) 22:35:01.27 ] >>769 では、バトル第三ラウンドでは、Haskellでも書ける(imutableな)レコード型を入力値とする お題を準備することにしよう もし不満であれば、>>769 が別のPythonに有利なお題を準備すればいい