Ruby 初心者スレッド ..
[2ch|▼Menu]
285:デフォルトの名無しさん
09/01/09 20:13:07
本の最初の部分で「他の言語経験がなく、これからRubyでプログラミングを始める人を対象とする。」みたいに
書いてあるが、実際にはまったくのプログラミング初心者には向かないかもしれない。

一番不思議に思ったのは、練習問題。

ふつう、その章に出てくる練習問題は、その章までに学んだことを応用できるような
問題にするべきなのに、Stringクラスの練習問題では、次の章に出てくるハッシュや
正規表現を使わせる問題が出てくる。

これじゃプログラミング初心者はつまずいてしまうのではないだろうか。

なんとなく、プログラミングの感覚を「Ruby」に染めさせるような本に思えてくる。

286:デフォルトの名無しさん
09/01/09 20:15:58
プログラミングPerlもプログラミング初心者が1ページ目から読むようにはできてなかった気がする
(まああれは厚さも問題だが)

287:デフォルトの名無しさん
09/01/09 20:51:12
>>278
100冊カートに入れた。
そしてカートから出した。

288:デフォルトの名無しさん
09/01/09 21:11:27
カートには99冊残ってるわけか

289:デフォルトの名無しさん
09/01/09 21:11:31
いまRubyマニュアルを読めてるような人には有り難味の薄い書物であるように見える

290:デフォルトの名無しさん
09/01/09 21:13:03
>>289
購入者の6割はお布施だと思うよ

291:デフォルトの名無しさん
09/01/09 21:14:15
原著を斜め読みした限りでは、初心者向けの本ではない。
1.9の解説書として考えるのが妥当だと思う。

292:デフォルトの名無しさん
09/01/09 21:18:23
>>288
それは必ず成り立つのですか?

293:デフォルトの名無しさん
09/01/09 21:19:34
詳説Rubyと名付けるのが妥当

294:デフォルトの名無しさん
09/01/09 21:20:49
オライリーの "プログラミング#{言語名}" という本は総じてガチ初心者お断りだから、
間違って買ってしまう人以外は平気だと思う

295:デフォルトの名無しさん
09/01/09 21:22:04
設計者の書いた本は、仕様と同時に言語の思想とかも与えてくれるから
バイブル扱いされやすい気がする
K&R、ラクダ、D&Eみたいに・・・・・本家amazonの評価が異様に良いのも気になる

296:デフォルトの名無しさん
09/01/09 21:23:12
>>293
だよなぁ・・。

なんかこう、プログラミング初心者向けですよ〜みたいなこと言っておいて
「プログラミングの世界ってどんなんだろう?」という純粋な初心者が、いつのまにか「Rubyだけの世界」に洗脳されそうだ。
もっとプログラミングの本質にこだわった本かと思ったのに。。

297:デフォルトの名無しさん
09/01/09 21:28:58
プログラミングの本質に触れたいなら特定の言語名を冠した本は違うと思うな。
といってプログラミングの初心者にそれを理解しろってのは酷だけど。

298:デフォルトの名無しさん
09/01/09 21:31:12
>>297
> プログラミングの本質に触れたいなら特定の言語名を冠した本は違うと思う
URLリンク(www.amazon.co.jp)
イエスこの本マジお勧め

299:デフォルトの名無しさん
09/01/09 21:33:12
>>298
それなんでRuby採用したんだろうな

300:デフォルトの名無しさん
09/01/10 01:51:35
> Rubyは変なキツネの漫画を読んだだけなので
www
ホワイの感動的なやつだな

>>205
C++のプロは「C++のプロ」とは自分で言わんだろ。
自称「C++のプロ」と言えばなんとなくニュアンスはわかる

301:デフォルトの名無しさん
09/01/10 02:40:12
>>285
>ふつう、その章に出てくる練習問題は、その章までに学んだことを応用できるような
>問題にするべきなのに、Stringクラスの練習問題では、次の章に出てくるハッシュや
>正規表現を使わせる問題が出てくる。
>これじゃプログラミング初心者はつまずいてしまうのではないだろうか。

それは既にhashや性器表現を知ってるからそう思うだけで教育的効果はあると思うよ
初心者の場合hashや性器表現を使わずにその問題を解こうとして悩むのがいい
そうすれば次の章で出てくるhashや性器表現の意味や必要性を理解しやすい
唐突にhashや性器表現が出てくる方が初心者は混乱する

>なんとなく、プログラミングの感覚を「Ruby」に染めさせるような本に思えてくる。

どの辺が?

302:デフォルトの名無しさん
09/01/10 02:43:11
>>300
大学生のときは上には上がいる、というか、上しかいない状況だったが、
就職してからは、下が果てしない、というか、下しかいない状況だった。
プログラミングで食ってりゃプロなのは間違いないが、それとスキルは直結しない。

303:デフォルトの名無しさん
09/01/10 02:52:58
まつもとゆきひろって2ちゃんねるの管理人だった人?

304:デフォルトの名無しさん
09/01/10 03:33:40
>>301
ネタとわかってても性器表現が気になってしょうがないんだがw

305:デフォルトの名無しさん
09/01/10 07:07:39
>>302
下ばっかり見てると腕落ちますよ

306:デフォルトの名無しさん
09/01/10 09:24:05
rubygemsってどう呼ぶんですかね?
ルビィゲムズ?

307:デフォルトの名無しさん
09/01/10 09:28:57
>>306
gem(ジェム): 宝石。宝玉。
URLリンク(dictionary.www.infoseek.co.jp)


308:デフォルトの名無しさん
09/01/10 09:44:34
>>307
d

309:デフォルトの名無しさん
09/01/10 13:08:05
>>266
>>269

遅くなりましたがありがとうございます!!
perl と同じなんですね
助かりました!

310:デフォルトの名無しさん
09/01/10 13:10:27
>>301
なるほどね。

311:デフォルトの名無しさん
09/01/10 14:01:03
青空文庫形式のテキストを処理しています。
青空文庫形式では親文字とルビを次のように書いています。

 |親《おや》|文《も》|字《じ》

