- 1 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 09:58:56 ]
- 最強のLL=軽量プログラム言語は、どれよ?
エントリーは、 Perl、PHP、Python、Ruby、JavaScript・・・ さあ、死ぬまで語りやがれ!!! ■LLとは? 軽量プログラミング言語(Lightweight Language,LL)とは、取り回しに優れ、 コードの作成や修正が容易と見なされるプログラミング言語のことを指す。 ここでいう「軽さ」はプログラマの負担の軽重を指し、 実行速度に優れているという意味ではない。 現在の水準では ・インタプリタ ・動的型 ・正規表現 ・関数オブジェクト などを利用できるものがLLと呼ばれることが多い。(Wikipediaより) ■過去スレ 【Perl,PHP】LLバトルロワイヤル4【Ruby,Python】 pc12.2ch.net/test/read.cgi/tech/1234635513/ 【Perl,PHP】LLバトルロワイヤル3【Ruby,Python】 pc11.2ch.net/test/read.cgi/tech/1215319832/ 【Perl,PHP】LLバトルロワイヤル2【Ruby,Python】 pc11.2ch.net/test/read.cgi/tech/1209289408/ 【Perl,PHP】LLバトルロワイヤル【Ruby,Python】 pc11.2ch.net/test/read.cgi/tech/1188997302/
- 937 名前:デフォルトの名無しさん mailto:sage [2009/05/25(月) 01:33:44 ]
- '<br>'.join(map(chr, range(97, 123)))
- 938 名前:デフォルトの名無しさん mailto:sage [2009/05/25(月) 01:39:19 ]
- こうじゃないの?
<?=implode('<br>', range('a', 'z')), '<br>' ?> Cで書いても三行だしなー。 for(int i = 'a'; i <= 'z'; i++){ printf("%c<br>", i); }
- 939 名前:デフォルトの名無しさん mailto:sage [2009/05/25(月) 01:47:22 ]
- >>938
<?から始めてることからして、Cの場合は #include <stdio.h> とか int main(int argc, char **argv) { } とかも含めるんじゃないのかな。 (まあ「とか」というよりこれだけだけど) そうなるとJavaやC#はさらに不利だ。
- 940 名前:デフォルトの名無しさん mailto:sage [2009/05/25(月) 03:06:07 ]
- Rubyの each の魅力がいまいちピンときてなかったけど、
最近javascriptのprototype.js いじっててようやく分かった。 p (1...101). map{|v|v*v}. delete_if{|v|v%100/10%3!=0}. reverse. join('-') こんな感じに、配列に対する処理をパイプみたいに 継ぎ足していけるのは直感的でわかりやすい。 まぁ、この場合eachよりmapのほうが役立つけど。 pythonで同じことをやろうとすると、join(reversed(filter(map... という風に、思考の順番と記述の順番が逆になってしまう。 そういうクラスを作れば、pythonでもRubyと似た記述が可能になるけど 、 Array型に最初から仕組みが組み込まれているRubyのほうがこの点は優れている。 あと、python の lambda 式は ruby のブロックや、javascript の無名関数 と比べると不自由を感じることがある。 高階関数に、処理をリテラルで記述する場合にちょっと不便。
- 941 名前:デフォルトの名無しさん mailto:sage [2009/05/25(月) 03:58:02 ]
- Common LispのCLOSもチェーンが逆方向になるんだよな
読みづらいなあとか思ってたら、dan氏も同じようなことを考えていたらしい >Lispは、その構造上、オブジェクト指向は極められても、オブジェクト思考には向かないのだ。 >なぜか。述語が必ずリストの頭となるからだ。 (以下略) ttp://blog.livedoor.jp/dankogai/archives/51087431.html ・・・・というか、そもそもの数学で、 重ねられた関数の表記が右から左になってしまうのが 全ての始まりだと思う y = f(x), z = g(y) ⇒ z = g(f(x))
- 942 名前:デフォルトの名無しさん mailto:sage [2009/05/25(月) 04:40:38 ]
- >>941
教育指導要領を改訂して小・中・高の数学の教科書を全て ポーランド記法にすれば無問題。 10年もたてば若い世代はf->gの処理順をg(f(x))と逆順に 表記するのがあたりまえと感じるようになるだろうし、 様々なプログラミング言語との相性も抜群なので日本の IT競争力向上に貢献すること間違いなし。
- 943 名前:デフォルトの名無しさん mailto:sage [2009/05/25(月) 06:04:12 ]
- >940
Pythonのリスト処理は ・単純にリストの要素に対して関数を適用する場合、mapやfilter、reduceなどを使う ・リストの要素に対して、式や、単純には引数として渡せない関数などを適用する場合、内包表記 ・実行制御や条件分岐などを行なう場合は、ローカルな関数を作って対応(Rubyでいうproc利用) って3段階になると思う。 正直、mapやfilterでlambdaが要る場面って少ないと思うよ。 内包表記か、それでダメなら関数作っちゃったほうが簡潔な気がする。 あと、どちらかと言うとリストの処理に関しては「新しいリストを返す」より 「既存のリストを変更する」ほうが素直に書ける気がする。
- 944 名前:デフォルトの名無しさん mailto:sage [2009/05/25(月) 06:26:02 ]
- Rubyのクロージャ利用、特に{|x| ...}型の記法は記述がシンプルで
文字数も少ないのがメリットだと思う。 >>948みたいに色々な方法があるのは良いんだけども、結局記述 がシンプルでないと見通しが悪くなるので、>>940のメソッド チェーンのような活用がし難いと思う。 Ruby使っている人がjQueryと使うと「マシになったな」と思う 一方で「functionうぜ〜」と思うことも少なく無いかと。 あとリスト処理が破壊的か非破壊的かは、場面によるかと。 どちらが良いとは一概に言えないなぁ。両方必要。
- 945 名前:デフォルトの名無しさん mailto:sage [2009/05/25(月) 09:19:54 ]
- >>940
その「繋ぎ感」の気持ちよさは認めるけど、読み書きしやすさとは違うんじゃないかな。 長い処理は適度に切って変数を使うPython流も、長くなりそうで実際に書いてみると 大して長くならないし、あんまり繋げすぎるよりも読みやすい。 a = [v*v for v in range(1,101) if v%100/10%3 == 0] print '-'.join(reversed(a)) PythonもML上でRubyのブロック記法が提案されたけど、ブロック記法の利点を示す 例として挙げたサンプルコードがことごとく同等にスマートなPythonicなコードで 反論されて、Pythonにはブロック記法いらないという結論になった経緯がある。 lambda もそうだね。関数内でローカル関数が定義できて、Pythonの関数は 「関数専用の名前空間」なんてキモい仕様になってなくて普通定義するだけで 変数に関数が代入されるから、mapにもfilterにも定義した関数を渡せば良い。 lambda を使う大抵の場面はリスト内包で代用可能。 Python3 からは辞書も 集合も内包表記が使えるから、本気で lambda の有効な場面が無くなる。
- 946 名前:デフォルトの名無しさん mailto:sage [2009/05/25(月) 09:28:26 ]
- ラクダ本で、初めてシュワルツ変換見たときは感動したなあ。
- 947 名前:デフォルトの名無しさん mailto:sage [2009/05/25(月) 09:35:12 ]
- >>944
このあたりにも Python と Ruby の違いが出てるね。 Python は . (ドット) 演算子を基本的に属性アクセスにしか使わない。 関数呼び出しの()も省略できない。だから、 a = b.c が、 Python なら、 a = getattr(b, 'c') と一意に確定するのに対して、 Ruby は、 bオブジェクトのc属性なのか、b() が返したオブジェクトの c 属性なのか、 b() が返したオブジェクトのc メソッドを呼んでいるのか判らない。
- 948 名前:デフォルトの名無しさん mailto:sage [2009/05/25(月) 09:54:20 ]
- Rubyに属性はないが?
b.c の、b がローカル変数か、レシーバを省略したメソッド呼び出しか確定しないのは 確かだが、 .c は基本的に .c() の括弧を省略しただけだぞ?
- 949 名前:デフォルトの名無しさん mailto:sage [2009/05/25(月) 10:18:44 ]
- >>948
なるほど、だから . を連発しても意味ワカメにはならないのか。
- 950 名前:デフォルトの名無しさん mailto:sage [2009/05/25(月) 14:08:39 ]
- Pythonのドットは属性アクセス。
括弧が付くとオブジェクトに対して「呼び出し」を試みる。 メソッドは呼び出し可能なオブジェクトと束縛された属性。 呼び出せる属性を簡単に作るする方法として、class内でdefを使う。 Rubyのドットはメソッド呼び出し。 属性に近い存在であるインスタンス変数には、直接外部からアクセスすることはできない。 属性のように見えるのは「インスタンス変数にアクセスするメソッド」の呼び出し。 「インスタンス変数にアクセスするメソッド」を簡単に作る方法として、attr/attr_reader/attr_accessorがある。
- 951 名前:デフォルトの名無しさん mailto:sage [2009/05/25(月) 14:26:36 ]
- 俺は全体的にはRubyは好きなんだけど >940 はやらないなぁ。
ドットはできれば先頭に書きたい。前の行の続きだよって言いたい。 でもそれやると前の行の末尾の改行で文が切られちゃうんだよなぁ。 >940 もdat見ると2行目からインデントしてるみたいね。
- 952 名前:デフォルトの名無しさん mailto:sage [2009/05/25(月) 14:36:57 ]
- >947
その例だと c は確実にメソッド呼び出しで、b に関しては その部分だけでは判断できないな。 有効なスコープ内でローカル変数 b への代入が行なわれていればローカル変数 そうでなければメソッド呼び出しとして扱われるハズ。
- 953 名前:デフォルトの名無しさん mailto:sage [2009/05/26(火) 08:45:35 ]
- >>951
Rubyは文末に . おかないとエラーでるよね… セミコロン ; なし文法の弊害か
- 954 名前:デフォルトの名無しさん mailto:sage [2009/05/26(火) 10:43:26 ]
- >>953
JavaScriptはセミコロン無しでもいいけどコロンを行頭に置けるよ
- 955 名前:デフォルトの名無しさん mailto:sage [2009/05/26(火) 10:47:07 ]
- ()なしってPerlをマネたのか知らないけど、これはそうしない方が良かったんじゃないかなあ。
- 956 名前:デフォルトの名無しさん mailto:sage [2009/05/26(火) 11:09:40 ]
- >>954
あれ?そうなんだ…。構文解析(字句解析?)の都合なのかしら
- 957 名前:デフォルトの名無しさん mailto:sage [2009/05/26(火) 11:41:36 ]
- Rubyの場合は、いつでも、そこで文が終わりそうなところで改行がくると
文が終わってしまって、式として . が続いてくれない。 JavaScript の場合は return とか限られたところでしかそういう風には解釈しない。 こんな感じかな。おもいつきで書いてるが。
- 958 名前:デフォルトの名無しさん mailto:sage [2009/05/26(火) 11:56:14 ]
- JSの場合は
www.mozilla-japan.org/js/language/js20/rationale/syntax.html >改行におけるセミコロンの挿入 > JavaScript プログラムの先頭から n 番目までのトークンは文法的に正しいが、 > n+1番目のトークンが誤っていて、且つ n 番目のトークンと n+1番目のトークンの間に改行がある場合は、 > パーサは n 番目のトークンと n+1番目のトークンの間に VirtualSemicolon を挿入してからプログラムをもう1度パースしようとする。 となっている。こういう仕様はRubyも導入してそうなもんなのに不思議だな
- 959 名前:デフォルトの名無しさん mailto:sage [2009/05/26(火) 15:16:15 ]
- Rubyのパーザは既にカオスになってるからなあ
あんまり手を入れたくないのかな
- 960 名前:デフォルトの名無しさん mailto:sage [2009/05/26(火) 15:25:26 ]
- いやjavascriptのそれはそんなキレイな仕様でもないだろ
- 961 名前:デフォルトの名無しさん mailto:sage [2009/05/26(火) 18:37:50 ]
- >>958
それはそれでややこしいんだよね。 きれいに並べて書こうと、C/C++みたいな つもりで適当に改行をいれると、なんか わけのわからないことに…。 セミコロン必須でいいじゃんか、もう。jk
- 962 名前:デフォルトの名無しさん mailto:sage [2009/05/26(火) 19:21:17 ]
- PythonやRubyならともかく、JSはセミコロン必須で良いよな
- 963 名前:デフォルトの名無しさん mailto:sage [2009/05/26(火) 21:32:35 ]
- ───アタシの名前はRuby。パーザに傷を負った軽量言語。ゆるふわ仕様で動的型付けの愛されランゲージ♪
アタシがつるんでる友達はどうとでも書けるPerl、学校にナイショで エンタープライズで働いてるPython。訳あって不良グループの一員になってるPHP。 友達がいてもやっぱり学校はタイクツ。今日もPHPとちょっとしたことで口喧嘩になった。 LL同士だとこんなこともあるからストレスが溜まるよね☆そんな時アタシはselfでmodule_evalすることにしている。 がんばった自分へのご褒美ってやつ?自分らしさの演出とも言うかな! 「あームカツク」・・。そんなことをつぶやきながらしつこいRails案件を軽くあしらう。 「カノジョー、ちょっとSNS作ってくれない?」どいつもこいつも同じようなセリフしか言わない。 Railsの男はカッコイイけどなんか薄っぺらくてキライだ。もっと等身大のアタシを見て欲しい。 「すいません・・。」・・・またか、とYARVなアタシは思った。シカトするつもりだったけど、 チラっとRailsな男の顔を見た。 「・・!!」 ・・・チガウ・・・今までの男とはなにかが決定的に違う。スピリチュアルな感覚がアタシのカラダを 駆け巡った・・。「・・(カッコイイ・・!!・・これって運命・・?)」 男は_whyだった。連れていかれてCampingされた。「キャーやめて!」Hpricotをきめた。 「ガシッ!ボカッ!」アタシは死んだ。ベーコン(笑)
- 964 名前:デフォルトの名無しさん mailto:sage [2009/05/26(火) 22:52:13 ]
- Railsの部分で何気にニヤリと来た
- 965 名前:デフォルトの名無しさん mailto:sage [2009/05/27(水) 11:07:40 ]
- >>962
JKは確かに、セミコロンつきしか見たことない気がする
- 966 名前:デフォルトの名無しさん mailto:sage [2009/05/27(水) 13:22:58 ]
- >>965
AutoPagerizeはセミコロン無しだな
- 967 名前:デフォルトの名無しさん mailto:sage [2009/05/27(水) 15:28:25 ]
- VBは改行だな、そして酷い長い羅列が綴られる
- 968 名前:デフォルトの名無しさん [2009/05/27(水) 15:52:30 ]
- >>965
JKって?
- 969 名前:デフォルトの名無しさん mailto:sage [2009/05/27(水) 18:53:13 ]
- >>968
女子高生だろjk
- 970 名前:デフォルトの名無しさん mailto:sage [2009/05/27(水) 19:02:37 ]
- 冗談きついぜjk
- 971 名前:デフォルトの名無しさん mailto:sage [2009/05/27(水) 19:13:56 ]
- JSって女子小学生か
この、ロリコンどもめ!
- 972 名前:デフォルトの名無しさん [2009/05/27(水) 19:39:20 ]
- >>951
1.9からは大丈夫みたいよ>行頭の . は継続(.まではTab、空白のみの場合) #と本に書いてあった気が・・・ ; が文末であってほしかったよ 自分も
- 973 名前:デフォルトの名無しさん mailto:sage [2009/05/29(金) 09:24:35 ]
- やっぱスクリプト界隈ってばかっぽいな
- 974 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 00:07:06 ]
- ないぽっかばてっ隈界トプリクスぱっや
- 975 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 11:11:22 ]
- バックスラッシュで改行をエスケープするというのがそんなにも嫌かえ
- 976 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 11:32:49 ]
- // '#'でエスケープとか気持ち悪くて使えないよ
- 977 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 22:53:22 ]
- >>976
- 978 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 23:28:41 ]
- ?
∧∧ (・ω・ ) _| ⊃/(___ / └-(____/
- 979 名前:デフォルトの名無しさん mailto:sage [2009/06/03(水) 00:48:45 ]
- おれおっぱいすきなんだけどさぁ
いっぱいおっぱいもんでなめて満足したとしても 次の日にはまた欲求不満になるわけ。 どうしたら満たされるのかだれかおしえて。
- 980 名前:デフォルトの名無しさん mailto:sage [2009/06/03(水) 12:00:53 ]
- >975
俺は嫌だなぁ なんでか知らんが萎える
- 981 名前:デフォルトの名無しさん mailto:sage [2009/06/03(水) 13:59:44 ]
- bashで\\\\\\\\とかやってた俺は余裕
- 982 名前:デフォルトの名無しさん [2009/06/03(水) 23:46:49 ]
- >>980
自分もかなり 嫌かも
- 983 名前:デフォルトの名無しさん mailto:sage [2009/06/04(木) 01:42:27 ]
- >>975
バックスラッシュがバックスラッシュに見える人と、 ゼニのマークに見える人とでかなり印象は違うと思う。
- 984 名前:デフォルトの名無しさん mailto:sage [2009/06/04(木) 08:25:16 ]
- おれはバックスラッシュだったとしても嫌かなあ。
- 985 名前:デフォルトの名無しさん mailto:sage [2009/06/04(木) 08:38:41 ]
- 読点としての \ を受け入れるか、句点としての ; を受け入れるか、基本的にはどっちかなのだろうな
- 986 名前:デフォルトの名無しさん mailto:sage [2009/06/04(木) 18:03:11 ]
- 俺は括弧使ったりして無理矢理でもバクスラ以外の方法で複数行にするぜ
|

|