[表示 : 全て 最新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にシングルトンパターンは存在しないようだ。」
面接官「帰れよ。」


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のほうが読みやすい

174 名前:デフォルトの名無しさん [2012/08/15(水) 18:15:01.60 ]
.map{|x| x*2}.
みたいに続いていく構文が若干分かりにくいんだよね
{}で囲まれてると関数に見えるし
||も引数なのかなんなのか謎だし

まあ慣れなんだろうけど

175 名前:153 mailto:sage [2012/08/15(水) 18:21:38.11 ]
>>173
>>168のRubyコードを第三者へ説明しようとしたら

 リスト定数をソートしてから添字付きで列挙し、各要素の計算値で写像する

と、左から右へと流れるコードの構成に沿って記述できる
これはトイプログラムに限らず、>>166のような長く大きなコードでも同じ

さて、>>167を第三者へ説明しようとすれば、どんな文章になるかな?

176 名前:153 mailto:sage [2012/08/15(水) 18:25:51.31 ]
>>174
関数に見えるというか、無名関数という関数そのものだよ
lambdaのような予約語が省略されているだけ

177 名前:デフォルトの名無しさん mailto:sage [2012/08/15(水) 18:40:16.04 ]
だから、分かりやすいのがよいなら、
一時変数用意すればよいだろ。何の説明も要らなくなるよ。

178 名前:uy mailto:sage [2012/08/15(水) 18:46:19.62 ]

はーーー ばぐった
Rubyごみかす 

179 名前:デフォルトの名無しさん mailto:sage [2012/08/15(水) 18:46:32.63 ]
短くて分かりやすいのがベストだよね!



180 名前:デフォルトの名無しさん mailto:sage [2012/08/15(水) 18:58:34.52 ]
Smalltalkの #(1 2 3) collect: [:x | x*2] って書き方をパクってこなければ
どっちかっていうとPythonっぽいこっちの文法のままだったんだろうな。きっと。
do [1,2,3].map using x; x*2 end

181 名前:153 mailto:sage [2012/08/15(水) 19:14:29.25 ]
>>177
一時変数は悪ではないし、否定しないよ
実際に実用的なプログラムでは、あまりに長いメソッドチェーンを
途中で切って、間に一時変数を入れることがある
ただし、一度代入したら二度と更新しない

問題は変数の「破壊的代入」
たとえば>>162の最後にあるforを使った手続き型スタイルでは、
最初にリスト変数とループ変数に初期値を代入した後、
forループ内でこれら変数をゴリゴリと更新(破壊的に代入)している
これが可読性の悪化とコード品質の低下をまねく要因

なお破壊的代入の無さは、専門用語だと「参照透明性」と呼ばれる

182 名前:デフォルトの名無しさん mailto:sage [2012/08/15(水) 19:25:04.95 ]
破壊代入が嫌いなら、手続き型言語の世界から去ってもらうしかないね。
表面のコードに表れて無いだけで、結局mapの中で破壊代入しているのだから、一緒だよ。
書いてある場所が違うだけで、本質的な動作が同じなのだから、危険度も同じ。

183 名前:uy mailto:sage [2012/08/15(水) 19:34:44.27 ]
ライブラリや言語処理系側に破壊的操作をさせるのと、
自分で直に破壊的操作を行う処理を書くのは全然危険度が違うよ

184 名前:デフォルトの名無しさん mailto:sage [2012/08/15(水) 19:39:26.70 ]
だったら、関数型言語の参照透過性のメリットなど何も無いって事だな。
破壊的代入は全てライブラリにやってもらえば安全なのだから。

185 名前:uy mailto:sage [2012/08/15(水) 19:43:25.26 ]
頭悪いね

186 名前:デフォルトの名無しさん mailto:sage [2012/08/15(水) 19:45:30.24 ]
>>114
ブロック内の処理が一つの場合は{}で複数処理はdo end がいいってじっちゃが言ってた

187 名前:uy [2012/08/15(水) 20:20:56.63 ]
長く書くとわかりやすいって考える奴居るよなw


数学でも長い式を
一時変数に代入するのにな。

188 名前:デフォルトの名無しさん [2012/08/15(水) 20:22:00.55 ]
do | o |
ってやったら外人に笑われた
なんで?

189 名前:uy mailto:sage [2012/08/15(水) 20:38:54.52 ]
キチガイなんじゃね



190 名前:デフォルトの名無しさん mailto:sage [2012/08/15(水) 21:01:43.68 ]
>>188
lolはlaugh out loudlyで(笑)と同じように使われるから、笑えよってことだね。英語圏のコミュニティ行くとよくあるよ。

191 名前:デフォルトの名無しさん mailto:sage [2012/08/15(水) 21:10:40.01 ]
内包表記が読み難いとか言ってる奴は
数学の素養が無いって自己紹介してることに気付いてないの?
かっこわるいから控えた方が良いよ

192 名前:デフォルトの名無しさん mailto:sage [2012/08/15(水) 21:13:01.31 ]
集合のアレだと気づくのに半年かかったお

193 名前:uy [2012/08/15(水) 21:19:39.91 ]
>>191
でも、実際に読みづらいんだろう?

194 名前:デフォルトの名無しさん mailto:sage [2012/08/15(水) 21:27:25.15 ]
ブロック記法は任意の(ただし関数引数は一つだけの)
高階関数を記述できる分だけ汎用性があるが、
mapとかfilterとかの組み合わせに関してはリスト内包表記のほうが簡潔になりうる

細かい優劣はあれど、matzは内包表記みたいな専用構文を用意するのを嫌った
PythonあるいはHaskellその他のように、頻出する記述に糖衣構文を与えるのは間違っていないと思うが、
Rubyはそれよりもブロック構文による均質性を採ったという事

195 名前:デフォルトの名無しさん mailto:sage [2012/08/15(水) 21:40:16.38 ]
なんでSmalltlakみたく{ |x| x*2 } をファーストクラスにしなかったの?
そしたらもっと簡潔にも均質にもなったのに。

196 名前:デフォルトの名無しさん mailto:sage [2012/08/15(水) 21:50:52.54 ]
Pythonの内包表記はプログラミング独特の手続き的なところをない交ぜにしてるから
数学の内包表記は読みやすいからPythonのも読みやすいみたいな論法はちょっとしっくり来ないな

197 名前:153 mailto:sage [2012/08/15(水) 21:57:54.67 ]
>>191
自分は内包表記が読み難いとは思わないね
ただしPythonの場合、局所宣言またはクロージャがないから
せっかくの内包表記構文が台無しになっている
過去スレ19,20で議論になったコードを以下に示す

==== Haskell ====
 data Option a = None | Some a
 ys = [fn x | x <- xs]
   where fn x =
     let
       h = if is_first_page x then generate_header else None
       b = generate_body x
       f = if is_last_page x then generate_footer else None
     in
       (h, b, f)

Haskellには局所宣言としてwhere節があるから、関数fnを定義することで
内包表記を含む式をトップダウンに数学っぽく記述できる

==== Python ====
 ys = (Document.new(h,b,f) for x in xs
   for h in [generate_header() if x.is_first_page else None]
   for b in [generate_body(x)]
   for f in [generate_footer() if x.is_last_page else None])

このPythonコードが何をしているかどうか、はたして一目で把握できるかな?

198 名前:153 mailto:sage [2012/08/15(水) 22:01:18.03 ]
参考として、>>197に関するRubyのコードを過去スレからコピペする

==== Ruby ====
 ys = xs.map { |x|
   h = if x.first_page? then generate_header else nil end
   b = generate_body x
   f = if x.last_page? then generate_footer else nil end

   Document.new h, b, f
 }

Rubyには内包表記構文は無いけれど、普通に書ける(実に初歩的なコードだ)

199 名前:uy mailto:sage [2012/08/15(水) 22:05:42.94 ]
いやそこは

h = generate_header if x.first_page?
b = generate_body x
f = generate_footer if x.last_page?

だろ

falseだろうとローカル変数は宣言されるから




200 名前:デフォルトの名無しさん mailto:sage [2012/08/15(水) 22:07:42.58 ]
>>197
HaskellもPythonも使えるから
どっちも楽勝で読める

あとHaskellならそのケースだと内包表記じゃなくて map fn xs だな
短いし読み易い

201 名前:デフォルトの名無しさん mailto:sage [2012/08/15(水) 22:08:07.08 ]
>>195
確かGroobyはそういう仕様だったから、整合性は何とかなるんだろうけど
実際問題として誰も困ってないんじゃないの
ブロックがリテラルとして書けたとしても、どっちみちブロック付きメソッド呼び出しの時は
ブロックを特別扱いする構文を認めることになるから、特段簡潔になるというほどでも……

いわゆる無名関数を直接操作したいならブロック(Procオブジェクト)ではなくてlambdaが適当で
lambdaに関しては1.9から糖衣構文が入った

202 名前:uy mailto:sage [2012/08/15(水) 22:09:14.11 ]
Rubyは色々考えながら作っていってる感はあるよね

現在のrubyに>>197
こういうの導入すれば、開発効率は一時的に上がるけど
低脳プログラマは優秀なプログラマが管理してやらないと
意味不明なコード書いて自滅するから
全体パフォーマンスを見れば入れるべきでないものもある

203 名前:デフォルトの名無しさん mailto:sage [2012/08/15(水) 22:13:47.89 ]
>>197
どっちにしても、酷いコードだ。

204 名前:デフォルトの名無しさん mailto:sage [2012/08/15(水) 22:16:27.85 ]
メソッドチェインって書いた後から付け足す事って結構あるからね
イテレータやループの書き方は統一されてたほうが良い

205 名前:デフォルトの名無しさん mailto:sage [2012/08/15(水) 22:17:50.65 ]
この辺りはある程度個人の感性だけど
内包表記が多段ネストし始めるのはさすがに勘弁して下さいっていうか
読むのも書くのも面倒じゃない?

Haskellはまだwhere節で後ろに押しこみ直すことでトップダウンに読めるから
場合によっては許せるかなあと。少なくとも適切な変数名が条件w

206 名前:デフォルトの名無しさん mailto:sage [2012/08/15(水) 22:22:51.19 ]
内包表記が活きるのはイテレートする変数が
複数になったときじゃねーの

f n = [(x,y,z) | x <- [1..n], y <- [1..n], z <- [1..n], x^2 + y^2 == z^2]

207 名前:デフォルトの名無しさん mailto:sage [2012/08/15(水) 22:31:21.07 ]
>>201
どうして? ブロックがファーストクラスなら yield や &block なんて小細工いらなくなるし、
複数のブロックを引数として簡単に渡せるから表現の幅も広がるし、
機能も意味もずっと簡潔になると思うよ。

208 名前:デフォルトの名無しさん mailto:sage [2012/08/15(水) 22:32:31.13 ]
内包表記とか参考演算子なみのウンコやん。
Pythonってそんな誰得非効率機能が特徴なの?ウンコやん。
ついでにRubyもウンコやん。
ラムダ式とかevalが使えんコンパイル言語がなんちゃってevalを実装してるようにしか見えん。ウンコやん。



209 名前:デフォルトの名無しさん mailto:sage [2012/08/15(水) 22:42:15.44 ]
>>207
もっと具体的に実現例を出してもらわないと
よく分からない



210 名前:デフォルトの名無しさん mailto:sage [2012/08/15(水) 22:48:10.24 ]
とりあえずsmalltalkは演算子優先順位すらないクソ言語だから
このスレで議論する価値無い
Java以下のウンコの中のウンコ

211 名前:デフォルトの名無しさん mailto:sage [2012/08/15(水) 22:52:50.85 ]
>>197をPythonで(RubyやHaskellのコード相当で)書くならごく素直に

def preprocess(x):
h = generate_header() if x.is_first_page else None
b = generate_body(x)
f = generate_fotter() if x.is_last_page else None
return h, b, f
ys = [Document(preprocess(x)) for x in xs]

じゃないかと。まずリスト内包で書くことはない

212 名前:uy mailto:sage [2012/08/15(水) 22:53:01.74 ]
初心者は消えろ

213 名前:デフォルトの名無しさん mailto:sage [2012/08/15(水) 23:10:42.33 ]
みんな消えたか…

214 名前:デフォルトの名無しさん mailto:sage [2012/08/15(水) 23:59:55.09 ]
>>209

- 複数のブロックをとるメソッド呼び出しを簡潔に書ける
[1,2,3].find(lambda{ :not_found }){ |e| e>5 }
[1,2,3].find { :not_found }, { |e| e>5 }

- ブロックをレシーバーにできる
lambda{ :do_something }.should_not raise_error
{ :do_something }.should_not raise_error

- ブロックをとるメソッドの仮引数に前置&が不要になる
def meth(&block); other(&block) end
def meth(block); other(block) end

215 名前:デフォルトの名無しさん mailto:sage [2012/08/16(木) 00:05:36.35 ]
-> をタイプする手間すら億劫っていうのは
ちょっと病気ですよ
Rubyってそういう言語かもしれないけど

216 名前:デフォルトの名無しさん mailto:sage [2012/08/16(木) 00:06:27.09 ]
>>204
付け足す事もあるけど、途中の処理の内容を変えたり、途中で処理を分岐する事もあるよね?その場合、一時変数を使ってる方がやりやすくない?

217 名前:デフォルトの名無しさん mailto:sage [2012/08/16(木) 00:11:36.22 ]
>>143
Perl代替で一番成功してるのはPythonじゃない?
Rubyの場合、作者の思惑はともかく、現状はほぼRails専用と言っていいのでは。
Railsを便利に使うためのツールはいろいろあるけど、OSだったりミドルウェアから使うようなRuby製のツールってPerlやPythonと比べて全然無いでしょう。


218 名前:デフォルトの名無しさん mailto:sage [2012/08/16(木) 00:18:16.38 ]
>>214
>- 複数のブロックをとるメソッド呼び出しを簡潔に書ける
そういう部分でメソッド引数括弧の省略を使うのは筋悪でしょ
現在のRubyのコーディングスタイルでも、引数がある場合は原則省略しないのが主流

あるいは括弧を省略しない場合、確かにルールは単純だけど見栄えがよろしくない
hoge({|x| p x })

そしてブロック構文の仮定として
大部分の高階関数は関数引数を一つしか取らないという
観察結果があるわけだから、一つに特化した構文でも十分

219 名前:デフォルトの名無しさん mailto:sage [2012/08/16(木) 00:35:02.92 ]
>>217
ここで小物と表現していたのは、ツールと呼ぶのもおこがましいほど小さい
日常の雑務を処理するような小規模スクリプトだよ。ワンライナーも含む

例えばRubyに大量に残ってるPerl譲りの特殊変数とか、
外部コマンドのためにリテラルとか、インタプリタの変な起動引数とか、
色々あるが、おそらく全部そういう小物のためのもの



220 名前:デフォルトの名無しさん mailto:sage [2012/08/16(木) 00:43:48.75 ]
>>218
しかし関数型言語で圧倒的に利用頻度の高い
関数合成は関数引数を複数取る関数なんだよね
(.) :: (b -> c) -> (a -> b) -> a -> c

Rubyではブロックとブロックを合成して
新しいブロックを作りたくなることは無いの?
xs.map(f).map(g).map(h) を
xs.map(f.g.h) と書けたら良いと思わない?

221 名前:uy mailto:sage [2012/08/16(木) 01:00:12.30 ]
俺はrubi使いだけど、ちょっとrubyの考えは改めようかな
言語が複雑なことやってるから、実装もバグ取るのも大変なんだろうし
俺が普通じゃないコード書いてるからなんだけど
バグ多すぎてワロタwwww
今日だけで2個踏んだったwwww
なんでだろ、世界でずいぶん使ってる奴いるはずなのに、
俺はもういままでrubyのバグには自分で出したのだけで少なくとも10個以上
どうなってるのこの言語 とりあえずlambda周りとハッシュ周りに何かがある・・・






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

前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