[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 2chのread.cgiへ]
Update time : 05/09 19:54 / Filesize : 194 KB / Number-of Response : 889
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

【Perl,PHP】LLバトルロワイヤル6【Ruby,Python】



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/

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
二行目が全く>>337etcとつながらないな
意味不明


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 合意

422 名前:デフォルトの名無しさん mailto:sage [2009/07/08(水) 12:31:36 ]
>>408
Javaに慣れてしまった俺としては、Rubyが一番素直に見える。
次はPython、でPHPの順かな。
Perlはやっぱり複雑怪奇だ。
配列をオブジェクトとして扱えた方が、array.lengthみたいな書き方が出来て便利だと思う。

>>418
確かに。
最初のうちは無名関数の使いどころがよくわからなかったけど、
JavaScriptを使っているうちになんとなく身についた。

423 名前:デフォルトの名無しさん mailto:sage [2009/07/08(水) 12:38:37 ]
無名関数を関数型言語で覚えた奴は、純粋な関数処理を書く。
JavaScriptで覚えた奴は、副作用大前提のプロシージャっぽいのを書く。

424 名前:デフォルトの名無しさん mailto:sage [2009/07/08(水) 12:56:06 ]
>>414
いつ見ても、Rubyの文法は糞過ぎる。
なんで未だにこれを擁護出来る人が居るのか不思議でならない。

と、何にでも適用可能だな。w



425 名前:デフォルトの名無しさん mailto:sage [2009/07/08(水) 13:02:03 ]
>>423
副作用大前提のおかげで、ジェネレータが発明されたんだぜ

426 名前:デフォルトの名無しさん mailto:sage [2009/07/08(水) 13:08:20 ]
LISPだって副作用バリバリだろ。


427 名前:デフォルトの名無しさん mailto:sage [2009/07/08(水) 13:13:00 ]
perlだけはレベルが違う

428 名前:デフォルトの名無しさん mailto:sage [2009/07/08(水) 13:26:55 ]
>>422
Java はどのへん?
C# は?

429 名前:デフォルトの名無しさん mailto:sage [2009/07/08(水) 14:53:48 ]
ラクダ本って言うのは、Perlに詳しい人が読む本。初心者が無理して読む本じゃない。



430 名前:デフォルトの名無しさん mailto:sage [2009/07/08(水) 15:05:58 ]
Javaは数値以外は基本的に参照、だからコピーのときに明示
C#は知らん

431 名前:デフォルトの名無しさん mailto:sage [2009/07/08(水) 15:06:15 ]
ダウト。ラクダ本は多言語上級者がPerl入門のために読むもの。






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<194KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef