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


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

【Perl,Python,PHP】LL バトルロワイヤル 25【JavaScript】



1 名前:uy [2012/08/11(土) 12:21:25.19 ]
面白かったのでコピペ

979 名前:uy[sage] 投稿日:2012/08/11(土) 11:53:55.80
面接官「特技はRubyとありますが?」
学生 「はい。Rubyでならなんでもかけます。」
面接官「ではシングルトンパターンを書いてください。」
学生 「存在しません?」
面接官「え、存在しない?」
学生 「はい。存在しません。Rubyはシングルトンパターンを言語でサポートしています。」
面接官「・・・で、その言語でサポートされた機能を使うとシングルトンパターンになるんですよね?」
学生 「はい。シングルトンパターンです。」
面接官「いや、あなたRubyでシングルトンパターンは存在しないといいましたよね。なぜシングルトンパターンになるんですか?」
学生 「でも、シングルトンパターンは存在しないんですよ。」
面接官「いや、存在しないとか問題じゃなくてですね・・・」
学生 「Rubyなら簡単にシングルトンパターン書けますよ。」
面接官「ふざけないでください。それに機能が用意されてるってことは存在するでしょ。だいたい・・・」
学生 「機能は用意されていますが言語でサポートしているんです。だから存在しません。」
面接官「聞いてません。帰って下さい。」
学生 「あれあれ?怒らせていいんですか?シングルトンパターン書きますよ。」
面接官「いいですよ。書いてください。Rubyでシングルトンパターンを。それで満足したら帰って下さい。」
学生 「運がよかったな。Rubyにシングルトンパターンは存在しないようだ。」
面接官「帰れよ。」


73 名前:デフォルトの名無しさん mailto:sage [2012/08/12(日) 23:21:20.74 ]
>>69
キチガイをヲチしてニヤニヤするスレです
ほーらruby厨がすぐ近くに!

74 名前:デフォルトの名無しさん mailto:sage [2012/08/12(日) 23:26:12.33 ]
>>68
自分は>>54だけど>>66とは別人(どうでもいいけど)

探してみたらJavaScriptにも雑用向けのライブラリ入りの処理系がちょいちょいあるようだ
https://developer.mozilla.org/en-US/docs/JavaScript/Shells

そのうちJSDBって処理系だとこう書けるらしい。普通に使えそう
www.jsdb.org/cookbook.html

75 名前:デフォルトの名無しさん mailto:sage [2012/08/12(日) 23:35:50.63 ]
varってどうにかならんの

76 名前:デフォルトの名無しさん mailto:sage [2012/08/12(日) 23:37:57.29 ]
つ coffeescript

77 名前:デフォルトの名無しさん mailto:sage [2012/08/12(日) 23:39:19.32 ]
JavaScriptのvarは省略できるけどグローバル変数になるんだったか

78 名前:デフォルトの名無しさん mailto:sage [2012/08/13(月) 10:33:57.60 ]
JSはvarがあるから良いんだよ。
動的型言語だから、型を指定する必要は無いけど、
それでも変数のスコープを指定する必要はあるので、
結局変数宣言は省けない。
無理に省くとPythonやRubyみたいに奇妙なことになる。

79 名前:デフォルトの名無しさん mailto:sage [2012/08/13(月) 10:36:32.02 ]
JS益々低迷。
www.tiobe.com/index.php/paperinfo/tpci/JavaScript.html

80 名前:デフォルトの名無しさん [2012/08/13(月) 11:11:23.23 ]
てかそれだとjsってイテレータ用の変数にまでvarつけなきゃじゃねーの
使われない理由のひとつがまずそこら辺だろう

81 名前:デフォルトの名無しさん [2012/08/13(月) 11:13:52.71 ]
グローバル変数のほうが使う機会って少ないんだから
何かオプションつけて宣言するならグローバル変数のほうだよ
jsは逆に設計しちゃったのか?
ローカル変数は簡単な記述でいいのに



