トップページ⇒tech
984コメント268KB

Rubyについて Part47

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2012/01/16(月) 13:15:31.00
プログラミング言語Rubyについての、初心者向けスレです。質問・要望・雑談などどうぞ。
質問するときは、OSやRubyのバージョン、エラーメッセージを書いたほうがいいお

前スレ
Ruby 初心者スレッド Part 46
http://hibari.2ch.net/test/read.cgi/tech/1317790320/


るりまサーチ (リファレンス検索)
http://rurema.clear-code.com/

Rubyist Magazine - るびま
http://jp.rubyist.net/magazine/

逆引きRuby
http://www.namaraii.com/rubytips/
0405デフォルトの名無しさん2012/06/01(金) 10:06:33.96
>>403
みんながみんな、ちょろっと触ってみただけで「まあ有名になったらまたやってみよう」って放置するから、どれも伸びないんだよね
中途半端にJavaScriptの有名度に「依存」してるから、誰もその言語で何も作らず、結果としてまったく普及しない

開発元が死ぬ気で普及させないとダメ
0406デフォルトの名無しさん2012/06/01(金) 10:12:59.61
数大杉だよな
0407デフォルトの名無しさん2012/06/01(金) 10:18:04.94
うにょんうにょん内容が動く公式ページがその言語で書かれてます、くらいの勢いがないと…
0408デフォルトの名無しさん2012/06/01(金) 10:22:26.64
MSとかAppleとかOracleとかDeNAと言った大企業が作ってる言語って
他の凡百の言語とは安心感が違うよな。
0409デフォルトの名無しさん2012/06/01(金) 10:54:34.79
AppleとかOracleってなんか言語作ったっけ。
Javaは買収でしょ。Obj-Cは別にApple製じゃないし。HyperCardのことか?
C#の安心感は認める。
0410デフォルトの名無しさん2012/06/01(金) 11:17:55.44
AppleScriptのことだろ
0411デフォルトの名無しさん2012/06/01(金) 11:40:55.87
大企業が作ってる言語ってPL/Iのことか?
0412デフォルトの名無しさん2012/06/01(金) 11:53:34.30
>>408
なにかひとつ仲間はずれがいるんだが
0413デフォルトの名無しさん2012/06/01(金) 12:06:15.94
住み分けの世界が違うからRubyオワタとは全然関係ないけど
触ってみた感じJSXはそうおかしなもんでもなかったよ。CoffeScriptなんかより全然馴染める。
0414デフォルトの名無しさん2012/06/01(金) 12:26:57.08
そうか?ルビイストにはCoffeeやDartのほうが馴染むと思うけどな
0415デフォルトの名無しさん2012/06/01(金) 12:31:13.41
Dartって今どうなってるの・・・?
Goもどうなってるんだろう
0416デフォルトの名無しさん2012/06/01(金) 12:40:50.41
JSXってネーミングがダサイというかセンスねーっていうか…
ところでGoはこないだ1.0になってた。
0417デフォルトの名無しさん2012/06/01(金) 12:43:40.94
>>415
新言語が登場してから流行るまで10年ぐらいはかかるから
気長に見ないと仕方ないと思う
0418デフォルトの名無しさん2012/06/01(金) 12:48:31.12
母音がない言語は読みづらいぜ
0419デフォルトの名無しさん2012/06/01(金) 13:43:42.93
もうSchemeでいいだろ
0420デフォルトの名無しさん2012/06/01(金) 14:19:09.69
いじってると楽しいけど仕事では使いたくない典型言語ですか
0421デフォルトの名無しさん2012/06/01(金) 14:59:46.78
Scheme、Lisp、Prolog、Erlang、Haskell
↑パズル言語だよね。
仕事中にパズルで遊ぶなと言いたい。
0422デフォルトの名無しさん2012/06/01(金) 16:12:11.77
整合性のある成果物を作り上げる仕事が、仕事じゃなくてパズルなら、
整合性のないゴミを作り上げる仕事こそが、真の仕事ということなのかな?
0423デフォルトの名無しさん2012/06/01(金) 16:14:49.51
何飛躍してんだこいつ
0424デフォルトの名無しさん2012/06/01(金) 16:18:27.70
smartな社会を実現するという方向性があるが
合理性や効率やコストを追求すればする程、資本力がある
ところがさらに強くなり、労働者の仕事がなくなっていく。
非効率であるがゆえに仕事がある。TPPもまたしかり。
0425デフォルトの名無しさん2012/06/01(金) 17:09:46.62
(キリッ
0426デフォルトの名無しさん2012/06/01(金) 20:26:49.76
http://jsx.github.com/
0427デフォルトの名無しさん2012/06/01(金) 21:36:29.76
いいかげんウザい
0428デフォルトの名無しさん2012/06/02(土) 00:19:47.85
initializeって鬱の面倒いわ
initで良かったのでやないか
0429デフォルトの名無しさん2012/06/02(土) 00:50:54.47
newじゃだめなんだっけ
何かしらメタメタな都合かね?
0430デフォルトの名無しさん2012/06/02(土) 01:57:31.25
Object#initialize はあくまで生成済みインスタンスの初期化を行うだけ。
生成自体はClass#newの内部で、Class#allocateが行う。
そこに情報を埋め込んでいくのがObject#initialize という役割分担。
0431デフォルトの名無しさん2012/06/02(土) 03:11:56.30
>>428-429
ユーザー側としてはinitやnewという名前のインスタンスメソッドを「作れなく」なるけどそれでもいっすか
…まあ、現時点でもそんな名前のメソッド見ないけど…
0432デフォルトの名無しさん2012/06/02(土) 03:15:37.18
tializeって撃つのが面倒なんだよ
これまでにいったいどれだけの電力を無駄にしてきたことか!
0433デフォルトの名無しさん2012/06/02(土) 03:22:02.89
なんだこれでよかったよ。全く簡単だ。
class Object; def initialize(*p); self.i(*p) end end
0434デフォルトの名無しさん2012/06/02(土) 08:41:46.06
マクロが使えればなあ。
Objectとかに関数定義しちゃうのってたとえ使い捨てでも躊躇してしまう。
0435デフォルトの名無しさん2012/06/02(土) 08:59:16.79
>>434
Procオブジェクトをどうぞ
0436デフォルトの名無しさん2012/06/02(土) 10:29:43.99
>>434
_init_とか書いておいて
それをinitializeに置換するスクリプトでも書いたら
0437デフォルトの名無しさん2012/06/02(土) 10:33:56.26
アルファベット余ってるんだからrubyのコマンドラインオプションでcpp通せるようにすれば全て解決
#ifdefも使えて生産効率上がりまくるな
0438デフォルトの名無しさん2012/06/02(土) 10:42:03.74
Perlにcppを通すコマンドラインオプション(-P)があったはずだが…
と思って久しぶりにperlrun(1)を見てみたが、今はないのね。
0439デフォルトの名無しさん2012/06/02(土) 10:57:49.88
cppはもっと広く使われてもいいよな
0440デフォルトの名無しさん2012/06/02(土) 11:01:04.02
コメントはどうすんだよw
0441デフォルトの名無しさん2012/06/02(土) 11:56:51.89
Perlでcpp使うときは、スクリプトとしてのコメントは
;#
とか書いてた。#が1桁目になければプリプロセッサ指令にはならないので。
0442デフォルトの名無しさん2012/06/02(土) 12:39:50.32
あれ、今のプリプロセッサ指令ってインデントできなかったっけ?
0443デフォルトの名無しさん2012/06/02(土) 13:06:00.50
OSX Lionにて

$ /usr/bin/cpp <<EOF
# define foo 1
 #define bar 2
;#define baz 3
foo; bar; baz;
EOF

は
 #define bar 2
;#define baz 3
1; bar; baz;

になった(展開されたのはfooだけ)

同じものを gcc -E (実体はllvm)に食わせたら bar も 2 に置換された。

0444デフォルトの名無しさん2012/06/02(土) 13:15:11.31
#とdefineの間は空白あってもいいのか。知らんかったな。
0445デフォルトの名無しさん2012/06/02(土) 13:45:05.24
initializeとか長ったらしいのはIDEとか文字補完してくれる環境を使えよ。
ネオコンとか楽だぞ。
0446デフォルトの名無しさん2012/06/02(土) 13:54:30.74
to_sとか短い命名規則を採用してるのになんでinitializeだけ長いのかなと。
0447デフォルトの名無しさん2012/06/02(土) 14:01:46.15
だから>>431が答だって
「予約」されているメソッド名が initialize という誰も使わなさそうな長ったらしいのになるようにわざわざしたんだよ
new でもよかったんだが、それだと new というインスタンスメソッドが def で定義できなくなってしまう
0448デフォルトの名無しさん2012/06/02(土) 14:03:50.00
むしろinitializeとか普通に使いそうではある
0449デフォルトの名無しさん2012/06/02(土) 14:05:02.46
もし変数名aやbが特別な意味を持っているとしたら大変だもんね
0450デフォルトの名無しさん2012/06/02(土) 14:06:54.27
initialize と init と setup が揃ってるクラスは意外とあるんじゃないかと思ってみたりする
0451デフォルトの名無しさん2012/06/02(土) 14:08:13.73
まあ end という名前のメソッドやローカル変数が容易に使用できない時点でアレなんだけど
0452デフォルトの名無しさん2012/06/02(土) 14:12:59.49
classとかもdbのフィールド名なんかには普通に使ったりするもんな
0453デフォルトの名無しさん2012/06/02(土) 14:14:08.16
>>447
initializeってみんな使いまくってるじゃん
みんな使いまくってるメソッドをわざわざ長くしてある意味がわかんねぇよ
という疑問

ってかinitとかnewみたいなインスタンスメソッドを定義するなんておかしいだろw
initなんてインスタンスの状態数が増えだけだし、newって何をnewするんだよw
0454デフォルトの名無しさん2012/06/02(土) 14:16:00.55
initializeが長くなるとinitという下請けメソッドを定義することがちょいちょいあったりして
0455デフォルトの名無しさん2012/06/02(土) 14:22:18.02
>>454
長いから分けるとか初心者みたいな発想じゃないか…
04564432012/06/02(土) 14:23:08.55
gcc --traditional -E だとbarは置換されずに残ったわ。
0457デフォルトの名無しさん2012/06/02(土) 14:32:03.66
initかinitiaizeなんでどうでもええわ
自転車置き場の議論乙!
って言われたらそれまでだけど2ちゃんってそういう場所なんだよね?
twitterでmatzとかに聞いてもめんどくさそうにされそうだしなw
0458デフォルトの名無しさん2012/06/02(土) 14:50:22.45
いいえ。initialize が長いとかうアホすぎる話はカンベンしてほしいです。
0459デフォルトの名無しさん2012/06/02(土) 14:53:21.10
Railsの小間使い言語なのに偉くなったもんだわ
0460デフォルトの名無しさん2012/06/02(土) 15:54:47.60
i8nでいいだろもう
0461uy2012/06/02(土) 16:04:12.88
右 人差し指 i
右 親指   n
右 人差し指 i
左 人差し指 t
右 人差し指 i
左 小指   a
右 中指   l
右 人差し指 i
左 小指   z
左 中指   e

それいったら
attr_accessorもヤバイ
でも別にそんな頻繁に使うものじゃないし別に。
initialize も attr_accessorもキータイプはしやすい単語だから別にいいわ後からこの辺り変えられるほうがきつい
0462デフォルトの名無しさん2012/06/02(土) 16:09:30.22
Matz < Ruby 2.0 の目玉機能として init を導入します!!
ΩΩΩ < な、なんだってー
0463デフォルトの名無しさん2012/06/02(土) 16:11:45.21
やったー!
0464デフォルトの名無しさん2012/06/02(土) 16:42:28.99
NetBeansとかRubyMineとか使おうよ。
rw[TAB] → attr_accessor
0465デフォルトの名無しさん2012/06/02(土) 17:13:03.96
>>461
俺のキーボードと配列違うのかな
0466デフォルトの名無しさん2012/06/02(土) 17:14:33.82
言われて見ると>>461の右手は1個ずれてね?
qwertyだとiは中指だよな。
0467デフォルトの名無しさん2012/06/02(土) 17:27:26.17
nを右手親指というのが熱い
0468デフォルトの名無しさん2012/06/02(土) 17:27:43.61
右 中指 i
右 人差し指 n
右 中指 i
左 人差し指 t
右 中指 i
左 小指 a
右 薬指 l
左 小指 z
左 中指 e

うちだとこうだな。
nを親指で押すって器用だね。
0469デフォルトの名無しさん2012/06/02(土) 17:32:19.31
lが右手中指ってのもすごいな
右手の角度を傾けるとそんな感じの入力になりそうだ
0470デフォルトの名無しさん2012/06/02(土) 17:36:58.85
>>469
右手薬指だって
0471デフォルトの名無しさん2012/06/02(土) 17:52:41.85
>>470
いや、>>461が右手中指ですごいって話。右手親指nとあわせて考えた場合
右手を傾けるとなるほど>>461の配置でしっくりくる。
0472デフォルトの名無しさん2012/06/02(土) 18:01:31.12
>>461を参考に、右手を傾けてみた。
記号類のキーが遠すぎて押せる気がしない。
0473デフォルトの名無しさん2012/06/02(土) 18:28:13.48
461 ってどんな入力なんだ?
0474デフォルトの名無しさん2012/06/02(土) 18:29:43.53
未取得レス
0475デフォルトの名無しさん2012/06/03(日) 01:36:56.28
きっと>>461はエルゴノミックキーボード使ってるんだろうな
0476デフォルトの名無しさん2012/06/03(日) 06:36:40.60
選り好み糞
0477デフォルトの名無しさん2012/06/07(木) 12:55:31.35
ISOの件は要は
「お前らが仕様がない仕様がない言うから必死こいて仕様策定したんであって
これ以上やりたきゃ少しくらい手と金出せっていうか出してくださいお願いします」
という主張だということでいっすか
0478デフォルトの名無しさん2012/06/10(日) 02:48:57.27
最近のRubyのライブラリって、引数にkeyがSymbolのHashを使ったメソッドが多いけど、
それって効率悪くないの?

keyがSymbolだけの時だけは特別扱いして、実際にはHashオブジェクトを
アロケートしないような実装になってるとか?
0479デフォルトの名無しさん2012/06/10(日) 03:23:52.10
>それって効率悪くないの?
悪いです

>keyがSymbolだけの時だけは特別扱いして
ません

Ruby2.0では真のキーワード引数ができるはずの予定の目標なのでそれまで待って

見やすさ重視で処理二の次という、なんかActiveSupportとかRailsとかあのへんで醸成されたやつなんでもう仕方ない
0480デフォルトの名無しさん2012/06/10(日) 03:35:56.43
Rails以前から使われた気がするが
0481デフォルトの名無しさん2012/06/10(日) 03:51:28.06
使われてはいたけど、あんまり好意的に使われてなかったように思う
なんかテクニカル過ぎるというか、ドヤ顔が見えるというか

ライブラリいっこだけで使ってれば果てしなく浮くから、仕方ないんだけど
Railsあたりのライブラリでは「見渡す限りぜんぶキーワード風引数可能」というのを提供したんでプチパラダイム
0482デフォルトの名無しさん2012/06/10(日) 06:33:08.32
JavaScriptのプロパティとArgumentsが秀逸すぎてRubyとはなんだったのかという気分になる
0483デフォルトの名無しさん2012/06/10(日) 07:33:20.80
生かじり君乙
0484デフォルトの名無しさん2012/06/10(日) 08:41:49.70
>479
待ちきれないので Python 使ってみたら案外良かった
0485デフォルトの名無しさん2012/06/10(日) 10:20:02.23
javascriptのargumentsはまともにArrayとして扱えればもっとよいものになるのになー。
0486デフォルトの名無しさん2012/06/10(日) 12:48:34.21
Symbol Hash渡しがどのくらい遅いか、ベンチマークしてみた人居る?
0487デフォルトの名無しさん2012/06/10(日) 13:00:23.02
遅いもなにも、メソッド呼ぶたびに1個Hashオブジェクトが生成されるだけでしょう
そのメソッドを1秒に何百回呼ぶかというだけの話
0488uy2012/06/10(日) 14:00:54.79
require"Benchmark"
def func hs
end
n = 1000000
Benchmark.bmbm do |x|
  x.report(:sym) do
    n.times do
    func({ :test => "aaa"}) end
  end
  x.report(:hutuu) do
    n.times do
    func "aaa" end
  end
end
Rehearsal -----------------------------------------
sym 2.578000 0.078000 2.656000 ( 2.656250)
hutuu 0.656000 0.000000 0.656000 ( 0.656250)
-------------------------------- total: 3.312000sec

user system total real
sym 2.625000 0.047000 2.672000 ( 2.671875)
hutuu 0.641000 0.000000 0.641000 ( 0.640625)


おせーじゃん
ちなみに引数を
func({ :test => "aaa" , :tete => "ruru" , :ssss => "rubyyy" , :bbb => "aauuu"}) end
にしたら
sym 5.734000 0.062000 5.796000 ( 5.875000)
0489デフォルトの名無しさん2012/06/10(日) 14:57:30.18
2.0まではまあそういうもんだって思って使うしかないわな
0490デフォルトの名無しさん2012/06/10(日) 15:47:56.81
名前付き引数にHash使うの古のPerlの時代からやってただろ
0491デフォルトの名無しさん2012/06/10(日) 15:50:27.89
>>488
普通はfuncの中身がHash作るオーバーヘッドの何倍もあるから些細な違いだろ馬鹿か
0492デフォルトの名無しさん2012/06/10(日) 16:05:28.19
小さな仕事をする関数までキーワード引数にするとオーバーヘッドが酷いことになるって察しろよ馬鹿か?
0493デフォルトの名無しさん2012/06/10(日) 16:09:05.58
些細な違い()
0494デフォルトの名無しさん2012/06/10(日) 17:19:05.21
RubyもJavaScriptくらい金つぎ込んだらもっと強くなれるのかな
0495デフォルトの名無しさん2012/06/10(日) 17:50:49.41
>>494
まあ基本、予算イズパワーでございまするがゆえ、ある程度まではお金注ぎ込んだぶんよくなるかとは思われます
すんごい広範で高額になった場合は費用対効果がうまく回らなくなるかもしれないけど、そんな夢みたいな心配する段階じゃないな
0496デフォルトの名無しさん2012/06/10(日) 19:02:02.55
>>492
小さな関数でかつ100万回の呼び出しを1秒以内に終えたい場合だけだろ馬鹿か
大体何だよその処理
ハッシュ作るより小さい処理をそんなに呼び出して何がしたいんだよ
0497デフォルトの名無しさん2012/06/10(日) 19:15:25.05
誤差誤差いってるからRailsが糞重くなったんだと思うわ。
0498デフォルトの名無しさん2012/06/10(日) 19:18:11.87
Railsが重いのは誤差の積み重なりなんかじゃなく、どーやってもはっきり重いmethod_missingとかの積み重ねだと思う
0499デフォルトの名無しさん2012/06/11(月) 02:02:59.38
もうカリー化でもしてろ。
引数はkey, value固定で。
0500デフォルトの名無しさん2012/06/11(月) 02:25:50.31
カリーぱみゅぱみゅ
0501デフォルトの名無しさん2012/06/11(月) 02:29:51.99
このあたりがRubyとC#とかとの開発力の違いだと思う
C#なら使えるとわかったものはすぐに実装されていく
Rubyは遅い
0502デフォルトの名無しさん2012/06/11(月) 04:13:58.10
>>500 え?
0503デフォルトの名無しさん2012/06/11(月) 11:55:53.63
>>502
> 検索 約 2,080 件 (0.19 秒)
こんなのも知らないとか
0504デフォルトの名無しさん2012/06/11(月) 11:57:44.69
String#casecmpってなんか積極的に使う意味ある?
正規表現じゃダメなん?

>>503
小さいカレー屋とかが頑張って作ってみたメニューとかが表示されてせつないな
■ このスレッドは過去ログ倉庫に格納されています