【Perl,PHP】LLバトル ..
[2ch|▼Menu]
220:デフォルトの名無しさん
09/06/24 22:13:13
>>218
ifやforでインデントしない奴のソースなんか100人中98人までは読みたくねーよ
規約の遙か以前の問題で、またPythonのインデント強制とも次元が違いすぎる

switch〜caseなんかもifの構文糖衣だし、なんか的はずれすぎてワロタ

221:デフォルトの名無しさん
09/06/24 22:35:46
>switch〜caseなんかもifの構文糖衣だし、なんか的はずれすぎてワロタ

ぶっちゃけ違う。

同じと思っているならソレは>>220のレベルが極限まで低い証拠。
そういう低レベルがPythonをどーこー言うのは的外れ。

222:デフォルトの名無しさん
09/06/24 22:44:36
>>221
どう違うのを書かないと、>>221のレベル(笑)もわからんな
例えば、ifで代替できないシンプルなswitch文をあげてみるとか、
コンパイラ方面での話をしてみるとか

223:デフォルトの名無しさん
09/06/24 22:52:18
ifでswitchの振り分け真似ると、orだらけになったりするコトも

後で指導するが、明らかにアレは見づらい

224:デフォルトの名無しさん
09/06/24 22:55:11
ifとswitchは似ている様で違うだろ。

Pythonはswitchなくてもほとんど困らないが、その理由が解らない>>220
ちょっと頭が可哀想な人なんだと思う。

225:デフォルトの名無しさん
09/06/24 23:11:59
>>220が攻撃される理由が分からん。

pythonのは、OOだ!OOを使え!ルーク!って教えでしょ。
Perlは、ライブラリだ!ライブラリを使え!ルーク!って教えだし。

しかし、switchはifのシンタックスシュガーじゃないのか?
ifで代替できない場面が分からない。
見易さだけなら、ただのシンタックスシュガーだし。

226:デフォルトの名無しさん
09/06/24 23:20:20
Python教こえーな
異教徒排除が徹底しすぎ
敵がJavaだけのRuby信者より質悪いわ

227:デフォルトの名無しさん
09/06/24 23:28:07
ということにしたいのですね?

228:デフォルトの名無しさん
09/06/24 23:34:51
一応考えてみたが、switchには、if〜else単独にはないラベルへのgotoも複合されている
C#みたいなものもある、とかいう点なのかな?
この場合は、switchってif〜else+gotoの糖衣構文じゃん、とか言ってみたらどんな反応が
来るんだろう。やっぱり同じ反応な気もするが。

あとはコンパイラの最適化でなにかあるのかな〜くらいしか思いつかないが、「違う」理由を、
純粋に勉強のためにせっかくだから誰か教えてくれないもんだろうか。気になる。

229:デフォルトの名無しさん
09/06/25 00:38:08
正露丸糖衣A

230:デフォルトの名無しさん
09/06/25 00:38:58
xがOまたはPまたはQのときは処理aと処理b
xがRまたはSのときは処理bのみ
それ以外のときは処理cを行なうってコードとか?

231:デフォルトの名無しさん
09/06/25 00:49:16
C言語だと switch と if が違うというのはわかるが、LL だとどうなんだろ?
C言語は、コンパイラやコードによっては、テーブルを引いてジャンプするコードに変換される場合があるらしいが。