これを一つにまとめる形で、

 |親文字《おやもじ》

という形に変換(置換処理)したいのですが、どうすれば良いでしょうか。
親文字が幾つあるかは一定していません。
この処理を一行毎に行いたいのです。

312:デフォルトの名無しさん
09/01/10 14:59:15
>>311
irb> s = '|魑《ち》|魅《み》|魍《もう》|魎《りょう》が|跋《ばっ》|扈《こ》する'
irb> 1 while s.gsub!(/|(.*?)《(.*?)》|(.*?)《(.*?)》/, "|¥¥1¥¥3《¥¥2¥¥4》")
=> "|魑魅魍魎《ちみもうりょう》が|跋扈《ばっこ》する"

gsub!は置換が行われればレシーバ(s)を、行われなければnilを返す。
1っていうのはとくに意味はない。後置whileを繰り返すためだけの存在。


313:デフォルトの名無しさん
09/01/10 15:13:57
s.gsub(/(|.+?《.+?》)(?!|)/){"|%s《%s》" % $1.scan(/|(.+?)《(.+?)》/).transpose}

正規表現であまり悩みたくない人向け

>>312
gsub の第 2 引数は使うなとお達しが来てるはずだが

314:デフォルトの名無しさん
09/01/10 15:27:57
初心者スレで transpose と sprintf 使って手抜きしてる人には言われたくないだろうな

s.gsub(/(|.+?《.+?》)(?!|)/){
base = Array.new
ruby = Array.new
$1.scan(/|(.+?)《(.+?)》/){|m|
base.push(m[0])
ruby.push(m[1])
}
# 以下の文字列が gsub(re){str} の str に当たるもの
"|#{base.join('')}《#{ruby.join('')}》"
}

前にも gsub の 2番目の引数使ってた人がいたけど同一人物かね
無駄にエスケープ連打せずにブロック使えという認識になってたと思う




315:デフォルトの名無しさん
09/01/10 15:42:35
>>312
s = "|日《に》|本《ほん》|語《ご》の|漢《かん》|字《じ》"
1 while s.gsub!(/|(.*?)《(.*?)》|(.*?)《(.*?)》/, "|\\1\\3《\\2\\4》")
puts s

|日本語字《にほんご》の|漢《かんじ》


316:デフォルトの名無しさん
09/01/10 15:43:46
> gsub の第 2 引数は使うなとお達しが来てるはずだが
kwsk

317:デフォルトの名無しさん
09/01/10 16:28:35
正規表現で漢字のかんむりやへんやつくりをマッチさせるにはどうするんですか?

318:デフォルトの名無しさん
09/01/10 16:32:31
>>317
無茶言うな

どっかの誰かに「部首と漢字文字との対応表データ」を作ってもらうしかないね
ネット上には適当なデータを作ってる熱心な人がいるから、それをRubyでどうにか使うしか

319:デフォルトの名無しさん
09/01/10 16:37:40
発想としては斬新でけっこう好きだ
その視点を失わずにプログラミングして欲しいなと思う

320:デフォルトの名無しさん
09/01/10 17:11:49
このスレの少し前でRackの話が出てたけど
実際のところ、Rackって日本ではどのくらい使われてるんだろうね
日本語の解説記事もいくつかあるから、少なくともドマイナーって程ではないと思うが

321:デフォルトの名無しさん
09/01/10 17:49:37
流石って
さす+が
さ+すが
どっちになってます?

322:デフォルトの名無しさん
09/01/10 17:56:54
>>321
熟字訓だから「さすが」で分かれない
明日が「あし - た」でも「あ - した」でもないのと同じ

323:デフォルトの名無しさん
09/01/10 19:33:38
(3.2-2.0) == 1.2 がfalseの理由を教えて下さい。

324:デフォルトの名無しさん
09/01/10 19:34:58
>311です。皆さんありがとうございました。

325:デフォルトの名無しさん
09/01/10 19:47:19
>>323
等しくない
たぶん浮動小数点数の誤差のせい

irb(main):024:0> sprintf("%.16f", 3.2 - 2.0)
=> "1.2000000000000002"
irb(main):025:0> sprintf("%.16f", 1.2)
=> "1.2000000000000000"

326:デフォルトの名無しさん
09/01/10 19:51:08
>>323
浮動小数点だから

何かを計算した結果の浮動小数点の値と、
それ以外の数式で何かを計算した(あるいは計算していない)浮動小数点の値が、
全く同じになるというようなことはふつう無い

だから、小数を含んでいる数値は絶対にイコールで比較してはいけない

どうしても比較したい場合は、たとえばその差を誤差並に小さな数 Float::EPSILON と比較する

irb> (3.2 - 2.0) -1.2 < Float::EPSILON
false
irb> (3.2 - 2.0) -1.2 < Float::EPSILON*10
true

10倍や100倍以内なら同じ数値とみなしてよい

327:デフォルトの名無しさん
09/01/10 19:53:11
>>323
なるほど。
てことは、浮動小数点数の比較は安易にするなってことですかね。


328:デフォルトの名無しさん
09/01/10 19:55:18
>>326
ありがとうございます!
そうゆうもんなんですね。
PHPから入った素人なんで、勉強になりました。

329:デフォルトの名無しさん
09/01/10 19:55:38
あ、いかん、絶対値とらないと

((3.2 - 2.0) -1.2).abs < Float::EPSILON*10

こういうのでよろしこ

330:デフォルトの名無しさん
09/01/10 19:55:47
rubyに限らず実数の比較をしないってのは基本
おおむね>>326の通りなんだけど、欲を言えば絶対値を取っておくほうがいい

331:デフォルトの名無しさん
09/01/10 19:57:40
厳密じゃなくていいのなら、文字列にして比較してしまうというのがいいかもしれん
一般的な用途では文字レベルでしか判断しないからな

irb> (3.2-2.0).to_s == 1.2.to_s
true

332:デフォルトの名無しさん
09/01/10 20:29:17
なぜ文字列にして比較を??
数値の比較の話じゃなかったの?