82 名前:デフォルトの名無しさん mailto:sage [2012/08/13(月) 11:56:10.67 ]
>>81
一理あるが、それがその場しのぎの屁理屈ではないということを示すためには
「引数も多いから引数も宣言するべきではない」と言い切る覚悟が必要

83 名前:デフォルトの名無しさん mailto:sage [2012/08/13(月) 11:57:16.00 ]
ML系の言語、たとえばSML(Standard ML)だと、
代入(名前への値の束縛)にはJSと同様、文の頭に val が付く。
ただし、SMLの場合はあらゆる構文で文が予約語から始まることで
言語全体の構文が簡潔で明解になっている。
また階層的で明確な名前空間があるから、変数にグローバルや
ローカルといった区別は不要。トップレベルで代入された変数が、
いわるゆグローバル変数と同等な扱いになる。さらには大規模開発向けに
モジュールによって名前空間を明示的に分離できる。

考えるに、元々JSはWebブラウザ上の素朴な簡易スクリプト言語として
設計されたけど、近年では重要度が増して開発規模が増大してきた。
言語設計の想定外の用途に利用が広がったことの弊害ではないかと思う。
結論から言うと、言語設計時に大規模開発を想定していた
PythonやRubyといった他のLLと比較して、JSは大規模開発に向いていない。

84 名前:デフォルトの名無しさん mailto:sage [2012/08/13(月) 12:03:30.82 ]
そもそもブロックスコープがないjsでローカル変数っていうのもな
Cみたいに関数冒頭で宣言する言語なんだろ結局
関数ネストがよく使われる言語だし

jsで大規模やろうとするとオレオレのクラス実装や名前空間実装出てきちゃうのはあるな
その為のcoffeescriptとかなんだろうけど

85 名前:デフォルトの名無しさん mailto:sage [2012/08/13(月) 12:05:04.84 ]
>>82
全然わからんので日本語で頼む

86 名前:デフォルトの名無しさん mailto:sage [2012/08/13(月) 12:06:26.04 ]
>>81
グローバルとローカル以外にも、その中間にあたる、ネストスコープとかあるから。
特に最近はクロージャやラムダを多用する方向だから、ネストスコープだらけになる。

もし変数宣言がなければ、の { i=0; { i=1; } }
内側のiと外側のiが同じものなのか違うものなのか区別を付けれない。
ちなみに、Rubyだと同じもの、Pythonだと違うもの、となる。
Ruby方式だと、意図せずに変数名が被ったときにバグるし、
Python方式だと、外のスコープの変数への代入が出来ない。
その点、JSだと、varが付いていれば新しい変数、なければ外のスコープの変数、
だから、使い分けが出来るし、かつ安全で、可読性も高い。

87 名前:デフォルトの名無しさん mailto:sage [2012/08/13(月) 12:13:47.63 ]
>>83
言ってることはわからなくも無いが、スコープについて言及しているのであれば、最後の一文、

>PythonやRubyといった他のLLと比較して、JSは大規模開発に向いていない。

これはおかしい。なぜならPythonやRubyのスコープは、JSよりもさらに劣っているから。
特にPythonはスコープ内での代入の有る無しでスコープが切り替わる。
この前代未聞なカス仕様を擁護できる奴は誰もいない。マジでひどい。
3.0でnonlocal追加したときに、このカス仕様も修正すればよかったのに。
nonlocalがあるなら、代入の有る無しでスコープが切り替わるカス仕様は要らないわな。

88 名前:デフォルトの名無しさん mailto:sage [2012/08/13(月) 12:14:01.62 ]
>>85
お前それサバンナでも同じこと言い切る覚悟あるの?

89 名前:デフォルトの名無しさん mailto:sage [2012/08/13(月) 12:16:12.13 ]
すでにJSはブラウザ上の実装が全世界で広がっているから、
Pyhtonのような思いきって後方互換性を切り捨てるというような
言語仕様の変更や拡張は無理だろうね。
言い換えると、今後とも言語仕様の発展性は見込めない。

