トップページtech
1001コメント309KB

Rubyについて Part 43

レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん2011/04/27(水) 23:59:30.15
Rubyウェブサイト
http://www.ruby-lang.org/

= 前スレ
Rubyについて Part 42
http://hibari.2ch.net/test/read.cgi/tech/1295081752/

関連スレなどは >>2-
0951デフォルトの名無しさん2011/06/21(火) 20:30:42.86
>>950
その辺は割と行き当たりばったりでいけるみたいよ
NetBeansとかはJRuby内蔵してオブジェクト評価しちゃう
とかそんな無理矢理感漂う力押しで解決してたりとか
0952デフォルトの名無しさん2011/06/21(火) 20:34:09.99
実行系内蔵するのは反則
0953デフォルトの名無しさん2011/06/21(火) 20:40:09.48
いや、反則とは言わないけど、どれくらい正確に解析出来るのか疑問
0954デフォルトの名無しさん2011/06/21(火) 20:43:24.65
漏れなく完全正確でなければならないわけでもあるまい
ほとんどの場合でうまくいってコストも妥当なのなら、それでいいんじゃないかね
0955デフォルトの名無しさん2011/06/21(火) 20:47:17.49
「リファクタリング機能も完璧」ってのは機械的にできるような
リファクタリングの機能がほぼすべて揃っていることを言ってるんであって、
「どんなリファクタリングでも機能としてできる」って意味じゃないのでは?

0956デフォルトの名無しさん2011/06/21(火) 20:57:35.85
>>918は風呂敷膨らませすぎだし
>>919はIDE舐めすぎってところだろうな
0957デフォルトの名無しさん2011/06/21(火) 21:04:21.13
リフレクションとか意地悪言わなくても
完全自動化が難しいリファクタリングもあるしな
Template Methodの形成とか
0958デフォルトの名無しさん2011/06/21(火) 21:26:24.57
RubyのIDE開発はメソッドミッシングや動的メソッド定義といった魔術にどう対処するかが鍵だろうな。
Scalaとかはパターンマッチングとかで静的に解決する見込みがあるのかな?
0959デフォルトの名無しさん2011/06/21(火) 21:28:40.89
風呂敷膨らませるって荷物大量に詰め込むってことだろうか。
0960デフォルトの名無しさん2011/06/21(火) 22:10:24.17
手元のEclipseでメニュー見てみたよ。
ちょっとバージョン古いけど大差ないだろ。

移動
メソッドシグネチャの変更
インターフェースの抽出
スーパークラスの抽出
使用可能な場合スーパータイプを使用
プルアップ
プッシュダウン
クラスの抽出
パラメタオブジェクトの導入
総称型引数の推測

こんなもんか。
メソッドのオーバーライドだのコンストラクタの生成だの
委譲メソッドの生成だのはリファクタリングとは別枠で用意と。

それぞれの処理は全自動ではなくて、都度問い合わされたり
プレビューで確認させられたりだな。

>>957
インターフェースの抽出→メソッドのオーバーライド
って感じでやるみたいだ。

当然全自動はムリでどのメソッドを抽出するか選べってIDEが訊いてくるね。

判断は人間にさせてIDEは候補の抽出と
指示された処理の結果保証を確実にやるって割り切りのようだ。

まあ実際それで十分なんだろうな。
0961デフォルトの名無しさん2011/06/21(火) 22:21:47.64
たぶん大風呂敷を広げるってのを間違えたんじゃないかな
0962デフォルトの名無しさん2011/06/22(水) 02:45:01.15
風呂敷広げすぎて日の目を水に終わったプロジェクトも多いからな。
0963uy ◆yyC0rYWEq2 2011/06/22(水) 05:55:29.60
小さいことなんだけど、これってRubyのオリジナル?
他言語でもあったりするの?
役立ちそうでどうでも良いような画期的な機能に思えるんだけど

puts DATA.read

__END__