333:デフォルトの名無しさん
09/01/10 20:59:37
>>332
文字列は

てか浮動小数点の指数の基数って
初心者の頃はずっと10なんだと思ってた。
で、なんで誤差が発生するんだとさんざん悩んでみたり
今からしたら俺アホかと




334:デフォルトの名無しさん
09/01/10 21:02:00
しまったメインの話題を途中やめにしてた

数値を文字列に変換する過程である程度の誤差を丸めてくれるなら、
>>329みたいな過程を記述する必要がないってこと

たとえruby内で記録されている値が
1.19999999999 であっても
1.20000000001 であっても
表示するときは最下位を丸めて 1.2 になると。

浮動小数点はちょっとわかりにくいからwikipediaで調べてみそ
URLリンク(ja.wikipedia.org)浮動小数点数

335:デフォルトの名無しさん
09/01/10 21:05:56
irb> (3.2 - 2.0) -1.2 < Float::EPSILON
false
これが true になるような左辺ってあるんだろうか

336:デフォルトの名無しさん
09/01/10 21:09:41
左辺が絶対値ってことだと思うが左辺の方が小さかったらEPSILONの意味がないな


337:デフォルトの名無しさん
09/01/10 21:10:10
0では?

338:デフォルトの名無しさん
09/01/10 21:11:50
nil?

339:デフォルトの名無しさん
09/01/10 21:19:19
URLリンク(www.google.co.jp)

ちょびっと逆転してる

340:デフォルトの名無しさん
09/01/10 21:20:10
URLリンク(www.google.co.jp)

間違えたこっちだった

341:デフォルトの名無しさん
09/01/10 21:27:17
>>332
目に見える範囲の小数が等しいかどうかを調べるだけなら
これが「我々がアタマの中で考えてる」処理に一番近い

どちらが大きいかということが必要な場合はあまり(あるいは全く)使えないので用途に注意

342:デフォルトの名無しさん
09/01/10 21:32:43
>>335
irb> (5.5 - 2.25) - 3.25 < Float::EPSILON
=> true

343:デフォルトの名無しさん
09/01/10 21:40:17
>>326
<=にしたらtrueになった

irb> (3.2 - 2.0) -1.2 <= Float::EPSILON
true

344:デフォルトの名無しさん
09/01/10 21:41:18
>>342
それは単に 0.0 なのでは
0.5 も 0.25 も割り切れてるもの

345:デフォルトの名無しさん
09/01/10 22:25:21
Float::EPSILON < Float::EPSILON
false

Float::EPSILON <= Float::EPSILON
true

0.0 < Float::EPSILON
true

って話?


346:デフォルトの名無しさん
09/01/10 22:27:51
Float::EPSILON とは <= で比較するのが正しいのかな


347:デフォルトの名無しさん
09/01/10 22:30:50
A <= B と A < B || A == B の動作違うのってまずくね

348:デフォルトの名無しさん
09/01/10 23:00:14
rubyってDLL作れる?

rubyで作ったプログラムをVBAやC#みたいな他ので使いまわせるようにしようと思ったら
どういう形式がいい?

349:デフォルトの名無しさん
09/01/10 23:05:35
>> 336
マシンイプシロン Float::EPSILON は
1.0 + Float::EPSILON != 1.0
になる最小の数って意味だから違う。

IEEE754 の浮動小数点表現では、32 ビットの単精度でも指数部は 8 bits、仮数部 23 bit あるから
EPSILON はせいぜい 2.0**(-23) 程度

>> Float::EPSILON + 1.0 == 1.0
=> false
>> Float::EPSILON/2 + 1.0 == 1.0
=> true
>> 1e-20 < Float::EPSILON
=> true

だから、ちゃんと比較するなら絶対値で割ってから比較するべき
abs((a-b)/b) < Float::EPSILON
とか。b < Float::EPSILON のときの処理も必要だけど。



350:デフォルトの名無しさん
09/01/10 23:23:19
1.0 + Float::HOGE == 1.0
になる最大の値 HOGE のことを何と言いますか

351:デフォルトの名無しさん
09/01/10 23:25:12
マシンウプシロン

352:デフォルトの名無しさん
09/01/10 23:29:49
Delphiだと引数にEpsilonを指定できる浮動小数用の比較関数(SameValueだっけか)が
あるんだけど、Rubyにはないのん?

いちいち絶対値とってそれがEpsilon以下って書かなきゃならない?
組み込みかライブラリであれば教えて頼む

353:デフォルトの名無しさん
09/01/10 23:32:30
URLリンク(i.loveruby.net)

354:デフォルトの名無しさん
09/01/11 00:00:41
Ruby Cookbookに載っているコード

class Float
def approx(other, relative_epsilon=Float::EPSILON, epsilon=Float::EPSILON)
difference = other - self
return true if difference.abs <= epsilon
relative_error = (difference / (self > other ? self : other)).abs
return relative_error <= relative_epsilon
end
end

100.2.approx(100.1 + 0.1) # => true
10e10.approx(10e10+1e-5) # => true
100.0.approx(100+1e-5) # => false

355:デフォルトの名無しさん
09/01/11 00:04:56
浮動小数点を比較しなきゃ逝けない用途って何?
コンピュータに向いてない作業の一つだな。

356:デフォルトの名無しさん
09/01/11 00:14:26
シミュレーション?

357:デフォルトの名無しさん
09/01/11 00:27:31
RubyでGUIアプリケーションは作成可能でしょうか?
友人からは、GUIアプリケーションは
VC++、VBとかじゃないと無理と聞いたのですが・・・

358:デフォルトの名無しさん
09/01/11 00:37:12
>>340
日本ではまだまだ遠いな
URLリンク(www.google.co.jp)

359:デフォルトの名無しさん
09/01/11 00:37:34
>>354
self と other を比較する前に絶対値とらないと駄目なんじゃ。

360:デフォルトの名無しさん
09/01/11 00:38:08
def check(name)
/name/ =~ "hiroyuki"
以下略

