- 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/
- 237 名前:233 mailto:sage [2009/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 名前:デフォルトの名無しさん mailto:sage [2009/06/25(木) 02:11:59 ]
- >>233
if str in "OPQ": func_a() if str in "OPQRS": func_b()
- 239 名前:デフォルトの名無しさん mailto:sage [2009/06/25(木) 02:18:15 ]
- >>237
if str in 'OPQ': func_a() if str in 'OPQRS': func_b() else: func_c()
- 240 名前:デフォルトの名無しさん mailto:sage [2009/06/25(木) 02:24:05 ]
- str の内容が 'RS' とかだったらどうするんだろ?
- 241 名前:デフォルトの名無しさん mailto:sage [2009/06/25(木) 02:29:00 ]
- リスト使えばええがな
- 242 名前:デフォルトの名無しさん mailto:sage [2009/06/25(木) 02:33:08 ]
- Pythonのinって何が起きてるんだ?
何となく分かるようで分からん。文字単位でのマッチング?
- 243 名前:デフォルトの名無しさん mailto:sage [2009/06/25(木) 02:34:36 ]
- 文字列は文字のリスト
- 244 名前:デフォルトの名無しさん mailto:sage [2009/06/25(木) 03:13:57 ]
- www.python.jp/doc/release/ref/comparisons.html
- 245 名前:デフォルトの名無しさん mailto:sage [2009/06/25(木) 03:19:45 ]
- 俺的には K&Rが読みやすいから、GNUだなんだの見るよりは
インデントが統一されてるなら、読みやすくはあるんだろうなー とは思う。 最終的には慣れだろうけど… 今は括弧がないとなんか読みにくい感じ。 do endもなんかなれないんだよなー
- 246 名前:デフォルトの名無しさん mailto:sage [2009/06/25(木) 03:27:35 ]
- なんか場末のスナック的なスレだな
- 247 名前:デフォルトの名無しさん mailto:sage [2009/06/25(木) 03:33:54 ]
- スナックに行った事が無いからワカンネ。
- 248 名前:デフォルトの名無しさん mailto:sage [2009/06/25(木) 03:45:55 ]
- GNUスタイルとかは先頭ブレースの一行分長くなる点が好きでない
行数は可読性に直結すると思う (だからといって、無理やり圧縮するのが良いとも思わないが) その点、インデントベースは末尾のブレースやendも削れるのが素晴らしい でも何となく好きになれないというワガママw どうも宙ぶらりん感がある あとはS式みたいに、末尾に畳んじゃう記法だが・・・・編集がしずらいような エディタの支援があればイケるか?
- 249 名前:デフォルトの名無しさん mailto:sage [2009/06/25(木) 03:51:54 ]
- ○ しづらい
- 250 名前:デフォルトの名無しさん mailto:sage [2009/06/25(木) 03:56:25 ]
- S式は対括弧表示できるエディタ無いと苦しいね
まあ、Windows標準のメモ帳で開発しる! なんてことが無い限り大丈夫だとは思うが
- 251 名前:デフォルトの名無しさん mailto:sage [2009/06/25(木) 04:42:53 ]
- S式は文字数でインデントするからプロポーショナルだと崩れて読みづらい。
アメリカだとプロポーショナルでコーディングしてる人も結構いる印章だけど、彼らはどうしてるの?
- 252 名前:デフォルトの名無しさん mailto:sage [2009/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 mailto:sage [2009/06/25(木) 09:11:22 ]
- えーと…OPQRSが文字として扱われるとは思なかった(・ω・)
それぞれ何らかの値と結び付けられてる定数のつもりだったんだけど…
- 254 名前:デフォルトの名無しさん mailto:sage [2009/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 名前:デフォルトの名無しさん mailto:sage [2009/06/25(木) 11:40:07 ]
- RubyやRoRって、生産性が高いって言うけど、それは膨大な規約を丸暗記した上での話だよな。俺的には分かりづらいったらありゃしないよ。
- 256 名前:デフォルトの名無しさん mailto:sage [2009/06/25(木) 12:00:59 ]
- 人の作った物だと丸暗記になるが、作った本人は丸暗記だと思ってないだろう
- 257 名前:デフォルトの名無しさん [2009/06/25(木) 12:03:59 ]
- >>255
それは、他のでも変わらん
- 258 名前:デフォルトの名無しさん [2009/06/25(木) 12:49:55 ]
- caseと三項演算子があればむしろif関係いらなくない?
- 259 名前:デフォルトの名無しさん mailto:sage [2009/06/25(木) 16:44:58 ]
- ぶっちゃけswitchの方が意味解りやすいな
- 260 名前:デフォルトの名無しさん mailto:sage [2009/06/25(木) 18:49:20 ]
- RubyやRoRは、どうだこれだと直感的で分かりやすいだろうっていう教条的な態度が我慢ならない。設定より規約って、大量に規約を覚えれば設定が省けるに過ぎない。
- 261 名前:デフォルトの名無しさん mailto:sage [2009/06/25(木) 19:48:21 ]
- Strutsはわかりにくいうえに傲慢な態度だからな。しかも制約が多いくせに手間は省けない。
それよりは100万倍まし。
- 262 名前:デフォルトの名無しさん mailto:sage [2009/06/25(木) 19:51:05 ]
- Javaだとmavenの思想が好きだ。
とりあえず何も書かなくても動く。 動きを変えたいところだけ、書く。
- 263 名前:デフォルトの名無しさん mailto:sage [2009/06/25(木) 21:22:07 ]
- >>262
それならまさにRailsの思想じゃないかと
- 264 名前:デフォルトの名無しさん mailto:sage [2009/06/26(金) 00:35:17 ]
- Ruby on Railsを使った事ない奴は、一度使ってから批評しような、とちょっと思った
中身をいじる必要も機会も、Java APIやJavaのframe workと同様に無いわけだしなw もちろん、上書きは自由だし可能だしなあ
- 265 名前:デフォルトの名無しさん mailto:sage [2009/06/26(金) 00:40:22 ]
- だから、結局、どんなフレームワークだって、最初に使うときは、
覚えなきゃならない事が沢山あるって事に違いはない。 フレームワークどころか、多機能な道具は、皆、 使った事が無ければ覚える事が多いってだけだ。 あとは、その道具の体系化の仕方が、 使おうとする個人に合っているかどうかというだけの事だ。 極めて、普遍的で当たり前の事であって、 わざわざ、キーボードを打つ手間を掛ける価値のない事だ。
- 266 名前:デフォルトの名無しさん mailto:sage [2009/06/26(金) 00:49:47 ]
- >>265は、
> 使おうとする個人に合っているかどうかというだけ が、普遍的で当たり前でキーボードを打つ手間を掛ける(、ましてやサーバ準備して 実行環境を整えるなんて!)価値のない事と言い切るが、それは本当にそうなのか。 足りていれば問題ないが、足りなくなったときにそれでは足るまい(←自己撞着) まあ何でもいいが、それなりに使って評価してる人間がいるときに使わない人間の 評価なんて糞だと思うな。
- 267 名前:デフォルトの名無しさん mailto:sage [2009/06/26(金) 01:07:49 ]
- >>261
そんな君にはWicketが向いている
- 268 名前:デフォルトの名無しさん mailto:sage [2009/06/26(金) 03:10:55 ]
- >>265
Railsはあまたあるフレームワークの中でも暗黙の了解が半端なく多い。少ないコードで組めるっていうのは、それに頼ってるだけ。
- 269 名前:デフォルトの名無しさん mailto:sage [2009/06/26(金) 03:20:55 ]
- まあ、言語自体が覚えること多過ぎな言語とか
標準ライブラリも拡張ライブラリも全部予約語扱いで予約語一覧だけで何ページにも渡る言語とか そーゆーのもあるけどな
- 270 名前:デフォルトの名無しさん mailto:sage [2009/06/26(金) 03:25:30 ]
- そんなことより、Erlanの話しようぜ
- 271 名前:デフォルトの名無しさん mailto:sage [2009/06/26(金) 04:18:25 ]
- もしかして:Erlang
- 272 名前:デフォルトの名無しさん [2009/06/26(金) 11:52:06 ]
- Erlang の話をする位なら Scala の話をしようぜ
- 273 名前:デフォルトの名無しさん [2009/06/26(金) 11:55:42 ]
- 今更ながら Python は良い言語かもしれないと思えて来た。
上の方のレスで、気持ち悪いと書いてしまってすまんかった。
- 274 名前:デフォルトの名無しさん mailto:sage [2009/06/26(金) 12:33:21 ]
- >>272
ちょっと触ってみてるけど、 現時点では良いやら悪いやら分からん言語、という感想 狙いは合ってると思う 次に注目される言語が何かは分からんが、たぶんマルチパラダイムだろうし、 静的型付けの利点を残したまま記述量を減らすなら型推論は妥当 C#とかもその方向ではある ただXMLリテラルは個人的に疑問。XMLは言語レベルで密結合させるほど絶対的なものか? あと、背反しがちなオブジェクト指向と関数型を調和させようとして 言語が複雑奇怪になりかけてる(?)のも気になる。まあ仕方ない感はあるけど
- 275 名前:デフォルトの名無しさん mailto:sage [2009/06/26(金) 14:42:21 ]
- >>274
>あと、背反しがちなオブジェクト指向と関数型を調和させようとして そうなの?なぜ背反になるのかだれか教えて。
- 276 名前:デフォルトの名無しさん mailto:sage [2009/06/26(金) 14:43:32 ]
- >>274
難解な表現はやめてもうちょっと簡単にいって。 じゃないとこのスレでは立ち入り禁止します。
- 277 名前:デフォルトの名無しさん mailto:sage [2009/06/26(金) 15:09:12 ]
- おいおい、なんのためのスレだよ
- 278 名前:デフォルトの名無しさん mailto:sage [2009/06/26(金) 15:36:40 ]
- Pythonにブロックスコープ無いけど、これは利点なの?欠点なの?
Rubyにも無いみたい。
- 279 名前:デフォルトの名無しさん mailto:sage [2009/06/26(金) 15:44:14 ]
- グローバル変数さえ判り易ければいいと思うが、どうなんだろ
スコープ無しはプログラミングしたことないわ
- 280 名前:デフォルトの名無しさん mailto:sage [2009/06/26(金) 16:11:37 ]
- ブロックスコープに頼って長々とメソッド書くんじゃない、ってことじゃないかな。
Ruby のブロック(は他の言語のブロックと違うけど)には、ブロックローカルが あるけどね。
- 281 名前:デフォルトの名無しさん [2009/06/26(金) 16:15:32 ]
- >>275
自分は >>274 じゃないが、 関数型だと変数は一度設定したら、書き換えない物であるのに対して、 オブジェクト指向だと、変数はドンドン書き換える物だから、 相容れないという事では?
- 282 名前:デフォルトの名無しさん mailto:sage [2009/06/26(金) 16:32:36 ]
- >>280
ブロックスコープもそうだが ローカル関数 (メソッドではない) に頼ってもメソッドは長くなる。 そういう書き方が嫌なのはOOへの拘りが強いせいでもあるんじゃないか。
- 283 名前:デフォルトの名無しさん [2009/06/26(金) 17:04:21 ]
- でも拘るならスコープを狭い範囲に留めてさせてほしいなぁ。
その関数(やらメソッド)でしか使わない処理を、その関数(ry と同じ層に おくのはなんかイヤらしい感じ。
- 284 名前:デフォルトの名無しさん mailto:sage [2009/06/26(金) 17:06:08 ]
- JavaScriptにもブロックスコープがないのは盲点。
- 285 名前:デフォルトの名無しさん mailto:sage [2009/06/26(金) 17:10:14 ]
- ブロックスコープの意味が未だに判らない。
for や while の中だけで有効な変数を作りたいってこと? >>283 の言ってる、関数でしか使わない変数って、Pythonでも関数の中の ローカル変数になるよね?
- 286 名前:デフォルトの名無しさん mailto:sage [2009/06/26(金) 17:18:37 ]
- for や while の中、じゃなくて、
ブロックはブロックなんだけど。 for や while じゃない、ただ単にブロックだけのブロックも あるわけで。
- 287 名前:デフォルトの名無しさん mailto:sage [2009/06/26(金) 17:38:16 ]
- >>286
Pythonには無いよね>ブロックだけのスコープ まぁ、関数より小さいスコープ作るよりも、関数自体を 小さくする方が良いんじゃないかな。
- 288 名前:デフォルトの名無しさん mailto:sage [2009/06/26(金) 18:19:01 ]
- >>281
>関数型だと変数は一度設定したら、書き換えない物であるのに対して、 そんなことはない。関数型言語のうちで、そういうのもあるけど、たいがいのはそこまで厳しくない。 Lisp, Scheme, OCaml, ... Haskellみたいなほうが少数派じゃね?
- 289 名前:デフォルトの名無しさん mailto:sage [2009/06/26(金) 18:40:51 ]
- >>287
サブクラスを作るよりも、クラスの階層構造を小さくする方が良い って思ったことはないのか?
- 290 名前:デフォルトの名無しさん mailto:sage [2009/06/26(金) 18:43:01 ]
- >>278
>Pythonにブロックスコープ無いけど、これは利点なの?欠点なの? >Rubyにも無いみたい。 一般的に、インタプリタではないと思う。これがあるのはコンパイル型言語の特徴じゃないかな。 もしインタプリタでブロックスコープを実現しようとすると、ブロックに入るたびに 新しい変数テーブルを用意し、ブロックから抜けるとそれを破棄しないといけない。 さすがにこれは、インタプリタでは性能がでない。 コンパイル型であればこれはコンパイル時に行なわれるから、実行時のペナルティはなしですむ。 インタプリタではあきらめろっつーことだな。ブロックスコープは、あったほうがうれしいけど、なくてもそうは困らない機能だから。
- 291 名前:デフォルトの名無しさん mailto:sage [2009/06/26(金) 19:34:01 ]
- the requested operation has failed とエラーが出てapacheとphpの連携が取れない
システムファイルを変更すね前はapacheの起動はうまくいったのに、何をやっても 上のエラーが出てくる、誰か助けて〜〜〜〜〜〜〜〜!
- 292 名前:デフォルトの名無しさん [2009/06/26(金) 19:43:07 ]
- >>285
変数だけじゃなくて、関数内関数も定義したいってこと。
- 293 名前:デフォルトの名無しさん mailto:sage [2009/06/26(金) 19:50:39 ]
- >>291
まずはログファイルを探して読んでみよう
- 294 名前:デフォルトの名無しさん mailto:sage [2009/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 名前:デフォルトの名無しさん mailto:sage [2009/06/26(金) 22:31:08 ]
- 本題からはずれるけど Perl で $a は使わないほうがいいよ
- 296 名前:デフォルトの名無しさん [2009/06/26(金) 22:36:05 ]
- そう言えば、C++で昔 forのルール変わったよね。
for (int i = 0; 〜) の i のスコープがfor文内になった。
- 297 名前:デフォルトの名無しさん mailto:sage [2009/06/26(金) 22:41:04 ]
- >295
確か一部の組み込み関数とかで $a と $b を使うんだっけ?
- 298 名前:デフォルトの名無しさん mailto:sage [2009/06/26(金) 23:00:52 ]
- >>292
少なくとも Python なら関数内関数作れるよ。 decorator なんて関数の中の関数の中で関数を作ったりする。
- 299 名前:デフォルトの名無しさん mailto:sage [2009/06/26(金) 23:04:47 ]
- perlのブロックは変数の共有にも使えたりする。
今はさすがにオブジェクト指向で書くけどね。 set(12); print get(); exit; { my $common; sub set{ my ($value) = @_; $common = $value; } sub get{ return $common; } }
- 300 名前:デフォルトの名無しさん mailto:sage [2009/06/26(金) 23:08:33 ]
- 関数内関数がやりたいだけならブロックにスコープ必要ないんでは
for文とかforeach文のブロックにスコープがあるのはいいような気がしないでもないけど ブロックにスコープがあることの必要性がよく分からぬ
- 301 名前:デフォルトの名無しさん mailto:sage [2009/06/26(金) 23:35:44 ]
- my $fizzbuzz;
{ my @a = qw(FizzBuzz - - Fizz - Buzz Fizz - - Fizz Buzz - Fizz - -); $fizzbuzz = sub {……}; } 今はさすがにオブジェクト指向で書くけどねw
- 302 名前:デフォルトの名無しさん mailto:sage [2009/06/27(土) 00:02:18 ]
- >>288
余り詳しくないけど……。 Lisp, Scheme は、一般的に広い意味で関数型言語と言われているけど、 本当の関数型言語(純粋関数型言語)ではないと聞いたと思う。 OCaml は、 ML の方言にオブジェクト指向機能を追加した言語で、 純粋な関数型言語ではなさそう。
- 303 名前:デフォルトの名無しさん mailto:sage [2009/06/27(土) 00:05:06 ]
- 流石にFizzBuzz問題にOOPは使わないなw
やろうと思えば、ジェネレータ使ったりするかも知れないがw
- 304 名前:デフォルトの名無しさん mailto:sage [2009/06/27(土) 00:13:22 ]
- >302
OOPでも状態を変更するとは限らないから、やはり OOPと関数型が相いれないとは言えないよ 例えばフィールドへの代入もコンストラクタでしか行わないとかいくらでもやりようはある
- 305 名前:デフォルトの名無しさん mailto:sage [2009/06/27(土) 00:21:01 ]
- >>302
そんなことこのスレの住人のほとんどが知ってることだと思うけど 何が言いたいの?
- 306 名前:デフォルトの名無しさん mailto:sage [2009/06/27(土) 00:24:09 ]
- >>304
静的な関数型言語だと OOPは関数型によくある型システムの利点の一部を削り取ってしまう
- 307 名前:デフォルトの名無しさん mailto:sage [2009/06/27(土) 00:31:50 ]
- >>305
そんなに突っかからなくてもいいじゃないか。 うゎーん(泣)
- 308 名前:デフォルトの名無しさん mailto:sage [2009/06/27(土) 00:44:21 ]
- ブロックスコープは当然有効な機能だわ。その点、Perlは実にいい。
- 309 名前:デフォルトの名無しさん [2009/06/27(土) 01:51:20 ]
- >>300
必要か否かでいってたら、たいていの便利なものは無くてもなんとかなるになっちゃうよ。 可読性を損なわないなら便利なものは使いたいな。
- 310 名前:デフォルトの名無しさん mailto:sage [2009/06/28(日) 20:59:42 ]
- 誰か、HSPの存在価値を教えてくれ。
あれもLL?DSLではあるみたいだが(どっちかというと、ゲーム特化(BASIC風))
- 311 名前:デフォルトの名無しさん mailto:sage [2009/06/28(日) 21:01:08 ]
- HSPはエントリーされていないのですれ違いデス。
- 312 名前:デフォルトの名無しさん mailto:sage [2009/06/28(日) 21:10:38 ]
- 価値はそれこそ個人の価値観の問題だろう
DSLだという見解には同意する 小規模なゲーム・グラフィカルなアプリの作成に特化している ここで話題に上るような、いわゆるLLではないと思う
- 313 名前:デフォルトの名無しさん mailto:sage [2009/06/28(日) 23:44:47 ]
- >>309
>必要か否かでいってたら、たいていの便利なものは無くてもなんとかなるになっちゃうよ。 うん、そうだよ。それでいいじゃん。 ブロックスコープは、あれば便利だけど、なくてすごく困るほどのものでもない。 すくなくともインタプリタにはペナルティが大きそうだから向かないと思う。 >可読性を損なわないなら便利なものは使いたいな。 便利でもペナルティが大きければ導入されない。 便利さのかげでなにも犠牲にならないのならいいけど、犠牲になるものがあるなら あとはトレードオフでしょ。
- 314 名前:デフォルトの名無しさん mailto:sage [2009/06/29(月) 01:25:09 ]
- ちゃんと計算されてる? ペナルティとか
- 315 名前:デフォルトの名無しさん mailto:sage [2009/06/29(月) 05:45:18 ]
- >>313
だから>>309が言ってるのは、必要か否かなんていう切り口で語ったら ブロックスコープだろうがそれ以外のものだろうが、 大概のものは同じ結論しか出てこない、だから「ブロックスコープを」決め打ちで語りたきゃ もっと踏み込んだ切り口を何か出さないと、ってことでは。
- 316 名前:デフォルトの名無しさん [2009/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 名前:デフォルトの名無しさん mailto:sage [2009/06/29(月) 13:03:49 ]
- >>313
>便利でもペナルティが大きければ導入されない。 ところが、Perlにはあって、それでああいう パフォーマンスがでているのだが。 ペナルティとかおおげさにいうほどのことは ないんでは。
- 318 名前:デフォルトの名無しさん mailto:sage [2009/06/29(月) 13:06:05 ]
- >>316
つ 配列のリファレンス、デリファレンス
- 319 名前:デフォルトの名無しさん mailto:sage [2009/06/29(月) 13:28:44 ]
- >>317
Perlはmyやlocalで変数宣言をしているじゃないか。 Rubyとかだとそれがないから、ブロックスコープを実現しようとすると、 ブロックごとにチェックをいれないといけない。 じゃあ変数宣言のないRubyがウンコなんじゃないかということなら、否定はしない。
- 320 名前:デフォルトの名無しさん mailto:sage [2009/06/29(月) 14:01:58 ]
- HSPは米国国防省の省内統制システムへの採用が内定してるらしいし
Rubyと同じパターンで「欧米で評価」→「日本で再評価」みたいな予感はする。
- 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メソッド作る
|

|