232:デフォルトの名無しさん
09/06/25 00:54:14
>>230
switch( str )
{





233:デフォルトの名無しさん
09/06/25 00:59:53
Enter押してしまった・・・ orz

>>230
switch( str )
{
 case 'O':
 case 'P':
 case 'Q':
  function_a();

 case 'R':
 case 'S':
  function_b();
  break;
}

こういうのはifよりswitchのほうが楽だね

234:デフォルトの名無しさん
09/06/25 01:10:30
if s in 'OPQ': function_a()
elif s in 'RS': function_b()

235:デフォルトの名無しさん
09/06/25 01:12:21
あ、function_aの後は下へ流れるのか

236:デフォルトの名無しさん
09/06/25 01:22:22
Python には暗黙のルール、見た目から意味が推測できない記号が
少ないから、メタクラスとか駆使した一部分のコードをのぞき、Pythonに
それほど精通しなくても大体のコードは読める。

その反対は(非モダンな)Perlで、初心者どころか中級者になっても
他人のコードが読めなかったり、下手すると昔の自分の書いたコードが
読めないなんてことが起こる。

237:233
09/06/25 01:27:14
>それ以外のときは処理cを行なうってコードとか?
・・・ (´・ω・`)

switch( str )
{
 case 'O':
 case 'P':
 case 'Q':
  function_a();

 case 'R':
 case 'S':
  function_b();
  break;

 default:
  function_c();
  break;
}

もうねまふ。。。

238:デフォルトの名無しさん
09/06/25 02:11:59
>>233
if str in "OPQ":
    func_a()
if str in "OPQRS":
    func_b()


239:デフォルトの名無しさん
09/06/25 02:18:15
>>237
if str in 'OPQ':
      func_a()
if str in 'OPQRS':
      func_b()
else:
      func_c()

240:デフォルトの名無しさん
09/06/25 02:24:05
str の内容が 'RS' とかだったらどうするんだろ?

241:デフォルトの名無しさん
09/06/25 02:29:00
リスト使えばええがな

242:デフォルトの名無しさん
09/06/25 02:33:08
Pythonのinって何が起きてるんだ?
何となく分かるようで分からん。文字単位でのマッチング?

243:デフォルトの名無しさん
09/06/25 02:34:36
文字列は文字のリスト

244:デフォルトの名無しさん
09/06/25 03:13:57
URLリンク(www.python.jp)

245:デフォルトの名無しさん
09/06/25 03:19:45
俺的には K&Rが読みやすいから、GNUだなんだの見るよりは
インデントが統一されてるなら、読みやすくはあるんだろうなー
とは思う。 最終的には慣れだろうけど…

今は括弧がないとなんか読みにくい感じ。
do endもなんかなれないんだよなー

246:デフォルトの名無しさん
09/06/25 03:27:35
なんか場末のスナック的なスレだな

247:デフォルトの名無しさん
09/06/25 03:33:54
スナックに行った事が無いからワカンネ。

248:デフォルトの名無しさん
09/06/25 03:45:55
GNUスタイルとかは先頭ブレースの一行分長くなる点が好きでない
行数は可読性に直結すると思う
(だからといって、無理やり圧縮するのが良いとも思わないが)

その点、インデントベースは末尾のブレースやendも削れるのが素晴らしい
でも何となく好きになれないというワガママw どうも宙ぶらりん感がある

あとはS式みたいに、末尾に畳んじゃう記法だが・・・・編集がしずらいような
エディタの支援があればイケるか?

249:デフォルトの名無しさん
09/06/25 03:51:54
○ しづらい

250:デフォルトの名無しさん
09/06/25 03:56:25
S式は対括弧表示できるエディタ無いと苦しいね
まあ、Windows標準のメモ帳で開発しる!
なんてことが無い限り大丈夫だとは思うが

251:デフォルトの名無しさん
09/06/25 04:42:53
S式は文字数でインデントするからプロポーショナルだと崩れて読みづらい。
アメリカだとプロポーショナルでコーディングしてる人も結構いる印章だけど、彼らはどうしてるの?

252:デフォルトの名無しさん
09/06/25 08:03:14
>>240
具体的に >>233 で str の内容がRSの例を出してくれ。
とりあえず、
s = str[0]
if s in "OPQ":
  func_a()
if s in "OPQRS":
  func_b()

Python は他にも、 10 <= a && a < 20 を 10 <= a < 20 と書けたりするし、
if, elif の後に書ける条件式が強力だから switch 文が要らない。

253:230
09/06/25 09:11:22
えーと…OPQRSが文字として扱われるとは思なかった(・ω・)
それぞれ何らかの値と結び付けられてる定数のつもりだったんだけど…

254:デフォルトの名無しさん
09/06/25 09:26:55
>>253
if s in (O,P,Q):
  func_a()
if s in (O,P,Q,R,S):
  func_b()
else:
  func_c()

Pythonにswitchが無いのは、散々議論された上で必要ないと判断されたから。

255:デフォルトの名無しさん
09/06/25 11:40:07
RubyやRoRって、生産性が高いって言うけど、それは膨大な規約を丸暗記した上での話だよな。俺的には分かりづらいったらありゃしないよ。

256:デフォルトの名無しさん
09/06/25 12:00:59
人の作った物だと丸暗記になるが、作った本人は丸暗記だと思ってないだろう

257:デフォルトの名無しさん
09/06/25 12:03:59
>>255
それは、他のでも変わらん

258:デフォルトの名無しさん
09/06/25 12:49:55
caseと三項演算子があればむしろif関係いらなくない?


259:デフォルトの名無しさん
09/06/25 16:44:58
ぶっちゃけswitchの方が意味解りやすいな

260:デフォルトの名無しさん
09/06/25 18:49:20
RubyやRoRは、どうだこれだと直感的で分かりやすいだろうっていう教条的な態度が我慢ならない。設定より規約って、大量に規約を覚えれば設定が省けるに過ぎない。

261:デフォルトの名無しさん
09/06/25 19:48:21
Strutsはわかりにくいうえに傲慢な態度だからな。しかも制約が多いくせに手間は省けない。
それよりは100万倍まし。

262:デフォルトの名無しさん
09/06/25 19:51:05
Javaだとmavenの思想が好きだ。
とりあえず何も書かなくても動く。
動きを変えたいところだけ、書く。

263:デフォルトの名無しさん
09/06/25 21:22:07
>>262
それならまさにRailsの思想じゃないかと

264:デフォルトの名無しさん
09/06/26 00:35:17
Ruby on Railsを使った事ない奴は、一度使ってから批評しような、とちょっと思った
中身をいじる必要も機会も、Java APIやJavaのframe workと同様に無いわけだしなw
もちろん、上書きは自由だし可能だしなあ

265:デフォルトの名無しさん
09/06/26 00:40:22
だから、結局、どんなフレームワークだって、最初に使うときは、
覚えなきゃならない事が沢山あるって事に違いはない。
フレームワークどころか、多機能な道具は、皆、
使った事が無ければ覚える事が多いってだけだ。
あとは、その道具の体系化の仕方が、
使おうとする個人に合っているかどうかというだけの事だ。
極めて、普遍的で当たり前の事であって、
わざわざ、キーボードを打つ手間を掛ける価値のない事だ。

266:デフォルトの名無しさん
09/06/26 00:49:47
>>265は、
> 使おうとする個人に合っているかどうかというだけ
が、普遍的で当たり前でキーボードを打つ手間を掛ける(、ましてやサーバ準備して
実行環境を整えるなんて!)価値のない事と言い切るが、それは本当にそうなのか。

足りていれば問題ないが、足りなくなったときにそれでは足るまい(←自己撞着)
まあ何でもいいが、それなりに使って評価してる人間がいるときに使わない人間の
評価なんて糞だと思うな。

267:デフォルトの名無しさん
09/06/26 01:07:49
>>261
そんな君にはWicketが向いている

268:デフォルトの名無しさん
09/06/26 03:10:55
>>265
Railsはあまたあるフレームワークの中でも暗黙の了解が半端なく多い。少ないコードで組めるっていうのは、それに頼ってるだけ。

269:デフォルトの名無しさん
09/06/26 03:20:55
まあ、言語自体が覚えること多過ぎな言語とか
標準ライブラリも拡張ライブラリも全部予約語扱いで予約語一覧だけで何ページにも渡る言語とか
そーゆーのもあるけどな

270:デフォルトの名無しさん
09/06/26 03:25:30
そんなことより、Erlanの話しようぜ

271:デフォルトの名無しさん
09/06/26 04:18:25
もしかして:Erlang

272:デフォルトの名無しさん
09/06/26 11:52:06
Erlang の話をする位なら Scala の話をしようぜ

273:デフォルトの名無しさん
09/06/26 11:55:42
今更ながら Python は良い言語かもしれないと思えて来た。
上の方のレスで、気持ち悪いと書いてしまってすまんかった。

274:デフォルトの名無しさん
09/06/26 12:33:21
>>272
ちょっと触ってみてるけど、
現時点では良いやら悪いやら分からん言語、という感想

狙いは合ってると思う
次に注目される言語が何かは分からんが、たぶんマルチパラダイムだろうし、
静的型付けの利点を残したまま記述量を減らすなら型推論は妥当
C#とかもその方向ではある

ただXMLリテラルは個人的に疑問。XMLは言語レベルで密結合させるほど絶対的なものか?
あと、背反しがちなオブジェクト指向と関数型を調和させようとして
言語が複雑奇怪になりかけてる(?)のも気になる。まあ仕方ない感はあるけど

275:デフォルトの名無しさん
09/06/26 14:42:21
>>274
>あと、背反しがちなオブジェクト指向と関数型を調和させようとして

そうなの?なぜ背反になるのかだれか教えて。

276:デフォルトの名無しさん
09/06/26 14:43:32
>>274
難解な表現はやめてもうちょっと簡単にいって。
じゃないとこのスレでは立ち入り禁止します。

277:デフォルトの名無しさん
09/06/26 15:09:12
おいおい、なんのためのスレだよ

278:デフォルトの名無しさん
09/06/26 15:36:40
Pythonにブロックスコープ無いけど、これは利点なの?欠点なの?
Rubyにも無いみたい。

279:デフォルトの名無しさん
09/06/26 15:44:14
グローバル変数さえ判り易ければいいと思うが、どうなんだろ
スコープ無しはプログラミングしたことないわ

280:デフォルトの名無しさん
09/06/26 16:11:37
ブロックスコープに頼って長々とメソッド書くんじゃない、ってことじゃないかな。
Ruby のブロック(は他の言語のブロックと違うけど)には、ブロックローカルが
あるけどね。

281:デフォルトの名無しさん
09/06/26 16:15:32
>>275
自分は >>274 じゃないが、
関数型だと変数は一度設定したら、書き換えない物であるのに対して、
オブジェクト指向だと、変数はドンドン書き換える物だから、
相容れないという事では?

282:デフォルトの名無しさん
09/06/26 16:32:36
>>280
ブロックスコープもそうだが
ローカル関数 (メソッドではない) に頼ってもメソッドは長くなる。
そういう書き方が嫌なのはOOへの拘りが強いせいでもあるんじゃないか。

283:デフォルトの名無しさん
09/06/26 17:04:21
でも拘るならスコープを狭い範囲に留めてさせてほしいなぁ。
その関数(やらメソッド)でしか使わない処理を、その関数(ry と同じ層に
おくのはなんかイヤらしい感じ。


284:デフォルトの名無しさん
09/06/26 17:06:08
JavaScriptにもブロックスコープがないのは盲点。

285:デフォルトの名無しさん
09/06/26 17:10:14
ブロックスコープの意味が未だに判らない。
for や while の中だけで有効な変数を作りたいってこと?
>>283 の言ってる、関数でしか使わない変数って、Pythonでも関数の中の
ローカル変数になるよね?

286:デフォルトの名無しさん
09/06/26 17:18:37
for や while の中、じゃなくて、
ブロックはブロックなんだけど。

for や while じゃない、ただ単にブロックだけのブロックも
あるわけで。

287:デフォルトの名無しさん
09/06/26 17:38:16
>>286
Pythonには無いよね>ブロックだけのスコープ

まぁ、関数より小さいスコープ作るよりも、関数自体を
小さくする方が良いんじゃないかな。

288:デフォルトの名無しさん
09/06/26 18:19:01
>>281
>関数型だと変数は一度設定したら、書き換えない物であるのに対して、

そんなことはない。関数型言語のうちで、そういうのもあるけど、たいがいのはそこまで厳しくない。
Lisp, Scheme, OCaml, ...
Haskellみたいなほうが少数派じゃね?

289:デフォルトの名無しさん
09/06/26 18:40:51
>>287
サブクラスを作るよりも、クラスの階層構造を小さくする方が良い
って思ったことはないのか?

290:デフォルトの名無しさん
09/06/26 18:43:01
>>278
>Pythonにブロックスコープ無いけど、これは利点なの?欠点なの?
>Rubyにも無いみたい。

一般的に、インタプリタではないと思う。これがあるのはコンパイル型言語の特徴じゃないかな。

もしインタプリタでブロックスコープを実現しようとすると、ブロックに入るたびに
新しい変数テーブルを用意し、ブロックから抜けるとそれを破棄しないといけない。
さすがにこれは、インタプリタでは性能がでない。

コンパイル型であればこれはコンパイル時に行なわれるから、実行時のペナルティはなしですむ。

インタプリタではあきらめろっつーことだな。ブロックスコープは、あったほうがうれしいけど、なくてもそうは困らない機能だから。

291:デフォルトの名無しさん
09/06/26 19:34:01
the requested operation has failed とエラーが出てapacheとphpの連携が取れない
システムファイルを変更すね前はapacheの起動はうまくいったのに、何をやっても
上のエラーが出てくる、誰か助けて〜〜〜〜〜〜〜〜!

292:デフォルトの名無しさん
09/06/26 19:43:07
>>285
変数だけじゃなくて、関数内関数も定義したいってこと。


293:デフォルトの名無しさん
09/06/26 19:50:39
>>291
まずはログファイルを探して読んでみよう

294:デフォルトの名無しさん
09/06/26 21:20:59
やっぱりブロックスコープがどうのこうの言ってるのが意味わからん。
たとえば、Perlではほぼできてる、ってこと?

#!/usr/bin/perl

my $a = 'a';
my $sub = sub(){ print "page\n"; };
{
 my $a = 'b';
 my $sub = sub(){ print "hoge\n"; };
 print $a . "\n";
 $sub->();
}
print $a . "\n";
$sub->();


295:デフォルトの名無しさん
09/06/26 22:31:08
本題からはずれるけど Perl で $a は使わないほうがいいよ

296:デフォルトの名無しさん
09/06/26 22:36:05
そう言えば、C++で昔 forのルール変わったよね。

for (int i = 0; 〜) の i のスコープがfor文内になった。


297:デフォルトの名無しさん
09/06/26 22:41:04
>295
確か一部の組み込み関数とかで $a と $b を使うんだっけ?

298:デフォルトの名無しさん
09/06/26 23:00:52
>>292
少なくとも Python なら関数内関数作れるよ。
decorator なんて関数の中の関数の中で関数を作ったりする。

299:デフォルトの名無しさん
09/06/26 23:04:47
perlのブロックは変数の共有にも使えたりする。
今はさすがにオブジェクト指向で書くけどね。

set(12);
print get();
exit;

{
my $common;

sub set{
my ($value) = @_;
$common = $value;
}
sub get{
return $common;
}
}

300:デフォルトの名無しさん
09/06/26 23:08:33
関数内関数がやりたいだけならブロックにスコープ必要ないんでは
for文とかforeach文のブロックにスコープがあるのはいいような気がしないでもないけど
ブロックにスコープがあることの必要性がよく分からぬ

301:デフォルトの名無しさん
09/06/26 23:35:44
my $fizzbuzz;
{
my @a = qw(FizzBuzz - - Fizz - Buzz Fizz - - Fizz Buzz - Fizz - -);
$fizzbuzz = sub {……};
}
今はさすがにオブジェクト指向で書くけどねw

302:デフォルトの名無しさん
09/06/27 00:02:18
>>288
余り詳しくないけど……。
Lisp, Scheme は、一般的に広い意味で関数型言語と言われているけど、
本当の関数型言語(純粋関数型言語)ではないと聞いたと思う。
OCaml は、 ML の方言にオブジェクト指向機能を追加した言語で、
純粋な関数型言語ではなさそう。

303:デフォルトの名無しさん
09/06/27 00:05:06
流石にFizzBuzz問題にOOPは使わないなw
やろうと思えば、ジェネレータ使ったりするかも知れないがw

304:デフォルトの名無しさん
09/06/27 00:13:22
>302
OOPでも状態を変更するとは限らないから、やはり
OOPと関数型が相いれないとは言えないよ
例えばフィールドへの代入もコンストラクタでしか行わないとかいくらでもやりようはある

305:デフォルトの名無しさん
09/06/27 00:21:01
>>302
そんなことこのスレの住人のほとんどが知ってることだと思うけど
何が言いたいの?

306:デフォルトの名無しさん
09/06/27 00:24:09
>>304
静的な関数型言語だと
OOPは関数型によくある型システムの利点の一部を削り取ってしまう

307:デフォルトの名無しさん
09/06/27 00:31:50
>>305
そんなに突っかからなくてもいいじゃないか。
うゎーん(泣)

308:デフォルトの名無しさん
09/06/27 00:44:21
ブロックスコープは当然有効な機能だわ。その点、Perlは実にいい。

309:デフォルトの名無しさん
09/06/27 01:51:20
>>300
必要か否かでいってたら、たいていの便利なものは無くてもなんとかなるになっちゃうよ。
可読性を損なわないなら便利なものは使いたいな。


310:デフォルトの名無しさん
09/06/28 20:59:42
誰か、HSPの存在価値を教えてくれ。
あれもLL?DSLではあるみたいだが(どっちかというと、ゲーム特化(BASIC風))

311:デフォルトの名無しさん
09/06/28 21:01:08
HSPはエントリーされていないのですれ違いデス。

312:デフォルトの名無しさん
09/06/28 21:10:38
価値はそれこそ個人の価値観の問題だろう
DSLだという見解には同意する
小規模なゲーム・グラフィカルなアプリの作成に特化している

ここで話題に上るような、いわゆるLLではないと思う

313:デフォルトの名無しさん
09/06/28 23:44:47
>>309
>必要か否かでいってたら、たいていの便利なものは無くてもなんとかなるになっちゃうよ。

うん、そうだよ。それでいいじゃん。
ブロックスコープは、あれば便利だけど、なくてすごく困るほどのものでもない。
すくなくともインタプリタにはペナルティが大きそうだから向かないと思う。

>可読性を損なわないなら便利なものは使いたいな。

便利でもペナルティが大きければ導入されない。
便利さのかげでなにも犠牲にならないのならいいけど、犠牲になるものがあるなら
あとはトレードオフでしょ。


314:デフォルトの名無しさん
09/06/29 01:25:09
ちゃんと計算されてる? ペナルティとか

315:デフォルトの名無しさん
09/06/29 05:45:18
>>313
だから>>309が言ってるのは、必要か否かなんていう切り口で語ったら
ブロックスコープだろうがそれ以外のものだろうが、
大概のものは同じ結論しか出てこない、だから「ブロックスコープを」決め打ちで語りたきゃ
もっと踏み込んだ切り口を何か出さないと、ってことでは。

316:デフォルトの名無しさん
09/06/29 12:40:32
すみませんが教えてください。

下記のコードの3行目と5行目が何をしているのかわかりません。

特に3行目。。。

なぜrefで判定する必要があるのかもわからないので
詳しい方教えて下さい。


if(exists $form_data{$name} ) {
if(ref $form_data{$name} ) {
push @{ $form_data{$name} } , $value;
  } else {
$form_data{$name} = [$form_data{$name} } , $value ];
  }
else {
$form_data{$name} = $value;
}




317:デフォルトの名無しさん
09/06/29 13:03:49
>>313
>便利でもペナルティが大きければ導入されない。
ところが、Perlにはあって、それでああいう
パフォーマンスがでているのだが。
ペナルティとかおおげさにいうほどのことは
ないんでは。


318:デフォルトの名無しさん
09/06/29 13:06:05
>>316
つ 配列のリファレンス、デリファレンス


319:デフォルトの名無しさん
09/06/29 13:28:44
>>317
Perlはmyやlocalで変数宣言をしているじゃないか。
Rubyとかだとそれがないから、ブロックスコープを実現しようとすると、
ブロックごとにチェックをいれないといけない。
じゃあ変数宣言のないRubyがウンコなんじゃないかということなら、否定はしない。


320:デフォルトの名無しさん
09/06/29 14:01:58
HSPは米国国防省の省内統制システムへの採用が内定してるらしいし
Rubyと同じパターンで「欧米で評価」→「日本で再評価」みたいな予感はする。

321:デフォルトの名無しさん
09/06/29 19:08:34
>>319
そもそも、変数宣言がなかったら、
ブロックスコープはどのように
表現すればいいの?


322:デフォルトの名無しさん
09/06/29 19:30:37
>>321
ブロックスコープは、無名関数をその場で1回だけ呼ぶのと同じ

323:デフォルトの名無しさん
09/06/29 20:52:50
変数宣言させることで、汚いコードを書けないように制約を受けるわけで、それは凄く楽だわ。PHPとかJavaScriptとか関数ベースのスコープの言語と比べると、そう思う。

324:デフォルトの名無しさん
09/06/29 21:19:11
>>321
必要に応じて変数名の前か後ろにスコープを記述すればいいんじゃない?

325:デフォルトの名無しさん
09/06/29 21:40:22
>>324
よくわからんので擬似コードでも書いてみればいいじゃない

326:デフォルトの名無しさん
09/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
09/06/29 21:53:40
うん。やっぱり勘違いしてた。
最初に値(単純にスカラー期待)が与えられたときは、普通にスカラー。
もいちど飛んできたときは、配列のリファレンスとして格納。それだけだね。
どうせなら最初から配列のリファレンスにするよね、っていう固定観念があった。

328:デフォルトの名無しさん
09/06/29 22:43:18
>>325
擬似っつーかPowerShellだけど
> $hoge = 100
> & { $hoge = 111; "global: $global:hoge local: $hoge" }
global: 100 local: 111

みたいな感じ
まあブロックの中にまたブロックを〜みたいな話になると別の方法になるけども

329:デフォルトの名無しさん
09/06/30 01:41:54
>>325
どうでもいいけどその言い回しおもしろいな

330:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/06/30 06:37:41
>330
その場合、timesより前に i = nil でも i = 0 でも良いから代入が要るんよね
何回かやると慣れるがw

332:デフォルトの名無しさん
09/07/01 17:08:23
>>331
宣言だけじゃ駄目なんだっけ?

333:デフォルトの名無しさん
09/07/01 18:31:14
Rubyに変数宣言文は無いよ
最初の代入が宣言の代わりになるから、スコープ入る前に何か値を入れればスコープがそこに決まる

334:デフォルトの名無しさん
09/07/01 18:34:03
代入が無ければメソッド呼び出しと区別できない
というか宣言に相当するような構文が無い。代入が宣言を兼ねるというか

335:デフォルトの名無しさん
09/07/01 18:36:47
同じ変数名で局所化することはできるの?ブロックの外でiを使って、ブロックに入って、別のiを使うっていう。

336:デフォルトの名無しさん
09/07/01 18:40:14
不安に思ったら関数のはじめあたりで初期化してやればいいだけ

337:デフォルトの名無しさん
09/07/01 19:57:20
>335
変数名被るほど長いメソッドにせず、素直にprivateメソッド作る

338:デフォルトの名無しさん
09/07/01 20:21:02
>>337
また後付け前提ですか

339:デフォルトの名無しさん
09/07/01 20:54:23
>338
「それぐらいしか無い」とでも解釈すれば良いじゃない
具体的な挙動は相手にお任せするのがOOP流さね

340:デフォルトの名無しさん
09/07/01 21:27:21
>>339
二行目が全く>>337etcとつながらないな
意味不明


341:デフォルトの名無しさん
09/07/01 22:09:06
>340
ん?二行目はすぐ上の行としか繋がってないよ?
同じ文章でも各自で解釈は違いうる、ってポリモーフィズムっぽいよなあ、と

342:デフォルトの名無しさん
09/07/01 22:15:53
ブロックスコープの話とOOPの話がどう結びつくのよ

343:デフォルトの名無しさん
09/07/01 22:16:58
どこともつながってないだろw

344:デフォルトの名無しさん
09/07/01 23:03:27
>>337
privateメソッドにしてそのメソッドから外に出したら、(そのオブジェクトの)他のメソッドからも呼べちゃうんじゃない?


345:ぼくのかんがえたさいきょうの
09/07/02 01:14:18
動くUMLだと思えば
そんなもんだろ

346:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/07/03 12:47:36
うは。便利だけど 1.8 との互換性を考えると恐ろしい。

348:デフォルトの名無しさん
09/07/03 13:09:04
単なる変数じゃなくて、ブロックの引数であることに注意。

349:デフォルトの名無しさん
09/07/03 13:38:28
これでRuby使わない決心がついた。ありがとう。

350:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/07/03 13:46:30
for や while を使う人がいないって言ったら Ruby 嫌がった人もいたし、人それぞれだな

352:デフォルトの名無しさん
09/07/03 13:59:02
>>346
Rubyって変数のスコープないの?
大昔に作られたLispですら変数のスコープがあるのに…
だめだめじゃん

353:デフォルトの名無しさん
09/07/03 14:12:01
は?

354:デフォルトの名無しさん
09/07/03 14:25:43
>>352
>>346を煽るのに「スコープがない」と言ってしまうような人はこのスレに来ちゃだめでちゅよ

355:デフォルトの名無しさん
09/07/03 14:29:31
>>354
> ブロックの外でiを使って、ブロックに入って、別のiを使うっていう。
スコープだろうが

356:デフォルトの名無しさん
09/07/03 15:05:25
Rubyは local や my といった予約語を使わずに、文脈上でスコープを定義する
ブロック内に変数が出現したとき、その時点で可視かどうかで

 可視  → その変数を使う(つまり、書き換える)
 不可視→ 新規変数(ブロックローカル)として定義する

という動作になってる

>>346では [1, 2, 3].each のブロック内での s は可視なので、変数を単に再利用する
これを最初から不可能にすることもできなくはなかったんだが、そうすると

out = 外部データ'
someblock do |s|
 puts out #=> undefined
end

というように、ブロック外の変数にアクセスする方法がなくなってしまう

357:デフォルトの名無しさん
09/07/03 15:23:21
メソッドの引数も、ブロックの引数も、ライブラリの名前とかも宣言するのに
変数を宣言しない理由がよくわからない

358:デフォルトの名無しさん
09/07/03 15:25:31
R++ が出来たら Ruby を認めてやるよ。

359:デフォルトの名無しさん
09/07/03 15:27:44
>>357
変数は使う場所多いからいちいち宣言するのめんどいじゃん? というような趣旨のことをどっかで聞いた覚えがある

360:デフォルトの名無しさん
09/07/03 15:30:50
変数宣言なんか導入されたら現状のRubyの利点である
「ローカル変数かインスタンスメソッドかよくわからないがとにかく返り値を返す何かであるhoge」
というのができなくなるじゃないかー

361:デフォルトの名無しさん
09/07/03 15:35:22
それ、やってるのお前だけだから。

362:デフォルトの名無しさん
09/07/03 17:31:50
>357
ライブラリ名の宣言というのがよく分からんが
メソッドやブロックの引数はRubyの場合、代入だろ?

モジュールやクラスの定義は
Module、Classのインスタンスを作成し定数に代入
さらに最後の式の結果を返す文

メソッド定義だけは少し毛色が違う気がするね
あれはProcのインスタンス作成とかしないだろうし

363:デフォルトの名無しさん
09/07/03 18:47:03
>>352
変数のスコープが無い って、言ってることがよくわからんな。
ローカル変数もインスタンス変数もクラス変数もスコープはちゃんとあるし。

ブロックがスコープを作らないってならPythonもJavascriptも一緒だし。


364:デフォルトの名無しさん
09/07/03 18:53:39
JavaScript1.7だったかからはブロックごとのスコープを持つletというのが出てきてvarの影が薄くなってる

365:デフォルトの名無しさん
09/07/03 18:54:27
Rubyの通常のブロックはスコープ作るよ
ブロック開始時の文脈でブロック内の変数の新規性をチェックしてるに過ぎない


366:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/07/03 19:05:44
本スレにもクロージャのスコープが理解できなくて延々文句垂れてた奴がいたな
そんな特殊なものでもないしちょっと調べれば分かるのに、Rubyばっかり話題になる意味がよく分からん

368:デフォルトの名無しさん
09/07/03 19:12:55
それは別の話じゃね

369:デフォルトの名無しさん
09/07/03 22:11:48
>>365
単純に、initializeとdefとは違うスコープになってて
呼び出し先が違うだけって事じゃないの?

370:デフォルトの名無しさん
09/07/05 04:29:55
>>349
遅すぎだろ。jkw


371:デフォルトの名無しさん
09/07/06 00:08:20
なー、シンプルにそれぞれの最も優れてる実例を出してくれないか?
結局大事なのは使えるかだろ?

372:デフォルトの名無しさん
09/07/06 00:37:19
URLリンク(www.google.com)

373:デフォルトの名無しさん
09/07/06 21:34:43
えっ

374:デフォルトの名無しさん
09/07/06 21:35:26
何これこわい

375:デフォルトの名無しさん
09/07/07 01:33:20
>>372 の脳内
(検索しろ!と言う。俺かっこいいべ!昔はmanだったけど今はGoogleだべ。)

376:デフォルトの名無しさん
09/07/07 07:30:19
URLリンク(www.youtube.com)

377:デフォルトの名無しさん
09/07/07 08:50:13
URLリンク(d.hatena.ne.jp)
googleに使われてるよ

378:デフォルトの名無しさん
09/07/07 09:02:34
>>377
で?

379:デフォルトの名無しさん
09/07/07 09:04:06
>>378
Pythonが一番

380:デフォルトの名無しさん
09/07/07 09:30:20
Pythonはいいけど信者はうざい。この点rubyを凌駕している。

381:デフォルトの名無しさん
09/07/07 09:32:12
信者「ではない」よ
たぶんね

382:デフォルトの名無しさん
09/07/07 09:44:18
信者は「他称」だからなw

383:デフォルトの名無しさん
09/07/07 09:48:50
傍目にウザい時点で他人が装ってる可能性が大
>>380みたいに単純な人はいいオモチャ

384:デフォルトの名無しさん
09/07/07 10:48:48
信者はうざい。はここの書き込みに言ったのではない。

385:デフォルトの名無しさん
09/07/07 12:51:34
>>380
ルビ厨のほうがひどいだろ。jk


386:デフォルトの名無しさん
09/07/07 13:15:51
どの言語信者も最近はわりと皆おとなしいだろ
弾やmatzも

387:デフォルトの名無しさん
09/07/07 13:21:28
>>384
>>379がageてるのに気づいて後出しじゃんけんですね。わかります。

388:デフォルトの名無しさん
09/07/07 14:05:45
お前に何がわかるっていうんだ!!

389:デフォルトの名無しさん
09/07/07 14:16:03
JavaってLLじゃね?

390:デフォルトの名無しさん
09/07/07 15:31:14
>>1にエントリーされていないのでスレ違いとなります

391:デフォルトの名無しさん
09/07/07 17:06:57
>>390
ダメです。

392:デフォルトの名無しさん
09/07/07 18:00:16
久し振りにラクダ本を開いた。
テキトーなページを開いたら「配列の配列」について書かれていて
for $i ループ内には

$AoA[$i] = @array; # 間違い
$AoA[$i] = [ @array ]; # 正しい

と書かれていた。

…俺は読むのをやめた。

393:デフォルトの名無しさん
09/07/07 18:46:27
>>392
それのどこに嫌要素が?
超わかりやすいだろ。


394:デフォルトの名無しさん
09/07/07 18:54:26
>>392
何が問題なん?

395:デフォルトの名無しさん
09/07/07 19:29:05
で、1は誰なんだよ

396:デフォルトの名無しさん
09/07/07 19:33:28
お前に決まってるだろ

397:デフォルトの名無しさん
09/07/07 19:36:38
じゃあ独断と偏見でPythonって事で

398:デフォルトの名無しさん
09/07/07 20:00:10
もう俺JavaScriptでいいや

399:デフォルトの名無しさん
09/07/07 23:04:16
Python最強ですよねー


400:デフォルトの名無しさん
09/07/07 23:09:03
>>392は、以前にPerlを触ったときにはスカラーの概念やリファレンスまでは
たどり着けなかったんだと。
まあどの言語でも、一つずつ覚えてちょっとずつ進歩していけばいいと思うよ。

401:デフォルトの名無しさん
09/07/08 03:33:31
俺には393や394の感覚がわからん。400もな。
392の例はあからさまに直感的じゃないと思うよ。

402:デフォルトの名無しさん
09/07/08 03:44:53
$AoA[$i] = $@array;

403:デフォルトの名無しさん
09/07/08 04:41:20
配列のリファレンスも分からないようなPerl素人がいきなりラクダ本なんて読もうと思うのが間違い。
もっと初心者向けび本にしとけ。
というか、リファレンスとかポインタとか理解出来ない人間は職業プログラマーの素養がないので、PHPで日曜プログラマーでよい。

404:デフォルトの名無しさん
09/07/08 05:00:29
〜が理解できないとかPerl上級者とかそういう話はしてないよ

405:デフォルトの名無しさん
09/07/08 05:04:00
リファレンスが解るかどうかと、392が直感的かとは別問題でしょ…
俺だってCやJavaやPythonやRubyでリファレンスなら扱えるさ
Perlのは同じ記述がコンテキストで意味変わり過ぎてちと無理だわ

406:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/07/08 05:15:50
>>402
それ、エラー出ないか?

ちなみに同じページに

$AoA[$i] = \@array;

もほぼ間違い、と書かれていた。

@arrayがループ内でmyされたものなら問題は起きないが
ループより外にスコープがあるものだった場合
\@arrayは毎回同じ配列へのリファレンスを取得してしまうから、だそうだ。

408:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/07/08 06:29:28
Perlの場合リファレンスとかがわかりにくいというより
コンテキストが問題を分かりにくくしてると思う

410:デフォルトの名無しさん
09/07/08 07:52:09
今回の例に限って言えば、配列(およびハッシュ)の要素にはスカラー値のみ格納できる、
っていう言語仕様を知ってるかどうかだけのことなんだろうけどな

411:デフォルトの名無しさん
09/07/08 07:56:55
配列の配列とかが直感的に思った通りに出来る言語が勝ちだな。

412:デフォルトの名無しさん
09/07/08 08:06:57
>>411
直感は個人によって違うわけだから、そんなに直感的にやりたいなら自分で言語作ればいいんじゃないかと

つプログラミング言語を作る 前橋 和弥 (著)
URLリンク(www.amazon.co.jp)

413:デフォルトの名無しさん
09/07/08 10:08:45
@hoge = (1, 2, (3, 4, 5), (6, 7, (8, 9)), 10);


414:デフォルトの名無しさん
09/07/08 10:48:19
いつ見ても、Perlの文法は糞過ぎる。
なんで未だにこれを擁護出来る人が居るのか不思議でならない。

415:デフォルトの名無しさん
09/07/08 10:54:06
糞であるが故のバッドノウハウ症候群。
そして今更捨てられることができない認知的不協和。

416:デフォルトの名無しさん
09/07/08 11:42:12
無名関数を積極的に使いたい人は
クラス・メソッドの関係にこだわらないperlの方がむしろ癖がなくて良い

417:デフォルトの名無しさん
09/07/08 11:49:27
>416
まともな関数型言語触った事無い奴が、そんな寝ぼけた事言ってるんだろうな。

418:デフォルトの名無しさん
09/07/08 11:51:04
無名関数を積極的に使うならJSが割と最適解かも

419:デフォルトの名無しさん
09/07/08 11:52:21
416 は Perl しか使っていない

420:デフォルトの名無しさん
09/07/08 12:07:54
使いまわしの出来るクラスの一つや二つ作れるようになってから(ry

421:デフォルトの名無しさん
09/07/08 12:30:21
>>418 合意

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

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

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

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

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



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

426:デフォルトの名無しさん
09/07/08 13:08:20
LISPだって副作用バリバリだろ。


427:デフォルトの名無しさん
09/07/08 13:13:00
perlだけはレベルが違う

428:デフォルトの名無しさん
09/07/08 13:26:55
>>422
Java はどのへん?
C# は?

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

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

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

432:430
09/07/08 15:15:26
盛大にコンテキスト(文脈)を読み間違えたぜ…

433:デフォルトの名無しさん
09/07/08 15:59:44
結局コードも示さずに複雑怪奇やら、糞やら、呪詛を吐くしかできないのか。
だめだこりゃ。

434:デフォルトの名無しさん
09/07/08 16:01:49
>>433
そりゃほとんどの人間の悪口は脳内の言語イメージに対して言っているものだから仕方ない
そういう馬鹿がよりつかなくてよかったと思うしか

435:デフォルトの名無しさん
09/07/08 19:10:09
package MyObj;
sub new {
  my ($class) = @_;
  my $self = { 'items' => [] };
  bless $self, $class;
}
sub set {
  my ($self, $newitem) = @_;
  push @{ $self->{'items'} }, $newitem;
}
sub take {
  my ($self) = @_;
  pop @{ $self->{'items'} };
}
1;
いまPerl初心者の俺のコードが簡単に言うとこんな感じになってるんだが
Perl使い的にはどう書くんだ?

436:デフォルトの名無しさん
09/07/08 19:55:55
Perlスレで聞けばいいのに。
モダンに書くとしたら。
package MyObj;
use Moose;

has 'items' => (
    is => 'rw',
    isa => 'ArrayRef',
    default => sub { [] }
);

sub set {
    my ($self, $newitem) = @_;
    push @{ $self->items }, $newitem;
}

sub take {
    my ($self) = @_;
    return pop @{ $self->items };
}

1;

これだけ単純なら、use Mooseじゃなくてuse Mouseでも。

437:デフォルトの名無しさん
09/07/08 21:22:20
モダン(笑)
ハイソ(笑)
ハイカラ(笑)

438:デフォルトの名無しさん
09/07/08 21:47:52
ニーソ馬鹿にすんな

439:デフォルトの名無しさん
09/07/08 23:30:45
perlerの連中も、意識的にモダンに書かないと、非モダンな出来上がりになる事は
認めてるらしい。

440:デフォルトの名無しさん
09/07/08 23:56:12
perlの文を見ると吐き気がする。C++の仕様の方がカワイイぐらいだ
いい加減に間違った進化だったって、さっさと淘汰されないかな

441:デフォルトの名無しさん
09/07/09 00:04:30
Perl系の言語って、Perlそのもの以外になんかあるんだっけ?

442:436
09/07/09 00:34:14
>>439
まあ、モダンでなければ非モダンだわな。>>435そのままだし。
>>436でもAny::Mooseぐらい使えとか、no Mooseしとけとか突っ込まれそうな気がする。

>>441
直系はPHPとRuby。既に別物。

443:デフォルトの名無しさん
09/07/09 00:40:49
>441
JPerlとIronPerlがあるよ

444:デフォルトの名無しさん
09/07/09 00:47:37
PHPってPerl系なのか

445:デフォルトの名無しさん
09/07/09 00:55:53
PHPは元を辿ればPerlの派生だけど、
ポリシーの無い付け足しをしまくりでワケワカメ状態。

446:デフォルトの名無しさん
09/07/09 04:27:04
モノポリー

447:デフォルトの名無しさん
09/07/09 04:39:45
のんぽり

448:デフォルトの名無しさん
09/07/09 08:50:51
>>440
Rubyの文を見ると吐き気がする。Pythonの仕様の方がカワイイぐらいだ
いい加減に間違った進化だったって、さっさと淘汰されないかな


449:デフォルトの名無しさん
09/07/09 09:44:49
というレスを書いて「何にでも当てはめられるなw」とかご満悦の奴が時々いるけど、
オリジナルのようには的を射ていないのが大半で、ミジメな抵抗に終わる。

450:デフォルトの名無しさん
09/07/09 10:20:23
的を射

451:デフォルトの名無しさん
09/07/09 11:31:33
>>451
ATOKまじお勧め

452:デフォルトの名無しさん
09/07/09 11:33:03
ATOK は自分を指すミスまでは直してくれないんだね

453:デフォルトの名無しさん
09/07/09 12:10:45
ATOK なんかをつかうやつはばかです

454:デフォルトの名無しさん
09/07/09 12:41:12
SKKこそ正義

455:デフォルトの名無しさん
09/07/09 12:41:30
ATOK使ってみたら草生やすのが大変すぎてワロタ

456:デフォルトの名無しさん
09/07/09 13:20:05
っっっっっっっっっっっっw

457:デフォルトの名無しさん
09/07/09 19:48:51
っっwの状態でファンクションキー1回押すだけだよ

458:デフォルトの名無しさん
09/07/09 19:51:07
ファンクションキーを押さないといけないなんて
ATOK のインターネット経由の辞書もたいしたことないですね


次ページ
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

5399日前に更新/194 KB
担当:undef