90 名前:デフォルトの名無しさん mailto:sage [2012/08/13(月) 12:17:06.52 ]
>>86
けどそれだとちょっとした小さな使い捨てスクリプトを書く時に
varをつけるかつけないか悩む事にならね?

使い捨てスクリプトとして書いても、後からコピペして別の場所で使う可能性も考えると
varつけなきゃいけない気もしてくるし
jsのサンプルってみんなそうなってる気がする

俺の気のせいじゃなければjsって
大規模プログラム向いていないし、小規模スクリプトも向いてなくね?

91 名前:デフォルトの名無しさん mailto:sage [2012/08/13(月) 12:36:27.32 ]
>>90
外のスコープの変数にアクセスする場合は、つけないし、
そうじゃない場合はつければよい。何も悩む必要は無い。
変数の最適なスコープは常に一つしかないのだから、それに準じればよい。
外のスコープで同名の変数が有るか無いか気を配らなければならないRubyや、
代入の有る無しでスコープが切り替わってしまうPythonなんかに比べれば、
遥かに単純で、考えることは少ない。

スコープ以外のことに関してで、RubyやPythonを持ち上げて、JSをこき下ろす事は結構だけど、
ことスコープに関しては、それは無理。
ただ、JSのスコープの仕様が特に優れているというわけでもないが。
RubyとPython、特にPythonの仕様が異端で、どうかしているってだけの話なので。
JSのスコープのやり方は他の言語でも見られるスタンダードなものだし、
当たり前のことを当たり前にやってるだけ。
難点を挙げるとすれば、ブロックスコープが無いことか。まぁRubyやPythonにも無いんだけどね。



92 名前:デフォルトの名無しさん mailto:sage [2012/08/13(月) 12:44:16.41 ]
ただ単にvarかくのが面倒くさいって話だよ
変数宣言が必要になる時点で小さなスクリプトを書くのにjsは向いていない

かといって
>結論から言うと、言語設計時に大規模開発を想定していた
>PythonやRubyといった他のLLと比較して、JSは大規模開発に向いていない。

こういう事情もあるから大規模開発にも向いていない

あ、ゴミか^^;

rubyを知らない知ったかゴミカス野朗みたいだけど、rubyにブロックスコープはある

93 名前:デフォルトの名無しさん mailto:sage [2012/08/13(月) 12:48:57.94 ]
>rubyを知らない知ったかゴミカス野朗みたいだけど、rubyにブロックスコープはある
他の言語で言うところのブロックスコープだ。

94 名前:デフォルトの名無しさん mailto:sage [2012/08/13(月) 13:18:03.83 ]
君の知識レベルで他言語ディスるの無理

95 名前:デフォルトの名無しさん mailto:sage [2012/08/13(月) 13:46:22.71 ]
初心者死ね

96 名前:デフォルトの名無しさん mailto:sage [2012/08/13(月) 16:52:09.34 ]
hirata-create.toypark.in

97 名前:デフォルトの名無しさん mailto:sage [2012/08/13(月) 17:28:35.80 ]
.NET,ASP,PHP,javaこの辺の言語を何れもやれって会社は大した技術者が居ない糞会社

98 名前:デフォルトの名無しさん mailto:sage [2012/08/14(火) 07:24:16.04 ]
Lispのスコープも最初は問題があったがSchemeで解決した
Smalltalkの影響を受けた言語は今でもスコープがおかしい

99 名前:デフォルトの名無しさん mailto:sage [2012/08/14(火) 07:55:53.88 ]
>>98
Prologにスコープはないな。


100 名前:デフォルトの名無しさん mailto:sage [2012/08/14(火) 08:14:25.83 ]
>>99
繰り返しは?

