1 名前:デフォルトの名無しさん mailto:sage [2009/06/05(金) 10:48:30 ] 最強のLL=軽量プログラム言語は、どれよ? エントリーは、 Perl、PHP、Python、Ruby、JavaScript・・・ さあ、死ぬまで語りやがれ!!! ■LLとは? 軽量プログラミング言語(Lightweight Language,LL)とは、取り回しに優れ、 コードの作成や修正が容易と見なされるプログラミング言語のことを指す。 ここでいう「軽さ」はプログラマの負担の軽重を指し、 実行速度に優れているという意味ではない。 現在の水準では ・インタプリタ ・動的型 ・正規表現 ・関数オブジェクト などを利用できるものがLLと呼ばれることが多い。(Wikipediaより) ■過去スレ 【Perl,PHP】LLバトルロワイヤル5【Ruby,Python】 pc12.2ch.net/test/read.cgi/tech/1238720336/ 【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/
321 名前:デフォルトの名無しさん mailto:sage [2009/06/29(月) 19:08:34 ] >>319 そもそも、変数宣言がなかったら、 ブロックスコープはどのように 表現すればいいの?
322 名前:デフォルトの名無しさん mailto:sage [2009/06/29(月) 19:30:37 ] >>321 ブロックスコープは、無名関数をその場で1回だけ呼ぶのと同じ
323 名前:デフォルトの名無しさん mailto:sage [2009/06/29(月) 20:52:50 ] 変数宣言させることで、汚いコードを書けないように制約を受けるわけで、それは凄く楽だわ。PHPとかJavaScriptとか関数ベースのスコープの言語と比べると、そう思う。
324 名前:デフォルトの名無しさん mailto:sage [2009/06/29(月) 21:19:11 ] >>321 必要に応じて変数名の前か後ろにスコープを記述すればいいんじゃない?
325 名前:デフォルトの名無しさん mailto:sage [2009/06/29(月) 21:40:22 ] >>324 よくわからんので擬似コードでも書いてみればいいじゃない
326 名前:デフォルトの名無しさん mailto:sage [2009/06/29(月) 21:48:02 ] >>316 まず、$form_data{$name} に配列のリファレンスを入れたいようだ、っていうのはわかるよね。 んで、その配列に$valueを追加する、っていう処理だとおもう。 そのさい、配列のリファレンスならデリファレンスする必要があるし、ただの配列なら単純にリスト で追加してからリファレンスとして格納。 んで、5行目のこれ > $form_data{$name} = [$form_data{$name} } , $value ]; typoってないか? そして上記前提を覆す8行目 $form_data{$name} = $value; このカオス。$valueは何者よw 結論から言うと、このコードは読めなくていいよ。 おれは読めないwww おれが勘違いしてるのかな。そうだといいな。
327 名前:326 mailto:sage [2009/06/29(月) 21:53:40 ] うん。やっぱり勘違いしてた。 最初に値(単純にスカラー期待)が与えられたときは、普通にスカラー。 もいちど飛んできたときは、配列のリファレンスとして格納。それだけだね。 どうせなら最初から配列のリファレンスにするよね、っていう固定観念があった。
328 名前:デフォルトの名無しさん mailto:sage [2009/06/29(月) 22:43:18 ] >>325 擬似っつーかPowerShellだけど > $hoge = 100 > & { $hoge = 111; "global: $global:hoge local: $hoge" } global: 100 local: 111 みたいな感じ まあブロックの中にまたブロックを〜みたいな話になると別の方法になるけども
329 名前:デフォルトの名無しさん mailto:sage [2009/06/30(火) 01:41:54 ] >>325 どうでもいいけどその言い回しおもしろいな
330 名前:デフォルトの名無しさん mailto:sage [2009/06/30(火) 05:17:51 ] Rubyは、変数への代入で宣言も一緒にされるようなもんだっけ… グローバルというかブロックの外に変数があるとそれを使い、ないとブロック内でのローカルになる。 たまにハマるんだよなー。 ↓こういうの 10.times do |x| i = x end puts i unko.rb:4: undefined local variable or method `i' for main:Object (NameError)
331 名前:デフォルトの名無しさん mailto:sage [2009/06/30(火) 06:37:41 ] >330 その場合、timesより前に i = nil でも i = 0 でも良いから代入が要るんよね 何回かやると慣れるがw
332 名前:デフォルトの名無しさん mailto:sage [2009/07/01(水) 17:08:23 ] >>331 宣言だけじゃ駄目なんだっけ?
333 名前:デフォルトの名無しさん mailto:sage [2009/07/01(水) 18:31:14 ] Rubyに変数宣言文は無いよ 最初の代入が宣言の代わりになるから、スコープ入る前に何か値を入れればスコープがそこに決まる
334 名前:デフォルトの名無しさん mailto:sage [2009/07/01(水) 18:34:03 ] 代入が無ければメソッド呼び出しと区別できない というか宣言に相当するような構文が無い。代入が宣言を兼ねるというか
335 名前:デフォルトの名無しさん mailto:sage [2009/07/01(水) 18:36:47 ] 同じ変数名で局所化することはできるの?ブロックの外でiを使って、ブロックに入って、別のiを使うっていう。
336 名前:デフォルトの名無しさん mailto:sage [2009/07/01(水) 18:40:14 ] 不安に思ったら関数のはじめあたりで初期化してやればいいだけ
337 名前:デフォルトの名無しさん mailto:sage [2009/07/01(水) 19:57:20 ] >335 変数名被るほど長いメソッドにせず、素直にprivateメソッド作る
338 名前:デフォルトの名無しさん mailto:sage [2009/07/01(水) 20:21:02 ] >>337 また後付け前提ですか
339 名前:デフォルトの名無しさん mailto:sage [2009/07/01(水) 20:54:23 ] >338 「それぐらいしか無い」とでも解釈すれば良いじゃない 具体的な挙動は相手にお任せするのがOOP流さね
340 名前:デフォルトの名無しさん mailto:sage [2009/07/01(水) 21:27:21 ] >>339 二行目が全く>>337 etcとつながらないな 意味不明
341 名前:デフォルトの名無しさん mailto:sage [2009/07/01(水) 22:09:06 ] >340 ん?二行目はすぐ上の行としか繋がってないよ? 同じ文章でも各自で解釈は違いうる、ってポリモーフィズムっぽいよなあ、と
342 名前:デフォルトの名無しさん [2009/07/01(水) 22:15:53 ] ブロックスコープの話とOOPの話がどう結びつくのよ
343 名前:デフォルトの名無しさん mailto:sage [2009/07/01(水) 22:16:58 ] どこともつながってないだろw
344 名前:デフォルトの名無しさん [2009/07/01(水) 23:03:27 ] >>337 privateメソッドにしてそのメソッドから外に出したら、(そのオブジェクトの)他のメソッドからも呼べちゃうんじゃない?
345 名前:ぼくのかんがえたさいきょうの mailto:sage [2009/07/02(木) 01:14:18 ] 動くUMLだと思えば そんなもんだろ
346 名前:デフォルトの名無しさん mailto:sage [2009/07/03(金) 12:25:29 ] >>335 最新過ぎて第三者ライブラリの対応が追いついてないRuby1.9からはデフォルトでできる 一般的に使われてるRuby1.8ではそもそもできない s = '無くしたら地球がヤバいデータ' [1, 2, 3].each do |s| s*10 # 適当 end puts "#{s} は超重要だ!" # Ruby1.8.7 3 は超重要だ! # Ruby1.9.1 無くしたら地球がヤバいデータ は超重要だ! Ruby1.8 のせいで地球がヤバい
347 名前:デフォルトの名無しさん mailto:sage [2009/07/03(金) 12:47:36 ] うは。便利だけど 1.8 との互換性を考えると恐ろしい。
348 名前:デフォルトの名無しさん mailto:sage [2009/07/03(金) 13:09:04 ] 単なる変数じゃなくて、ブロックの引数であることに注意。
349 名前:デフォルトの名無しさん mailto:sage [2009/07/03(金) 13:38:28 ] これでRuby使わない決心がついた。ありがとう。
350 名前:デフォルトの名無しさん mailto:sage [2009/07/03(金) 13:40:21 ] 似たようなのはPythonでもあるね。 x = "hoge" y = [x for x in range(10)] print(x) Python 2.x なら xは9で、 3.xなら"hoge"のまま。 内包表記の中だけの名前になってる。
351 名前:デフォルトの名無しさん mailto:sage [2009/07/03(金) 13:46:30 ] for や while を使う人がいないって言ったら Ruby 嫌がった人もいたし、人それぞれだな
352 名前:デフォルトの名無しさん mailto:sage [2009/07/03(金) 13:59:02 ] >>346 Rubyって変数のスコープないの? 大昔に作られたLispですら変数のスコープがあるのに… だめだめじゃん
353 名前:デフォルトの名無しさん mailto:sage [2009/07/03(金) 14:12:01 ] は?
354 名前:デフォルトの名無しさん mailto:sage [2009/07/03(金) 14:25:43 ] >>352 >>346 を煽るのに「スコープがない」と言ってしまうような人はこのスレに来ちゃだめでちゅよ
355 名前:デフォルトの名無しさん mailto:sage [2009/07/03(金) 14:29:31 ] >>354 > ブロックの外でiを使って、ブロックに入って、別のiを使うっていう。 スコープだろうが
356 名前:デフォルトの名無しさん mailto:sage [2009/07/03(金) 15:05:25 ] Rubyは local や my といった予約語を使わずに、文脈上でスコープを定義する ブロック内に変数が出現したとき、その時点で可視かどうかで 可視 → その変数を使う(つまり、書き換える) 不可視→ 新規変数(ブロックローカル)として定義する という動作になってる >>346 では [1, 2, 3].each のブロック内での s は可視なので、変数を単に再利用する これを最初から不可能にすることもできなくはなかったんだが、そうすると out = 外部データ' someblock do |s| puts out #=> undefined end というように、ブロック外の変数にアクセスする方法がなくなってしまう
357 名前:デフォルトの名無しさん mailto:sage [2009/07/03(金) 15:23:21 ] メソッドの引数も、ブロックの引数も、ライブラリの名前とかも宣言するのに 変数を宣言しない理由がよくわからない
358 名前:デフォルトの名無しさん mailto:sage [2009/07/03(金) 15:25:31 ] R++ が出来たら Ruby を認めてやるよ。
359 名前:デフォルトの名無しさん mailto:sage [2009/07/03(金) 15:27:44 ] >>357 変数は使う場所多いからいちいち宣言するのめんどいじゃん? というような趣旨のことをどっかで聞いた覚えがある
360 名前:デフォルトの名無しさん mailto:sage [2009/07/03(金) 15:30:50 ] 変数宣言なんか導入されたら現状のRubyの利点である 「ローカル変数かインスタンスメソッドかよくわからないがとにかく返り値を返す何かであるhoge」 というのができなくなるじゃないかー
361 名前:デフォルトの名無しさん mailto:sage [2009/07/03(金) 15:35:22 ] それ、やってるのお前だけだから。
362 名前:デフォルトの名無しさん mailto:sage [2009/07/03(金) 17:31:50 ] >357 ライブラリ名の宣言というのがよく分からんが メソッドやブロックの引数はRubyの場合、代入だろ? モジュールやクラスの定義は Module、Classのインスタンスを作成し定数に代入 さらに最後の式の結果を返す文 メソッド定義だけは少し毛色が違う気がするね あれはProcのインスタンス作成とかしないだろうし
363 名前:デフォルトの名無しさん [2009/07/03(金) 18:47:03 ] >>352 変数のスコープが無い って、言ってることがよくわからんな。 ローカル変数もインスタンス変数もクラス変数もスコープはちゃんとあるし。 ブロックがスコープを作らないってならPythonもJavascriptも一緒だし。
364 名前:デフォルトの名無しさん mailto:sage [2009/07/03(金) 18:53:39 ] JavaScript1.7だったかからはブロックごとのスコープを持つletというのが出てきてvarの影が薄くなってる
365 名前:デフォルトの名無しさん mailto:sage [2009/07/03(金) 18:54:27 ] Rubyの通常のブロックはスコープ作るよ ブロック開始時の文脈でブロック内の変数の新規性をチェックしてるに過ぎない
366 名前:デフォルトの名無しさん mailto:sage [2009/07/03(金) 19:03:09 ] うん、 class C def initialize hoge = 'hoge' @block = lambda{puts hoge} end def run hoge = 'MODIFIED!' @block.call end end C.new.run は、call で実行された環境ではなく block が定義された文脈を考慮して 'hoge' を表示する
367 名前:デフォルトの名無しさん mailto:sage [2009/07/03(金) 19:05:44 ] 本スレにもクロージャのスコープが理解できなくて延々文句垂れてた奴がいたな そんな特殊なものでもないしちょっと調べれば分かるのに、Rubyばっかり話題になる意味がよく分からん
368 名前:デフォルトの名無しさん mailto:sage [2009/07/03(金) 19:12:55 ] それは別の話じゃね
369 名前:デフォルトの名無しさん mailto:sage [2009/07/03(金) 22:11:48 ] >>365 単純に、initializeとdefとは違うスコープになってて 呼び出し先が違うだけって事じゃないの?
370 名前:デフォルトの名無しさん mailto:sage [2009/07/05(日) 04:29:55 ] >>349 遅すぎだろ。jkw
371 名前:デフォルトの名無しさん [2009/07/06(月) 00:08:20 ] なー、シンプルにそれぞれの最も優れてる実例を出してくれないか? 結局大事なのは使えるかだろ?
372 名前:デフォルトの名無しさん [2009/07/06(月) 00:37:19 ] www.google.com/
373 名前:デフォルトの名無しさん [2009/07/06(月) 21:34:43 ] えっ
374 名前:デフォルトの名無しさん [2009/07/06(月) 21:35:26 ] 何これこわい
375 名前:デフォルトの名無しさん [2009/07/07(火) 01:33:20 ] >>372 の脳内 (検索しろ!と言う。俺かっこいいべ!昔はmanだったけど今はGoogleだべ。)
376 名前:デフォルトの名無しさん [2009/07/07(火) 07:30:19 ] www.youtube.com/
377 名前:デフォルトの名無しさん [2009/07/07(火) 08:50:13 ] d.hatena.ne.jp/keyword/Python googleに使われてるよ
378 名前:デフォルトの名無しさん mailto:sage [2009/07/07(火) 09:02:34 ] >>377 で?
379 名前:デフォルトの名無しさん [2009/07/07(火) 09:04:06 ] >>378 Pythonが一番
380 名前:デフォルトの名無しさん mailto:sage [2009/07/07(火) 09:30:20 ] Pythonはいいけど信者はうざい。この点rubyを凌駕している。
381 名前:デフォルトの名無しさん mailto:sage [2009/07/07(火) 09:32:12 ] 信者「ではない」よ たぶんね
382 名前:デフォルトの名無しさん mailto:sage [2009/07/07(火) 09:44:18 ] 信者は「他称」だからなw
383 名前:デフォルトの名無しさん mailto:sage [2009/07/07(火) 09:48:50 ] 傍目にウザい時点で他人が装ってる可能性が大 >>380 みたいに単純な人はいいオモチャ
384 名前:デフォルトの名無しさん mailto:sage [2009/07/07(火) 10:48:48 ] 信者はうざい。はここの書き込みに言ったのではない。
385 名前:デフォルトの名無しさん mailto:sage [2009/07/07(火) 12:51:34 ] >>380 ルビ厨のほうがひどいだろ。jk
386 名前:デフォルトの名無しさん mailto:sage [2009/07/07(火) 13:15:51 ] どの言語信者も最近はわりと皆おとなしいだろ 弾やmatzも
387 名前:デフォルトの名無しさん mailto:sage [2009/07/07(火) 13:21:28 ] >>384 >>379 がageてるのに気づいて後出しじゃんけんですね。わかります。
388 名前:デフォルトの名無しさん mailto:sage [2009/07/07(火) 14:05:45 ] お前に何がわかるっていうんだ!!
389 名前:デフォルトの名無しさん mailto:sage [2009/07/07(火) 14:16:03 ] JavaってLLじゃね?
390 名前:デフォルトの名無しさん mailto:sage [2009/07/07(火) 15:31:14 ] >>1 にエントリーされていないのでスレ違いとなります
391 名前:デフォルトの名無しさん mailto:sage [2009/07/07(火) 17:06:57 ] >>390 ダメです。
392 名前:デフォルトの名無しさん mailto:sage [2009/07/07(火) 18:00:16 ] 久し振りにラクダ本を開いた。 テキトーなページを開いたら「配列の配列」について書かれていて for $i ループ内には $AoA[$i] = @array; # 間違い $AoA[$i] = [ @array ]; # 正しい と書かれていた。 …俺は読むのをやめた。
393 名前:デフォルトの名無しさん mailto:sage [2009/07/07(火) 18:46:27 ] >>392 それのどこに嫌要素が? 超わかりやすいだろ。
394 名前:デフォルトの名無しさん mailto:sage [2009/07/07(火) 18:54:26 ] >>392 何が問題なん?
395 名前:デフォルトの名無しさん [2009/07/07(火) 19:29:05 ] で、1は誰なんだよ
396 名前:デフォルトの名無しさん mailto:sage [2009/07/07(火) 19:33:28 ] お前に決まってるだろ
397 名前:デフォルトの名無しさん [2009/07/07(火) 19:36:38 ] じゃあ独断と偏見でPythonって事で
398 名前:デフォルトの名無しさん mailto:sage [2009/07/07(火) 20:00:10 ] もう俺JavaScriptでいいや
399 名前:デフォルトの名無しさん mailto:sage [2009/07/07(火) 23:04:16 ] Python最強ですよねー
400 名前:デフォルトの名無しさん mailto:sage [2009/07/07(火) 23:09:03 ] >>392 は、以前にPerlを触ったときにはスカラーの概念やリファレンスまでは たどり着けなかったんだと。 まあどの言語でも、一つずつ覚えてちょっとずつ進歩していけばいいと思うよ。
401 名前:デフォルトの名無しさん mailto:sage [2009/07/08(水) 03:33:31 ] 俺には393や394の感覚がわからん。400もな。 392の例はあからさまに直感的じゃないと思うよ。
402 名前:デフォルトの名無しさん mailto:sage [2009/07/08(水) 03:44:53 ] $AoA[$i] = $@array;
403 名前:デフォルトの名無しさん mailto:sage [2009/07/08(水) 04:41:20 ] 配列のリファレンスも分からないようなPerl素人がいきなりラクダ本なんて読もうと思うのが間違い。 もっと初心者向けび本にしとけ。 というか、リファレンスとかポインタとか理解出来ない人間は職業プログラマーの素養がないので、PHPで日曜プログラマーでよい。
404 名前:デフォルトの名無しさん mailto:sage [2009/07/08(水) 05:00:29 ] 〜が理解できないとかPerl上級者とかそういう話はしてないよ
405 名前:デフォルトの名無しさん mailto:sage [2009/07/08(水) 05:04:00 ] リファレンスが解るかどうかと、392が直感的かとは別問題でしょ… 俺だってCやJavaやPythonやRubyでリファレンスなら扱えるさ Perlのは同じ記述がコンテキストで意味変わり過ぎてちと無理だわ
406 名前:デフォルトの名無しさん mailto:sage [2009/07/08(水) 05:05:55 ] $AoA[$i] = [ @array ]; # usually best $AoA[$i] = \@array; # perilous; just how my() was that array? @{ $AoA[$i] } = @array; # way too tricky for most programmers perldscから引用 直感的ではないなどと主観で言われても、 ああ、そうですかとしか言いようが無いけどね。
407 名前:デフォルトの名無しさん mailto:sage [2009/07/08(水) 05:15:50 ] >>402 それ、エラー出ないか? ちなみに同じページに $AoA[$i] = \@array; もほぼ間違い、と書かれていた。 @arrayがループ内でmyされたものなら問題は起きないが ループより外にスコープがあるものだった場合 \@arrayは毎回同じ配列へのリファレンスを取得してしまうから、だそうだ。
408 名前:デフォルトの名無しさん mailto:sage [2009/07/08(水) 06:20:36 ] 言語毎にまとめてみた。 上はコピーされてリファレンスが渡され、下は直接リファレンスが渡される。 Perl $AoA[$i] = [ @array ]; $AoA[$i] = \@array; PHP $AoA[$i] = $array; $AoA[$i] = &$array; Ruby AoA[i] = array.dup AoA[i] = array Python AoA[i] = list(array) AoA[i] = array
409 名前:デフォルトの名無しさん mailto:sage [2009/07/08(水) 06:29:28 ] Perlの場合リファレンスとかがわかりにくいというより コンテキストが問題を分かりにくくしてると思う
410 名前:デフォルトの名無しさん mailto:sage [2009/07/08(水) 07:52:09 ] 今回の例に限って言えば、配列(およびハッシュ)の要素にはスカラー値のみ格納できる、 っていう言語仕様を知ってるかどうかだけのことなんだろうけどな
411 名前:デフォルトの名無しさん [2009/07/08(水) 07:56:55 ] 配列の配列とかが直感的に思った通りに出来る言語が勝ちだな。
412 名前:デフォルトの名無しさん mailto:sage [2009/07/08(水) 08:06:57 ] >>411 直感は個人によって違うわけだから、そんなに直感的にやりたいなら自分で言語作ればいいんじゃないかと つプログラミング言語を作る 前橋 和弥 (著) www.amazon.co.jp/dp/4774138959/
413 名前:デフォルトの名無しさん mailto:sage [2009/07/08(水) 10:08:45 ] @hoge = (1, 2, (3, 4, 5), (6, 7, (8, 9)), 10);
414 名前:デフォルトの名無しさん mailto:sage [2009/07/08(水) 10:48:19 ] いつ見ても、Perlの文法は糞過ぎる。 なんで未だにこれを擁護出来る人が居るのか不思議でならない。
415 名前:デフォルトの名無しさん mailto:sage [2009/07/08(水) 10:54:06 ] 糞であるが故のバッドノウハウ症候群。 そして今更捨てられることができない認知的不協和。
416 名前:デフォルトの名無しさん mailto:sage [2009/07/08(水) 11:42:12 ] 無名関数を積極的に使いたい人は クラス・メソッドの関係にこだわらないperlの方がむしろ癖がなくて良い
417 名前:デフォルトの名無しさん mailto:sage [2009/07/08(水) 11:49:27 ] >416 まともな関数型言語触った事無い奴が、そんな寝ぼけた事言ってるんだろうな。
418 名前:デフォルトの名無しさん mailto:sage [2009/07/08(水) 11:51:04 ] 無名関数を積極的に使うならJSが割と最適解かも
419 名前:デフォルトの名無しさん mailto:sage [2009/07/08(水) 11:52:21 ] 416 は Perl しか使っていない
420 名前:デフォルトの名無しさん mailto:sage [2009/07/08(水) 12:07:54 ] 使いまわしの出来るクラスの一つや二つ作れるようになってから(ry
421 名前:デフォルトの名無しさん mailto:sage [2009/07/08(水) 12:30:21 ] >>418 合意