で/name/ をnameでマッチさせるのではなく引数の値を使うにはどうすればいいでしょうか?


361:デフォルトの名無しさん
09/01/11 00:50:37
>>357
スレリンク(tech板:302-312番)

362:デフォルトの名無しさん
09/01/11 01:08:45
ここまでBigDecimalへの言及無し。
URLリンク(www.ruby-lang.org)

irb> require 'bigdecimal'
=> true
irb> BigDecimal.new("3.2") - BigDecimal.new("2.0") == BigDecimal.new("1.2")
=> true


363:デフォルトの名無しさん
09/01/11 01:11:56
浮動小数点数の比較の話をしてるんだからBigDecimalの出る幕は無いだろ

364:デフォルトの名無しさん
09/01/11 01:20:00
>>354
サンクス。組み込みではないっつーことか。

>>355
まーゲーム作るときとかちょっとした数値計算、
後ユニットテスト書くときなんかにはいるけど、
確かに最後の例以外Rubyには不適だかなあ

365:デフォルトの名無しさん
09/01/11 01:21:22
>>360
def check(name)
name =~ "horioyuki"

で、
check呼ぶ時に正規表現リテラル渡せばよいのでは?
check(/.+oyu.+/)

366:デフォルトの名無しさん
09/01/11 01:26:58
ちょっとお聞きしたいのですが、
wikiとかの表示によくあるプログラムの実行時間を
自分のスクリプトで表示したいのですが、
簡単にmsecの実行時間を測る方法はないでしょうか?

スクリプトの終了前に
puts Process.times.to_yaml
とかやってみたんですが、表示がさっぱり?です。
utimeとstime を足したものが実行時間なのかな?

367:デフォルトの名無しさん
09/01/11 01:28:51
あれは単にWikiテキストの処理開始時と
処理終了時の差を取っただけなんじゃないか?

368:デフォルトの名無しさん
09/01/11 01:31:14
>>366
基本的な計測はbenchmarkライブラリ(標準添付)でOK
あと、「Ruby プロファイラ」で検索すると色々出てくる

369:デフォルトの名無しさん
09/01/11 01:33:47
>>363
おおもとは、>>323
> (3.2-2.0) == 1.2 がfalseの理由を教えて下さい。
だから、小数を含む数の扱いについて一通り言及すべきだと思うんだ。

370:デフォルトの名無しさん
09/01/11 01:40:08
>>365
nameに渡す文字列はARGV.shiftで受け取ったものなんですよ・・・。
グローバル変数にすればよかったりしますかね・・・。


371:370
09/01/11 01:54:40
グローバルしてみましたが結局 =~ の 左辺,右辺に変数がきてもいいのでしょうか?

372:デフォルトの名無しさん
09/01/11 02:10:29
def check(name)
/#{name}/ =~ "hiroyuki"
end

p check("hiroyuki") # => 0

373:370
09/01/11 02:17:30
>>372
ありがとうございました!!!!!!!!!うまくいきました。
=~の左辺の#{name}っていうのは変数としてみるってことですか?

374:デフォルトの名無しさん
09/01/11 02:18:34
>>368
サンクス
benchmarkクラス使ってみる

375:デフォルトの名無しさん
09/01/11 02:28:14
>>373
まあそんな感じだ
「式展開」について勉強すればよくわかる
URLリンク(www.ruby-lang.org)

376:デフォルトの名無しさん
09/01/11 02:28:22
変な質問なうえにおそらく出来ないんだろうけど一縷の望みをかけて質問
メソッドの入れ子って出来ますか?
たとえば、
def method1
 処理
 def method2
  処理
 end
end
としたら、method1だけ呼びだしたらmethod1の処理のみで終了。
method1.method2みたいに呼びだしたら両方の処理を実行、みたいな。

この書き方だと
URLリンク(www.ruby-lang.org)
みたいになっちゃうから無理なのは明白だけど・・・

method1に引数を与えてmethod2の処理をif文でくくって引数の値で処理するか否かを
決めるって方法もあるけど、見た目的にごちゃごちゃするから嫌というか・・・

なんかいい方法あったら教えてください。

377:370
09/01/11 02:31:30
>>375
ありがとございます。
昨日Rubyはじめたばっかりでいろんなサイトからつぎはぎで趣味プログラムしてたんで
リファレンスマニュアルというのをみてませんでした。まず、一読してみます!

378:デフォルトの名無しさん
09/01/11 02:32:20
>>376
無理
素直にモジュール使って、Mod1.method1としなされ

379:デフォルトの名無しさん
09/01/11 02:34:20
>>376
それではmethod2を定義しているだけで,method2を呼び出してはいない

def method1
puts "call method1"
def method2
puts "call method2"
end
method2
end

380:379
09/01/11 02:35:59
ごめんはやとちりした

381:376
09/01/11 02:45:25
>>378
無理かぁ・・・ありがと
Mo1.method1・・・method2はどこへ?
実はmethod1の処理がイテレータを含んでいて、変数を一周するたびに初期化して使うんだけど、
場合によっては初期化する前にmethod2の処理でその変数を使いたいから↑のようなことに・・・
モジュールだとダメそうなのでおとなしく引数と条件文で動かします。。

>>380
ドンマイw

382:デフォルトの名無しさん
09/01/11 02:47:47
>>376
def method1
 処理1
 Proc.new do
  処理2
 end
end

method1
method1.call

近いことを無理やりやろうとすれば、
こんなのは思いつくが、普通はやらない
端的に言って不気味すぎる

383:デフォルトの名無しさん
09/01/11 03:00:57
いやいや、初心者のこんな突拍子もないアイデアから、すごいアイデアがでたりする。
1000個に1個ぐらい。
だから初心者は1000個のアイデアを出すんだ!

384:デフォルトの名無しさん
09/01/11 03:14:53
callが気に食わない

def method1
 処理1
 pr = Proc.new do
  処理2
 end
 pr.instance_eval "alias :method2 :call"
 pr
end

method1
method1.method2



385:376
09/01/11 03:22:55
>>382
おお、できるんだ!?
ありがと〜