101 名前:デフォルトの名無しさん mailto:sage [2012/08/14(火) 08:53:56.63 ]
Prologにはブロックが無いよな
Cでも if (foo && bar && ……) return 1; のように書ければ{}はほぼ無くなるし



102 名前:デフォルトの名無しさん mailto:sage [2012/08/14(火) 08:54:26.78 ]
スコープについてはRubyもPythonもPHP大きな差はないかな。
ブロックスコープなのはPerlだけでしょ。
それでもJSの場合、名前空間もなければClassもないので、一番分かりづらいというのはあるね。

103 名前:デフォルトの名無しさん mailto:sage [2012/08/14(火) 09:04:12.85 ]
>>98
どうおかしいの?

104 名前:デフォルトの名無しさん mailto:sage [2012/08/14(火) 09:16:09.79 ]
>>100
繰り返し構文がないのだから、「ない」と言い切っていいんじゃないか。
仕様が「繰り返せ」の場合は再帰で表現するのだが、これも、繰り返しとも
読める、くらいの解釈でいい。節と節がバラバラに主張していて先ずその主張の
核心を「宣言的に」読み取るのがPrologなのではないか。仕様の繰り返しを陽に
するには、述語名で「・・・を繰り返す」とはっきり述べるのが一番よいだろう。


105 名前:デフォルトの名無しさん mailto:sage [2012/08/14(火) 09:33:09.22 ]
>>103
RubyもPythonも大きな差はないとか言われてもスルーしてる時点でおかしいだろ

106 名前:デフォルトの名無しさん mailto:sage [2012/08/14(火) 09:44:51.21 ]
さらっと流されてるが、>>86とか>>91のJSに関する説明はちょっとおかしいよね?
{i=0; {var i=1;} }
とかしてもJSにはブロックスコープは無いから外側のiと内側のiは同じものになってしまう
var宣言を単純にブロックの内側と外側の変数を区別するものには使えない

JSでブロックスコープ的なものが使いたいときはブロックの代わりに無名関数でくくらないと
{i=0; (function(){ var i=1; })(); }

107 名前:デフォルトの名無しさん mailto:sage [2012/08/14(火) 10:20:58.13 ]
あーそれは擬似コードだから。
PythonとRubyとJSでそれぞれ記述が違うので、
{{}}で、ネストスコープ一般を表現したってだけ。

108 名前:デフォルトの名無しさん mailto:sage [2012/08/14(火) 10:28:50.69 ]
JSのスコープのネストは関数スコープで作る前提の話なのか
たしかにブロックのスコープとは書いてないね

109 名前:デフォルトの名無しさん mailto:sage [2012/08/14(火) 10:59:07.14 ]
うんこな言語集めてどっちがマシとかマジうけるわ
マトモな言語使いたかったら静的型付け関数型言語でも使ってろ

110 名前:デフォルトの名無しさん mailto:sage [2012/08/14(火) 11:15:01.64 ]
>>109
スレタイ嫁

111 名前:デフォルトの名無しさん mailto:sage [2012/08/14(火) 11:20:59.96 ]
Javascriptを読み書きしてると function() がゲシュタルト崩壊する



112 名前:デフォルトの名無しさん mailto:sage [2012/08/14(火) 12:17:19.67 ]
Perlよりマシといえば大抵のことが許される雰囲気があった
実際にはPerlに勝ったとか負けたとか考えない言語のほうがマシだった

113 名前:デフォルトの名無しさん mailto:sage [2012/08/14(火) 16:44:44.54 ]
javascriptとsmalltalkのうんこさはそっくり

114 名前:デフォルトの名無しさん mailto:sage [2012/08/14(火) 22:46:09.32 ]

# C
1 for()
2 {
3  コード
4 }

# ruby
1 map do
2  コード
3 end


do 〜 endより { } のほうが、読みやすいことが分かった