tes
s
ss
s
s
0964デフォルトの名無しさん2011/06/22(水) 06:03:57.42
Perlにはあるね
0965uy ◆yyC0rYWEq2 2011/06/22(水) 07:18:20.87
ほう・・・・・
0966デフォルトの名無しさん2011/06/22(水) 09:17:03.78
発想的にはむしろ古い言語に多いかと
BASICのDATA文とかENDより後に書くのが主流だったしなー
0967デフォルトの名無しさん2011/06/22(水) 09:21:13.39
パンチカードの束をジョブとしてくべていた時代は、先頭にジョブ制御言語の
カードがあって、そのあとプログラムのカードとデータのカード、とかたぶん
そういう文化。
0968デフォルトの名無しさん2011/06/22(水) 10:26:27.67
まあソースファイルにデータ同梱したいすごく強烈な理由でもないかぎりやめた方が無難。
処理とデータは分けましょう。
0969デフォルトの名無しさん2011/06/22(水) 10:39:47.28
単にPerlにあるからRubyにも入れた程度の機能じゃね?
そのわりにrewindとかできるけど。
0970デフォルトの名無しさん2011/06/22(水) 11:30:13.42
shebangって元々そういう発想では
0971デフォルトの名無しさん2011/06/22(水) 11:45:13.90
shebang?
ヒアドキュメントじゃなくて?
0972デフォルトの名無しさん2011/06/22(水) 12:27:12.92
だれかヒアドキュメントの話してたか?
0973デフォルトの名無しさん2011/06/22(水) 12:54:32.21
え・・・
0974デフォルトの名無しさん2011/06/22(水) 13:04:21.33
たぶん963とか965に何か書いてあるのだろう。
0975デフォルトの名無しさん2011/06/22(水) 13:35:40.84
このスレには無意識に平行世界を行き来してる人が居るよね
0976デフォルトの名無しさん2011/06/22(水) 15:22:32.75
君はどの平行世界から来たんだ?
0977デフォルトの名無しさん2011/06/22(水) 20:01:42.72
0978デフォルトの名無しさん2011/06/22(水) 20:02:12.50
目立たないように
0979デフォルトの名無しさん2011/06/22(水) 20:02:48.39
届きますように
0980デフォルトの名無しさん2011/06/22(水) 20:03:29.24
都内23区一律均一料金
0981デフォルトの名無しさん2011/06/23(木) 00:47:39.78
98年頃の雑誌みてたらおもしろいなー。
CGIとかシェルスクリプトで書いてたとかw
ワロスワロスw
ハードディスクに保存するよりフロッピーにラベルを貼って保存した方が遥かに便利とかかいてあってワロスワロスw
会社にPCが一台しかないのでメールなんて使いもんにならん。
一部のオタク用の道具であり一般に普及する事はないだろう。
ワロスワロスw
古い本ってとっておくと後で楽しいわw
0982デフォルトの名無しさん2011/06/23(木) 00:48:53.30
誤爆したすまんすまんw
0983デフォルトの名無しさん2011/06/23(木) 07:35:16.18
http://codepad.org/soutlQb0


入力した数字の3乗根を求めるプログラムを作ったのですが、
bigdecimalを使っても計算精度があたりません・・・。

どうすればいいのでしょうか
0984デフォルトの名無しさん2011/06/23(木) 07:57:59.89
>>983
http://codepad.org/qb8xTVbg
こっちのほうが見やすいかもしれません。
0985デフォルトの名無しさん2011/06/23(木) 08:02:31.13
計算精度があたるってなんじゃらほ
とりあえず、途中で min と max がただの整数になってる
Ruby の変数は箱ではなく、オブジェクトに貼られたラベルだ
BigDecimal オブジェクトに max という変数名をつけたからといって、max という変数名が常に BigDecimal になるわけじゃない

if m * m * m >= n
max = BigDecimal::new(m.to_s)
end

min = max - BigDecimal::new('1.0')

mid = (min + max) / BigDecimal::new('2.0')

とか書いたら

15 # input
0.25E1
0.225E1
0.2375E1
0.24375E1
0.246875E1
0.2453125E1
0.24609375E1
0.246484375E1
0.2466796875E1
0.24658203125E1

という表示になったけどこれでいっすか
0986デフォルトの名無しさん2011/06/23(木) 08:12:08.17
>>983
アルゴリズムが変なようにも見えるが……
二分法の骨格はこれだけ
http://codepad.org/gbpyRRAB

0987デフォルトの名無しさん2011/06/23(木) 08:13:25.55
>>985
ありがとうございました!

E1は消せませんか?
0988デフォルトの名無しさん2011/06/23(木) 08:17:04.06
>>986
おかしいですか・・・?

入力された数字の3乗根が整数の場合はすぐに出力して
そうじゃなかったら二分法で近似値を出力しようとしています。

>>984をみてもらったら
>>983よりわかりやすいかと思います
0989デフォルトの名無しさん2011/06/23(木) 08:28:53.36
>>987
10倍した値が出ないですか?

って意味で です
0990uy ◆KOAgYBL/Xg 2011/06/23(木) 08:41:23.17
.to_f
これか?

違えば自分で関数を調べるが良い
min = BigDecimal::new("5.0")
min.methods.sort.each do | f |
 begin
   print f , "\t\t\t"
   puts eval" min.#{f} "
 rescue
   p f
 end