ぶ、不気味なのか・・・

>>384
求めていたものが完璧に・・・お見事です。

お二方、ありがとうございます。

386:デフォルトの名無しさん
09/01/11 03:40:36
開発環境なに使ってますか?
自分はLinuxでは基本Netbeansで、ちょっとした修正はemacsで。
eclipseとかもあるけどどんな開発環境使っているか気になったので・・・。

387:デフォルトの名無しさん
09/01/11 03:59:55
vi

388:デフォルトの名無しさん
09/01/11 04:07:59
今時 vi はないだろう vi は。
俺は断然 vim だな。

389:デフォルトの名無しさん
09/01/11 04:10:20
メモ帳

390:デフォルトの名無しさん
09/01/11 04:14:26
俺はEclipseにRubyプラグイン
editer使ってる人は補完なくて大丈夫なの?

391:デフォルトの名無しさん
09/01/11 04:25:12
いや、もちろんエディタにも補完はあるよ
VimのRubyに対する補完はかなり強力。それ以上に操作性が好きで使っているけど

392:デフォルトの名無しさん
09/01/11 04:29:52
ずっとEmacs
ちなみにMatzもEmacs

まあ人に何が良いか,って聞かれたらNetbeans勧めるかもな

393:デフォルトの名無しさん
09/01/11 04:30:07
viの学習曲線の最初でくじけたのでemacsで

394:デフォルトの名無しさん
09/01/11 07:48:14
俺は断然 vi

395:デフォルトの名無しさん
09/01/11 08:18:34
あんな日本語も通らない化石エディタよく使う気になるな

396:デフォルトの名無しさん
09/01/11 08:56:02
個人用途なので基本的にはどうでもいいんですが気になるので質問します

HTMLとかから正規表現とかでデータ抜き出して、データ保管クラスのインスタンス変数に保管します。
initialize の時点でたくさんのインスタンス変数に値を入れたいんですが、

def initialize(params, data)
@a = params[:a]
@b = params[:b]
@c, @d, @e = parse_in_init(data)
end



def initialize(params, data)
@a = params[:a]
@b = params[:b]
make_c_d_e(data)
end
def make_c_d_e(data)
@c = someprocess1(data)
@d = someprocess2(data)
@e = someprocess3(data)
end

って、どっちが見通しいいもんでしょう?
ちょっと面倒でも明示的に代入の形を見せる前者のほうが初期化プロセスっぽく見えて好ましい?

397:デフォルトの名無しさん
09/01/11 09:03:43
>>396
YES

ただ、make_c_d_e みたいなそれっぽいのが initialize の直後に定義されてれば
「あーinitializeの続きかー」と思って読むから別に気にはしない
Util.parsehtml とかどっか遠いとこに定義されてるクラスメソッドがinitializeで呼ばれてるとやる気なくす

398:デフォルトの名無しさん
09/01/11 09:38:12
def initialize(params, data)
@params = params
@data = parse_in_init(data)
end


399:デフォルトの名無しさん
09/01/11 09:43:49
>>398
なにそのユーザー丸投げルーチン

いちいちハッシュの引数で参照するのがめんどいまたは間違いやすいからインスタンス変数にしてんじゃねの

400:デフォルトの名無しさん
09/01/11 09:45:50
>>399
@params を書き込み可能にしておけば外部からデータ追加するのも楽々だぜ?

401:デフォルトの名無しさん
09/01/11 10:09:51
>>400
外部からデータを追加する必要があって、なおかつその方法しか考えられないようなときなら一理あるけど
そうでなければ、ここでハッシュを使うのは問題が大きすぎる

402:デフォルトの名無しさん
09/01/11 10:15:06
Javascriptだと
a={'hoge': huga, 'hage': fuga};
a.hoge
a.hage
にアクセス出来ていいんだよね


403:デフォルトの名無しさん
09/01/11 10:17:30
Ruby でもやろうと思えば出来るっしょ

404:デフォルトの名無しさん
09/01/11 10:17:39
アクセサ作ればいい
めんどくさいけど

405:デフォルトの名無しさん
09/01/11 10:24:49
StructA = Struct.new(:hoge, :hage)
a = StructA.new('huga', 'huga')
p a.hoge
p a[:hoge]
p a[0]

"huga"
"huga"
"huga"
オーイエー

>>402
どっかのgemにそんなのあったな



406:デフォルトの名無しさん
09/01/11 10:44:53
来たなStruct厨
総員迎撃準備

407:デフォルトの名無しさん
09/01/11 10:51:36
Structって嫌われてんの?

408:デフォルトの名無しさん
09/01/11 11:01:58
Struct.newにJSONぶっこめる?

409:デフォルトの名無しさん
09/01/11 11:09:18
>>407
他言語から来た人がArrayやHashを使い込むことなく安易に使うものの代表だから、嫌がられてはいるね
まずはArrayとHashを使い倒してからにして欲しいなと思う所存

>>408
分けてくれ

410:デフォルトの名無しさん
09/01/11 11:38:19
>>395
通るぞ?@Solaris10

411:デフォルトの名無しさん
09/01/11 11:39:19
URLリンク(www.ruby-lang.org)
ここの検索こわれてるみたいなんだけどいつ治りますか

412:デフォルトの名無しさん
09/01/11 11:41:36
>>410
動物は一度鎖に繋がれてしまうと鎖が杭から外れていても
逃げられないと思い込んでしまうものなのです

413:デフォルトの名無しさん
09/01/11 11:42:25
>>410
それは日本語パッチ当たってるんじゃね

てか、「お前らが使ってるのは vi じゃなくて vi クローンのどれかまたは vim だろ」というツッコミを
誰かがしないと終わらんな

414:デフォルトの名無しさん
09/01/11 12:25:43
>>413
OS標準。つか、Solarisは遠い昔から、日本語localeが入ってりゃちゃんと日本語使える。(viに限らず。そのせいで痛い目にあうこともまれにあるが)