115 名前:デフォルトの名無しさん mailto:sage [2012/08/14(火) 22:52:33.16 ]
>>113
smalltalk風の開発環境でDOMやhtml5を弄れるruby処理系なんてあれば最強じゃね?

116 名前:デフォルトの名無しさん mailto:sage [2012/08/14(火) 22:58:15.05 ]
Smalltalk処理系を流用した
Ruby処理系(MagLev)ならあったが……

117 名前:デフォルトの名無しさん mailto:sage [2012/08/14(火) 23:31:05.55 ]
>>114
ハア?
irb(main):001:0> [1,2,3].each { |x| p x }
1
2
3
=> [1, 2, 3]

118 名前:デフォルトの名無しさん mailto:sage [2012/08/15(水) 00:44:10.32 ]
codejamってjavascriptだけハブられてるのね
PHPからclojureまであるのに

119 名前:デフォルトの名無しさん mailto:sage [2012/08/15(水) 07:29:06.13 ]
JSの良さは、熱心なファンがいないってところでもあるからな。
勝手に広まって勝手に定着したから。

120 名前:デフォルトの名無しさん mailto:sage [2012/08/15(水) 08:37:53.53 ]
Javascriptのファンなんて希少種だろ
他言語からJavascriptへコンパイルするのが流行り
直接Javascript書くのは低能

121 名前:デフォルトの名無しさん mailto:sage [2012/08/15(水) 09:00:24.91 ]
>>120
定着しないのが特徴かな。実行環境が不安定過ぎた。
一時熱中して、そして去っていく。だから、プログラマ数も増えない。



122 名前:デフォルトの名無しさん mailto:sage [2012/08/15(水) 09:31:59.66 ]
>>120
今後は、これまでの軽量言語を抑えて最大になると思うけど
githubは既にjsの登録数がrubyを越えている
そして、熱心なファンは海外ではninjaだとか言われてるみたいだぞ

123 名前:デフォルトの名無しさん mailto:sage [2012/08/15(水) 09:42:35.15 ]
>>121
TIOBE INDEX がそれを物語っているね。みんなJSはもっと
使われてるでしょって言う。使ってみた人の数は多いが、
現時点での活性はやはり検索数のようなものに出てしまう。


124 名前:デフォルトの名無しさん [2012/08/15(水) 11:16:18.20 ]
jsがどこで流行ってるのかわからない
あれがブラウザ以外で使えると思ってる子はちょっとな
ブラウザ用に作られてる言語だからそれを外に引っ張り出してきても
コーディング自体が楽になるようなシンタックスシュガー系の拡張は何もやってくれないと思うよ
そんな言語で頑張りたければどうぞ

125 名前:デフォルトの名無しさん mailto:sage [2012/08/15(水) 11:26:01.35 ]
>>124
Ajaxは流行ったと思うけど、それでもダメだった。きびしいですね。

126 名前:デフォルトの名無しさん mailto:sage [2012/08/15(水) 11:29:37.61 ]
ここはどんだけガラパゴスですか

127 名前:デフォルトの名無しさん mailto:sage [2012/08/15(水) 11:33:37.84 ]
どうであれ、ブラウザでは生き残るから、
流行り廃りに関係ない、息の長い言語になるだろうね。

128 名前:デフォルトの名無しさん mailto:sage [2012/08/15(水) 11:39:35.25 ]
>>126
www.tiobe.com/index.php/paperinfo/tpci/JavaScript.html

129 名前:デフォルトの名無しさん [2012/08/15(水) 12:01:49.91 ]
まあブラウザに多言語乗っける流れがくるよ
その時がjsの終わり

130 名前:デフォルトの名無しさん mailto:sage [2012/08/15(水) 12:17:02.89 ]
Googleが乗せようっていうとMSは嫌だって言うだろうし、
MSが乗せようっていうとAppleが嫌だって言うだろうし、
なかなか標準の規格に入らないんじゃないかね。
別に規格外でも、互換性糞食らえで乗せたきゃ勝手に
乗せればよいんだが、特定のブラウザでしか動かないのでは
普及するわけ無いし。
やっぱり足並み揃えない取って事で、
新バージョンのJSが乗っかって終わりでしょう。