end
0991デフォルトの名無しさん2011/06/23(木) 08:44:30.56
>>989
mid.to_s("F")
0992デフォルトの名無しさん2011/06/23(木) 08:46:03.28
浮動小数点数の表記法を調べたら解る
0993デフォルトの名無しさん2011/06/23(木) 08:53:00.31
計算精度が必要なら消しちゃ駄目だろう
なんのためにBigDecimalなんて遅いライブラリ使ってまで計算したんだよ
0994デフォルトの名無しさん2011/06/23(木) 23:00:30.94
>>991
ありがとうございました!

>>993
BigDecimalがないと小数点15桁以降が表示されないからです。
0995uy ◆yyC0rYWEq2 2011/06/23(木) 23:27:44.70
こんなのつくってます
http://www.dotup.org/uploda/www.dotup.org1732354.jpg
http://www.dotup.org/uploda/www.dotup.org1732358.jpg

Rubyで大規模なプログラム無理ぽとか、言ってるやつが信じられない
擬似OSとか10分で余裕で作れるレベル・・・・・・・
0996デフォルトの名無しさん2011/06/23(木) 23:30:47.27
>>995
いますぐWindowsで動くxmonadのサブセットを作るんだ
マジで神になれるぞ
0997uy ◆yyC0rYWEq2 2011/06/23(木) 23:43:09.81
俺は元々神だ・・・・・・
つうか速度を落としてでもソースコードを小さくしてる
ウィンドウ周りと、エディタと、STGかいてそれで1000行程度・・・・・
xmonadってHaskellでかかれてるってことは、関数ごとにコンパイルとかしてるんだろそれ
Rubyの速度でウィンドウマネージャ?システム? 作るのは実用的ではない・・・・・・
オブジェクト100個で処理落ちする
だから、どうせ処理落ちするから、吹っ切れてソースコードの小ささのみを求めてる・・・・
趣味のレベル・・・・・・・・
0998デフォルトの名無しさん2011/06/23(木) 23:43:45.89
スクリプト言語なんだから、ある程度の処理が短時間で書けるのは当たり前ですん。
そうでなきゃスクリプト言語の意味なす……。

「Rubyでも大規模なプログラムが書ける」ということを示したいなら、
短時間で一定のプログラムを書けることを示すんじゃなくて、
実際に「大規模なプログラム」を書いて見せなきゃダメだお。

・大規模で
・C/C++、あるいはせめてJavaやC#で書き直したくなるほどには重くなくて
・Rubyであるおかげでそれらの言語より短時間でスマートなコードで書けた

プログラムを書いてからまたどうぞ。
0999デフォルトの名無しさん2011/06/23(木) 23:49:59.65
多人数で週月年とかって単位で作るようなプログラムを
まともに動くようにRubyで書けば「Rubyでも大規模開発できる」って認められるんじゃないかな。
1000uy ◆yyC0rYWEq2 2011/06/23(木) 23:52:47.70
示したいとかいっていない
俺はそもそもソースコードが異質であり、何か大規模なものかいても例外とされる・・・・



[ [ oo.x , oo.y ] , [ oo.x + 20 , oo.y ] ].each do | ( x , y ) |
       oo.node_task_template({ :x => x , :y => y , :d => Image.new(10,20,[100,100,150]) ,
  :misaka => "user_shot" , :hdc => main ,
       }) do | yu |
  oo.y -= 2
  next oo.delete if oo.y < 0
  oo.search_up(/game_stage/).search_down_all_test(/tek_\d.*/).each do | key , value |
    if Lumia.blockhit oo.x , oo.y , oo.d.width , oo.d.height , value.x , value.y ,
    value.d.width , value.d.height
     oo.search_up(/game_stage/).eval_do.push %!
     (1..10).each do | i |
       mm.node_task_template({ x: #{main.x} + #{oo.x} + #{oo.d.width/2} , y: #{main.y} + #{oo.y} + #{oo.d.height/2} ,
      d: Image.new(4,4,[100,100,200]),
      limit: 155 , add: 1 , :hdc => Window ,
      speed: 0.5, angle: i*36 , misaka: "misaka",
         feadin: ({ limit: 254 , add: 1 }) ,
         rot:  ({ limit: 400 , add: 1 }) ,
         scalex: ({ start: 1 , limit: 2 , add: 0.01 }) ,
         scaley: ({ start: 1 , limit: 2 , add: 0.01 }) ,
       }) do |yu , c|
      #   Window.drawFont(oo.x, oo.y, "test#{c}", Yuyuko.font)


それに、arcadia(IDE)?
だって大規模といえば大規模だろ

もうRubyで大規模開発をやってる奴はやっている
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。