415:デフォルトの名無しさん
09/01/11 13:15:48
emacs入ってない環境はたくさんあるけど、viが無い環境は稀。
まあ開発環境は何でも好きなの自分で入れろよと思うけどな。

416:デフォルトの名無しさん
09/01/11 14:49:23
だからメモ帳最強って何度言わせるんだよ!!

417:デフォルトの名無しさん
09/01/11 14:55:18
Windows環境でJmEditorとRDEとNotepad++を使い分ける俺に隙はなかった

418:デフォルトの名無しさん
09/01/11 15:08:19
>>415のようなことを稀に聞くが、vi でファイル編集できない人間などおらん

419:デフォルトの名無しさん
09/01/11 15:21:16
Windows環境で、class Hoge(もしくは、def hoge、each do |x|)と打ってリターンをすると、
以下のように、endを付けインデントした位置にカーソルを持ってくるエディタはありますか?

class Hoge[Retrun]

  ↓

class A
 |
end

420:デフォルトの名無しさん
09/01/11 15:25:32
Meadow(or Xyzzy)を入れて自分で作れってのはなし?

421:デフォルトの名無しさん
09/01/11 15:25:41
>>419
xyzzyをカスタマイズ

422:デフォルトの名無しさん
09/01/11 15:46:14
>>420-421
自分でカスタマイズする技量がないのであきらめます

423:デフォルトの名無しさん
09/01/11 15:53:58
Solarisのviはずいぶん昔から日本語通るぞ。SunOS4は忘れたが。
ただ、Localeに縛られるので、Shift_JISのファイルなんかが来ちゃうと面倒。
LANG=とsettermでなんとかなった気もするけど、もう忘れた。

って無駄レスだな。

424:デフォルトの名無しさん
09/01/11 16:08:58
以下、Personクラスの配列membersを、名前→性の順でソートすると、名前のソートがくずれます。
くずれないようにソートするにはどうすればいいのでしょうか?

class Person
attr_reader :name, :sex
def initialize(name, sex)
@name, @sex = name, sex
end

def show
[@name, @sex]
end
end

members = []
members.push Person.new("sasaki", "male")
members.push Person.new("kato", "famale")
members.push Person.new("fukada", "male")
members.push Person.new("akai", "female")

p members.map {|p| p.show }
#=> [["sasaki", "male"], ["kato", "famale"], ["fukada", "male"], ["akai", "female"]]

p members.sort_by {|p| p.name}.sort_by {|p| p.sex}.map {|p| p.show }
#=> [["kato", "famale"], ["akai", "female"], ["fukada", "male"], ["sasaki", "male"]]
#=> 望ましい結果 [["akai", "female"], ["kato", "famale"], ["fukada", "male"], ["sasaki", "male"]]

425:デフォルトの名無しさん
09/01/11 16:12:32
members.sort_by {|p| [p.name, p.sex]}
じゃね?

426:デフォルトの名無しさん
09/01/11 16:21:48
配列の比較に関してはドキュメントが弱いんだよね

[1,2,2] < [1,2,3]
[1,1,2] < [1,2,2]
[1,4,4] < [2,1,1]

x でソートしたあとに y でもソートしたいという場合は、Rubyでは
data.sort_by{|a| [a.x, a.y]}
と書く

427:デフォルトの名無しさん
09/01/11 16:28:14
>>425
それだと、

[["akai", "female"], ["fukada", "male"], ["kato", "famale"], ["sasaki", "male"]]

となり、性のソートがくずれてしまいました。

428:デフォルトの名無しさん
09/01/11 16:55:33
>>427
どうソートしたいのか考えれ
崩れるも何も、ソートする順番の問題に過ぎない
class Person
attr_reader :name, :sex
def initialize(name, sex)
@name, @sex = name, sex
end
def show
[@name, @sex]
end
def Person.sort_sex(sex)
if sex=='male' then 1 else -1 end
end
end

members = []
members.push Person.new("sasaki", "male")
members.push Person.new("kato", "famale")
members.push Person.new("fukada", "male")
members.push Person.new("akai", "female")

members.sort_by {|p| [Person.sort_sex(p.sex), p.name]}


429:デフォルトの名無しさん
09/01/11 17:09:06
>>428
うまくいきました。
サンクス。

430:デフォルトの名無しさん
09/01/11 18:13:53
URLリンク(diaspar.jp)

431:デフォルトの名無しさん
09/01/11 19:37:19
Hpricot::Elem.new(Hpricot::STag.new('form'))
をノコギリで書き換えようと思い
Nokogiri::XML::Node.new('form')としたら
ArgumentError: wrong number of arguments (1 for 2)
のエラーが出ました。
RDocには,new(name)、と引数は一つなのですが,どうしてでしょう。このnameはStringで与えてもだめ?


432:デフォルトの名無しさん
09/01/11 19:53:44
>>431
URLリンク(nokogiri.rubyforge.org)
第2引数はNokogiri::XML::Documentっぽい
ドキュメントが間違ってるんだろうな

433:デフォルトの名無しさん
09/01/11 22:53:05
>>419
Aptanaとか、EclipseベースのIDEならいけるんじゃないかな。

434:デフォルトの名無しさん
09/01/11 23:17:19
>>419
どうせEmacs使わんだろうけどコメントしとく

emacsのruby-electric-modeだと
defスペース
と打った時点でendが補完される

その後 ruby-mode の ruby-reindent-then-newline-and-indent を使って改行すればインデントも同時にされる

この程度ならEmacsユーザならごく当たり前のこと
というかRuby用の動作があるエディタならみんな似たようなことできるでしょ?

435:デフォルトの名無しさん
09/01/12 00:38:32
>>419
Vim の場合

runtime/ftplugin/ruby.vim
runtime/indent/ruby.vim
を調べてみたけど、そういうのなかった。

%HOME%/vimfiles/ftplugin/ruby.vim か
$HOME/.vim/ftplugin/ruby.vim に、
以下を入れておけば、OK