131 名前:デフォルトの名無しさん [2012/08/15(水) 12:26:28.68 ]
>>129
今以上にカオスになるな
クロスブラウザ対応不可能になる



132 名前:uy [2012/08/15(水) 13:14:53.16 ]
これから苦労してjsをマシな言語にさせていくよりは他言語入れたほうが早い

133 名前:デフォルトの名無しさん mailto:sage [2012/08/15(水) 13:16:51.90 ]
たとえそうでも、他の言語をねじ込むのは無理。
Appleが提案してもGoogleとMSは反対する。

134 名前:uy [2012/08/15(水) 13:30:47.00 ]
ruby2.0はChromeで動く可能性が高い

135 名前:デフォルトの名無しさん mailto:sage [2012/08/15(水) 13:40:46.02 ]
はぁ、NaCLね。はいはい

136 名前:デフォルトの名無しさん mailto:sage [2012/08/15(水) 14:10:15.96 ]
またuyがRuby関係のスレをage荒らしてるな。
議論に負けるといつもこれだ。

137 名前:uy mailto:sage [2012/08/15(水) 14:18:24.05 ]
IronRubyは存在する

IronJavaScriptは存在しない

138 名前:デフォルトの名無しさん mailto:sage [2012/08/15(水) 14:23:07.71 ]
.NetならC#だろ。バカじゃね。
同様にブラウザで動かすならJSだがな。
RubyはPythonともろに食い合う不幸な運命。

139 名前:uy mailto:sage [2012/08/15(水) 14:25:59.58 ]
えっ
ynupl.com/reddam/archives/155

こういう使い方だと思うけど
なんだと思った?

Scala(笑)がJavaのクラスを継承できます(キリッ)とかいってたけど
それと同じ

140 名前:デフォルトの名無しさん mailto:sage [2012/08/15(水) 14:33:23.30 ]
まずさ、Rubyを普及させたいのなら、何かツールを作ったら?
C言語はOSを作るために作った言語だし、
JSはネスケ社がブラウザ作る片手間に作った言語だし、
JavaはJavaVMと一蓮托生だし、
C#は.Netのために作った言語。

だからさ、Rubyも普及させたいのなら、marzに頼んで、
社会の基盤になってしまうような、革新的超便利ツール作ってもらって、
その組み込みスクリプト言語としてRuby乗せれば?

言語だけ作って後はポイ投げってのはダメ言語の典型なんだよ。
むしろツールの作成を本業とし、そっちの普及を目的とすべし。
言語開発なんかは、必要に迫られて、傍らでするぐらいでよい。
普及してて人気のある言語はほとんどそう。
ツールに引っ付いて勝手に広まった。

141 名前:デフォルトの名無しさん mailto:sage [2012/08/15(水) 14:36:53.30 ]
Rにくっついて広まるかも。
shop.oreilly.com/product/0636920022626.do



142 名前:デフォルトの名無しさん mailto:sage [2012/08/15(水) 14:40:36.21 ]
>>137
えっ
ja.wikipedia.org/wiki/JScript#JScript_.NET

143 名前:デフォルトの名無しさん mailto:sage [2012/08/15(水) 14:43:17.24 ]
>>140
元がPerlに不満を持ったMatzが書き上げたオレ言語がRubyなので
実際今でも一番多い使い方が
たぶんシェルスクリプト・Perl・make辺りの代替でしょ
プロダクト未満の小物が本来の主戦場

ただ、何か知らんが一部のハッカーの琴線に触れるものがあるらしく
RailsやらRedmineやらMetasploitやら
一線級のソフトも出てきた、というのがここ5年ぐらいの話