inoreab <buffer> module module<cr>end<up><end>
inoreab <buffer> class class<cr>end<up><end>
inoreab <buffer> def def<cr>end<up><end>
inoreab <buffer> do do<cr>end<up><end>
inoreab <buffer> case case<cr>end<up><end>
inoreab <buffer> begin begin<cr>end<up><end>

436:デフォルトの名無しさん
09/01/12 01:06:25
hash = {}
[:a, :b, :c].each {|k| hash[k] = @hash[k] }
という処理をもっと簡単に書く方法があれば教えてください。


437:デフォルトの名無しさん
09/01/12 01:14:36
hash = @hash.dup()

438:デフォルトの名無しさん
09/01/12 01:45:16
>>435
endwise.vim というプラグインがある
URLリンク(www.vim.org)

439:デフォルトの名無しさん
09/01/12 03:17:20
>>419
EclipseかNetBeansでsnipet使うのはどうだろうか?
リターンでは無理だが別のキーで、コードの展開はできるぞ

440:デフォルトの名無しさん
09/01/12 04:15:34
>>436
hash.merge!(@hash)

441:デフォルトの名無しさん
09/01/12 07:19:55
>>436
それが一番短い部類
「○○というキーを持つペアを [k, v] の配列で返す」みたいなメソッドって標準には無いんだよね

hash = Hash[@hash.find{|k, v| [:a, :b, :c].include?(k)}]


442:デフォルトの名無しさん
09/01/12 07:22:22
書いててなんか短いなとは思ったんだ

hash = Hash[*@hash.find{|k, v| [:a, :b, :c].include?(k)}.flatten]

うーん

443:デフォルトの名無しさん
09/01/12 07:31:20
hash という変数名は全てのオブジェクトに存在する hash っていうメソッド名と被るから、
特に拘りがあるのでなければ避けておいたほうが吉


プログラム(1行のみ):

p hash

結果:

22412530


適当なハッシュの変数名は h が人気
h と書かれていれば、ほぼ全員がハッシュかなと推測してくれる

444:デフォルトの名無しさん
09/01/12 09:09:34
遅延評価はあるから
バックくおーとみたいなのはできるかもしれない

445:デフォルトの名無しさん
09/01/12 10:04:50
ActiveRecordでsqlite3のDEFAULT CURRENT_DATEに
相当するのは何?
今,record.date = Date::todayみたいにいちいちやってるのだけど,
なんだか,もっとスマートな方法がある気がするので,質問

446:デフォルトの名無しさん
09/01/12 11:02:22
質問です。
スキルアップのためにRubyでビジネス向けシステムを作れという課題が出ました。
勤怠管理システムのような物を作ろうかなと考えています。
私の言語スキルはCのみでオブジェクト言語は概念しかわかりません。
Cは基本情報合格しました。
とりあえずRuby1.8をインストールしようとしましたが失敗しました。
(コンソール画面から先に進めません)

こんな初心者にお勧めのRuby書籍を教えてください。
前述の通り、インストールから失敗してしまいましたので
インストール方法も解説している物が欲しいです。
最終的に簡単なシステムを作らなければいけないので
入門系と実践系の物をお勧めいただければと思います。
どうかよろしくお願いします。

447:デフォルトの名無しさん
09/01/12 11:08:49
>>446
何をもって「失敗した」と言ってるの?
Rubyインストールしただけだったら別に開発環境が入るわけじゃないぞ。
あと使ってるOSは?

448:デフォルトの名無しさん
09/01/12 11:14:05
Ruby学習者に必要なもの(ある程度持っていると暗黙のうちに仮定されているもの)

 ・ OSへのある程度の習熟
 ・ コマンドライン操作
 ・ HTTPとウェブに関する基礎知識
 ・ データベース利用に関する基礎知識(Rails限定)
 ・ PerlかUNIX Cの教科書的な基礎知識

449:デフォルトの名無しさん
09/01/12 11:19:00
>>448
…持ってなくてもいいが、まあ、持ってないとひたすらに遠回りではあるな
歩行練習と自転車乗る練習を同時にするようなもんで、学習量と学習時間が倍くらいになる

>>446
本当にCで自分用プログラム作れるだけの技量があるか怪しいと思うんだが、コマンドライン操作はできるかい

450:デフォルトの名無しさん
09/01/12 11:22:55
できるだろ
Cができるってことはmakeとかも使えるってことなんだから

451:デフォルトの名無しさん
09/01/12 12:13:45
>私の言語スキルはCのみでオブジェクト言語は概念しかわかりません。
>Cは基本情報合格しました。
Cができるなんてどこにも書いてないぞ


452:デフォルトの名無しさん
09/01/12 12:16:51
Cが出来てRUbyで着ない香具師なんていない
初心者詐称
釣り決定

453:デフォルトの名無しさん
09/01/12 12:19:53
> こんな初心者にお勧めのRuby書籍を教えてください。
>>2

454:デフォルトの名無しさん
09/01/12 12:21:46
>>446
よろしければその会社でのあなたの給料と実質労働時間を教えてください

455:デフォルトの名無しさん
09/01/12 12:23:32
>スキルアップのためにRubyでビジネス向けシステムを作れという課題が出ました。
会社員だなんてどこにも書いてないぞ

456:デフォルトの名無しさん
09/01/12 12:26:23
インストールも出来ない初心者向きの本を勧めれば回答終了じゃないのか、これ。

457:446
09/01/12 12:35:30
早いお答えありがとうございます。
こちらの回答が遅くて申し訳ありません。

下で個別にもレスしますがCの実践的な開発経験はありません。
資格試験(基本情報)で問題として出されるレベルのプログラムを
一人で完成させる事はできます。
わかりにくいようでしたらプログラムの基礎の基礎(ループやメモリ)だけは
わかるズブの素人としてご指導頂ければ、と思います。

>>447
RailsをインストールするためにDOS画面にコマンドを打ち込んでも
NoFound〜的文章が表示されて先に進みません。
今、手元にインストールしようとしたマシンがないので
正確なエラー文はわかりません。
インストールガイドはネット上で見つけた動画を参考にしたのですが
これもインストールするパソコンにブックマークしていたので
今この場ではわかりません。

わからない事が多くてすいません。
「これが必要」という情報があれば調べてきます。

OSはWindowsVistaです。

458:デフォルトの名無しさん
09/01/12 12:36:15
オライリーの「初めてのRuby」。まじおすすめ。
Railsやるならなんだろう?

459:446
09/01/12 12:36:27
>>448
・ OSへのある程度の習熟
ある程度、がどのくらいかわからないのですがマニュアルを見て
再インストールはできました

・ コマンドライン操作
ほとんど使用したことがありません。
試験勉強のためにログオンやログオフ、プリンタの操作を数回だけ。

・ HTTPとウェブに関する基礎知識
基礎知識なら何とか…
ウェブページが表示される仕組み程度はわかります。

・ データベース利用に関する基礎知識(Rails限定)
データベースの概念やSQL文までは一通りわかります。

>>449
図々しいのですが、持っていない人間が効率的に学習できる順番など
もしありましたら教えていただけませんか…?

>コマンドライン操作
ほとんど使用したことがありません。
試験勉強のためにコマンドライン一覧のようなマニュアルを見てやった時は
とりあえずできました。

自分用プログラムを作ったことはありません。

・ PerlかUNIX Cの教科書的な基礎知識
Perl・UNIXはわかりません。
Cの教科書的なことならわかります。(解説書も持っています)


460:446
09/01/12 12:50:45
>>450
Cの知識はありますが実践経験はありません。
makeのやり方も解説を読む限りでは理解できたのですが
そこまで辿り着けませんでした…。

>>451
試験に合格できただけなのでたぶんできないと思います。

>>452
Cもできないようです…

>>453
入門・はじめて〜と付いている物が多すぎて…
一番最初に読むと良い物を教えていただけないでしょうか。
(できればインストール法が詳細に載っているとありがたい)

461:デフォルトの名無しさん
09/01/12 12:51:17
>RailsをインストールするためにDOS画面にコマンドを打ち込んでも
>NoFound〜的文章が表示されて先に進みません。
>今、手元にインストールしようとしたマシンがないので
>正確なエラー文はわかりません。

インストールしようとしたマシンが使える環境になったらまたおいで


462:446
09/01/12 12:51:32
>>454
>>455
会社員ですがプログラミング職ではありません。
ずっと経理でやってきました。
自主的に基本情報を取得したところ社長がそれを聞きつけて

「手当て出すからもっと本格的に勉強しろ。
今度経理システムの作成をソフトウェア会社に依頼するから
それまでに一通りわかるようになって開発に加われ。
依頼予定の会社はRuby使うって言ってるからRuby勉強しろ


要約するとこんな感じです。
「とりあえず実際に使える物を作ったら覚えるだろ」という事らしい。

29歳の高卒女。情報系の学歴はなし。
実質労働時間は9時間くらいかな。
今までの仕事(経理)をする時間を引いたら毎日3時間程度。
でも来週で引き継ぎ終わるから、そしたら9時間Ruby学習に充てていい。

>>456
そういう物を教えていただけるとありがたいです。

463:446
09/01/12 13:01:04
>458
ありがとうございます。
レビューなどを見ると入門より少し難しいようなのでこれを一冊と
もっと基礎的な物がないか捜してみようと思います。

464:デフォルトの名無しさん
09/01/12 13:19:44
>>462
それはチャンスって言えばチャンスだね。でも、フルタイム学習に
あてていいとなると、失敗した時のリスクも結構大きいかも。
研修参加も可能かどうか相談したほうがいい。

環境のインストールから、ということであればまずはこのへんの本でも。
URLリンク(www.amazon.co.jp)

ただし、環境のインストールについては過剰に詳しく書いてあるけど、
言語要素についてはあまりにさらっとしてるし本質的な理解には至らない
かもしれないので、これでざっと環境を作ってサンプルとか動かして
みたら、さっさと他の方法もあたったほうがいいと思う。

あと、ギブアップするなら傷が深くならないうちにお早めに。

465:デフォルトの名無しさん
09/01/12 13:33:43
>>463
だから >>453 も言ってるが >>2 を見れ

しかし、プログラミングもできないのに SI 名乗る人たちがいるのに、
>>462 のような理由でプログラミングの勉強をしろとは、
社長はなかなかの大人物。(か、ちょっと勘違いしちゃってるのか、分からんが)
先は途方も無く長いけどがんがって下さい。

466:デフォルトの名無しさん
09/01/12 14:13:30
断ったほうがいいと思う

467:デフォルトの名無しさん
09/01/12 14:16:57
良いチャンスだとは思うが、
ちゃんとした研修を受けれないなら断るのも手か。

468:デフォルトの名無しさん
09/01/12 14:28:34
>>466
だな
自社のシステムを学習者に任せるとか根本的にありえない
こっちから人出せば開発依頼費が浮くとか勘違いしてるだけに過ぎない

469:デフォルトの名無しさん
09/01/12 14:38:27
>>468
馬鹿発見
こういうのは社長がシステム会社側に余分に数百万金積んでんの

470:デフォルトの名無しさん
09/01/12 14:45:08
なにそのお妾さんシステム

471:446
09/01/12 14:47:06
いろいろアドバイスありがとうございました。
とりあえず今から都市部の大きな本屋に行って自分に合いそうな
初心者向け書籍を探してみようと思います。
あとはみなさんのアドバイス頂いた物をネット注文予定。

最後の方、個別にお礼をレスできなくてすいません。

うちは小さな会社で社長もワンマンなので残念ながら研修や断るという選択肢はありません。
社長が大昔に配送業務を外部委託したときに超ぼったくりされた苦い思い出から
外部と提携する時は必ず社員も加える事になっています。
もし私が断ったらエクセルワードくらいしか使えない経理部長がやらされそう…
一応期間的には半年くらいは貰えるようですが、厳しい道のようですので
最悪の場合は転職の覚悟もしておくことにしますw

丁寧にいろいろありがとうございました!


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

5504日前に更新/246 KB
担当:undef