144 名前:デフォルトの名無しさん [2012/08/15(水) 15:07:36.87 ]
(*´・∀・)(・∀・`*)ヘー

145 名前:uy mailto:sage [2012/08/15(水) 15:10:21.84 ]
Rubyはまだまだ歴史が浅い

146 名前:デフォルトの名無しさん mailto:sage [2012/08/15(水) 15:17:03.87 ]
Rubyはなんでdoに|つけるの?

147 名前:デフォルトの名無しさん mailto:sage [2012/08/15(水) 15:19:13.66 ]
たしかJavaと同時期のリリースだったよね。

148 名前:uy mailto:sage [2012/08/15(水) 15:23:41.39 ]
どうしてこんなに差がついたのか。

149 名前:デフォルトの名無しさん mailto:sage [2012/08/15(水) 15:39:44.61 ]
>>146
パイプでブロック引数をはさまないと、
それがブロック引数なのか、
単に式としてそこにあるのかが区別できない

150 名前:uy [2012/08/15(水) 15:42:23.84 ]
クソ仕様ですみませんwww

151 名前:デフォルトの名無しさん mailto:sage [2012/08/15(水) 15:46:24.88 ]
>>149
pythonみたいな
for t in list:
みたいにできなかったの?
絶対にこっちのほうがわかりやすいと思うんだけど||でかこったら特殊な演算やってそうじゃん



152 名前:uy mailto:sage [2012/08/15(水) 15:48:47.94 ]
>ただ、何か知らんが一部のハッカーの琴線に触れるものがあるらしく

ていうか、何で分からないのか分からない
最初から最後までオブジェクトで出来てる時点でさ
if true
  5
end.times do | n |
  p n
end
こう、IFの戻り値さえそのままメソッドチェインで使えるんだけど


153 名前:デフォルトの名無しさん mailto:sage [2012/08/15(水) 15:49:51.63 ]
>>151
for t in list; end という構文も最初から存在していますけど、なにか?

154 名前:デフォルトの名無しさん mailto:sage [2012/08/15(水) 15:54:31.43 ]
>>152
Rubyにおいて if や case といった条件分岐は
文(statement)ではなく式(expression)だから
これはSmalltalkも同じ

手続き型言語として見れば異端だけど、
関数型言語として考えれば実に自然なプログラミングができる

155 名前:デフォルトの名無しさん mailto:sage [2012/08/15(水) 16:03:00.24 ]
>>153
なんであんまりrubyではその構文使わずに使わずにeach doするの?


156 名前:uy mailto:sage [2012/08/15(水) 16:22:03.27 ]
for文()よりもeachの方がメソッドチェインできて最強だからだよ

157 名前:uy [2012/08/15(水) 16:23:28.48 ]
メソッドチェインってなにがいいの?

158 名前:153 mailto:sage [2012/08/15(水) 16:26:13.52 ]
>>155
おそらく列挙オブジェクトへブロック付きメッセージを送るという
Smalltalk流のオブジェクト指向スタイルが好まれるからだと思う
for構文は手続き型スタイルであり、PerlやPythonから移ってきたばかりの
Ruby初心者は、最初for構文を使うけど、Rubyを深く知るにに従って
(forよりも柔軟な)オブジェクト指向スタイル、つまりRubyらしい
プログラミングスタイルを身につけていく

159 名前:uy mailto:sage [2012/08/15(水) 16:39:40.59 ]
メソッドチェインの有用性から説明しないとダメな奴がいるの?


160 名前:153 mailto:sage [2012/08/15(水) 16:42:30.15 ]
>>157
メソッドチェインに関しては過去スレで話題になったけど、
最大の利点は左から右へと流れる、自然に読み取れるコードが
書けることだと思う

161 名前:デフォルトの名無しさん mailto:sage [2012/08/15(水) 16:42:44.79 ]
柔軟な例とかない?



162 名前:uy mailto:sage [2012/08/15(水) 16:52:58.51 ]
rubyで一番よく使うのはmap、これは戻り値に配列を返す
普通に書いたら
p [1,2,3].map { |x| x*2 } # => [2, 4, 6]

だけど、メソッド(イテレータ)チェインする事によって、本来配列を返さない
each_with_indexなども
p [1,2,3].each_with_index { |x,i| x*(2+i) } # => [1, 2, 3]

mapを置く事による戻り値を変えられる
p [1,2,3].each_with_index.map { |x,i| x*(2+i) } # => [2, 6, 12]


これをforで書くとこう
s = []
i = 0
for x in [1,2,3]
  s << x*(2+i)
  i += 1
end
p s

for文とイテレータじゃ力の差が有りすぎて異論の余地すらない

163 名前:153 mailto:sage [2012/08/15(水) 17:05:47.91 ]
>>161
たとえば「あるリストを選別してソートして計算して書き出す」という
お題の場合、以下のような破壊的代入の無い流れるようなコードが書ける

 list.select { .... }.sort { .... }.map { .... }.each do; .... end

もしRubyにfor構文しか存在しなければ、一時変数をゴリゴリと更新していく
ループ処理を並べた典型的な手続き型コードになる

164 名前:uy [2012/08/15(水) 17:19:49.47 ]
つまり、書き方がちょっと変わっただけである。

165 名前:uy [2012/08/15(水) 17:21:52.02 ]
実際は
list.select { hoge hoge hoge hoge hoge hoge }.sort { hoge hoge hoge hoge hoge hoge }.map { hoge hoge hoge hoge hoge hoge }.each do; hoge hoge hoge hoge end

となって見難いのである。

だから縦に流れるようなコードにしたほうがいい。

list.select { hoge hoge hoge hoge hoge hoge }
list.sort { hoge hoge hoge hoge hoge hoge }
list.map { hoge hoge hoge hoge hoge hoge }
list.each do; hoge hoge hoge hoge end

166 名前:153 mailto:sage [2012/08/15(水) 17:28:12.26 ]
>>165
文が1行で収まらなければ、改行とインデントを使って
上から下へ流れるコードを書けばいい
工夫すれば、実用的なプログラムでもすべて80桁以内になるよ

list.select {
  hoge
  hoge
  hoge
}.sort {
  hoge
  hoge
  hoge
}.map {
  hoge
  hoge
  hoge
}.each do
  hoge
  hoge
  hoge
end


167 名前:デフォルトの名無しさん [2012/08/15(水) 17:28:58.74 ]
>>> [val*(2+idx) for idx,val in enumerate(sorted([3,2,1]))]
[2, 6, 12]
メソッド入れ子でもいいんちゃう?

168 名前:153 mailto:sage [2012/08/15(水) 17:44:23.49 ]
>>167はPyhon自慢のリスト内包表記だけど、
同じ計算は、Rubyであれば(>>162を少しだけいじって)
左から右へと流れるコードになる

irb(main):001:0> [3,2,1].sort.each_with_index.map { |x, i| x * (2 + i) }
=> [2, 6, 12]

さて、どちらが読みやすいと感じるかな?

169 名前:デフォルトの名無しさん mailto:sage [2012/08/15(水) 17:53:53.31 ]
読みやすさで言えば、一時変数を用意するやり方だろう。

170 名前:デフォルトの名無しさん mailto:sage [2012/08/15(水) 17:58:45.01 ]
それはペチパー君が慣れてないだけです

171 名前:デフォルトの名無しさん mailto:sage [2012/08/15(水) 18:05:30.28 ]
慣れ言い出したら、それで全て解決だな。



172 名前:デフォルトの名無しさん mailto:sage [2012/08/15(水) 18:07:20.33 ]
自転車こぐのも慣れが必要だよ

173 名前:デフォルトの名無しさん mailto:sage [2012/08/15(水) 18:08:42.47 ]
>>168
どうみてもPythonのほうが読みやすい






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

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

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