トップページ⇒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/
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
小さいカレー屋とかが頑張って作ってみたメニューとかが表示されてせつないな
0505デフォルトの名無しさん2012/06/11(月) 12:00:30.89
Stringにパス操作文字列ぶっこもうとしたら
すでにrakeにString#extが占拠されていたでござる
しかも仕様がウンコすぎる
0506デフォルトの名無しさん2012/06/11(月) 12:13:10.63
>>504
正規表現をどーしても使いたくないときに使う印象
あとCやC++な人とか
0507デフォルトの名無しさん2012/06/11(月) 12:13:50.48
Ruby 2.0にnamespace的なものが入るんじゃなかったっけ
それが入れば幸せになれるかもね
0508デフォルトの名無しさん2012/06/11(月) 16:39:11.93
2.0でるのって来年?
0509デフォルトの名無しさん2012/06/11(月) 16:47:45.96
少なくとも今年は出ないと毎年言ってるので、来年かもしれません
0510デフォルトの名無しさん2012/06/11(月) 23:56:29.16
Rubyの仕事やってみたいなぁ
0511デフォルトの名無しさん2012/06/12(火) 01:48:23.51
mod_ruby って今でもOKですかね?
RubyAuthenHandler あたりを使いたいんですが。。
0512デフォルトの名無しさん2012/06/12(火) 03:17:17.10
>>505
標準ライブラリのpathnameでは不満?
0513デフォルトの名無しさん2012/06/12(火) 03:37:38.97
気持ち悪いスレや
0514デフォルトの名無しさん2012/06/12(火) 06:46:08.49
妹も見てるんですよ!
0515デフォルトの名無しさん2012/06/12(火) 07:33:55.83
endはどうにかならんかったの?
{}の方がよほど見やすいのだが。
0516デフォルトの名無しさん2012/06/12(火) 07:43:59.23
個人的にはBASIC、Delphiと来たのでendのが読みやすい
どっちも慣れの問題だとは思うがね
0517デフォルトの名無しさん2012/06/12(火) 07:55:49.64
何度も言われてはいるんだが、終端トークンとして本当になんでもよかったので、見栄えと慣れの問題でしかない
エンドという英単語として捉えてる人は(特に日本では)稀で、なんていうかこう、単なる模様にしか見えない

あと、Ruby における { } には
{key => value}
mes{|arg| block}
"#{embbed}"
と既に3つ仕事があるので、そういう点でもこれ以上増やすのはあんまりよくない
0518デフォルトの名無しさん2012/06/12(火) 08:03:30.73
この手のやり取りが30000回くらい繰り返されることによる
生産性の低下をもたらした時点でendは失敗だったなw
0519デフォルトの名無しさん2012/06/12(火) 08:04:49.60
(((((((仕事)が(増える)))から(良く無い))という(理由)))は(((なんか))(((無理)(が)(ある))((ぞ))))

0520デフォルトの名無しさん2012/06/12(火) 08:17:10.63
だって、endって単純に気持ち悪いよ。
しかもbeginが無いのにendが有るから、余計に。
慣れの問題っていうけど、いまどきの言語がこぞって{}を採用しているからなぁ。
文法的に問題が無いのなら{}にも対応して欲しいな。
何か意地のような物があるのかもしれんが。
0521デフォルトの名無しさん2012/06/12(火) 08:19:48.80
>>515
わざとアルファベットのトークンにすることで、 {} を含む他の記号を浮かせてる
実際、リソース管理とかの重要なブロックは {} を使うことで
目立たせるコーディングスタイルもあったはず
0522デフォルトの名無しさん2012/06/12(火) 10:17:49.99
{ } hは必ずセットで書かなければならないという致命的な欠点がある
あとネストが深くなる可能性が増える

def mes(arg) {
...
}
と
def mes(arg)
...
end

や

if cond {
...
} else {
...
}
と
if cond
...
else
...
end

は打鍵数としてもそう変わらん
0523デフォルトの名無しさん2012/06/12(火) 10:32:44.24
ruby は {} が基本的に特別で、ただの文ブロックじゃなくてクロージャになる。
それ以外はendで終わる。

というルールだけにしておけば、わかりやすかったのではないかと思うが、
{} の代わりに do end と書くこともできたり、BEGIN や END のように {} をただの
文ブロックとして使ってるところもあるので、ちょっと混乱するね。
0524デフォルトの名無しさん2012/06/12(火) 10:54:19.27
>>522
>{ } hは必ずセットで
果たしてそうだろうか?それは先入観ではないだろうか?
>>517もendが単なる模様と言う、ならば"}"も単なる模様だ

def mes(arg)
 ...
}

if cond
 ...
else
 ...
}

あ、駄目だこれ
0525デフォルトの名無しさん2012/06/12(火) 10:59:55.05
タイプ量の問題ではなくて、見た目の問題だと思うのね。
殆どのいまどきの言語が{}を採用しているから、
目がそっちになれちゃってるのよねぇ。
0526デフォルトの名無しさん2012/06/12(火) 11:34:56.92
endが一番やばいのは、クラス使った時じゃないの

class A
  def func
    "test"
  end
  def func2
    "tess"
  end
end
0527デフォルトの名無しさん2012/06/12(火) 13:29:26.53
>>526
何がやばいの?
0528デフォルトの名無しさん2012/06/12(火) 13:36:02.15
これがさらにモジュールの中の...とかだったりすると、
最後が end end end みたいに end の連続になって、最後ならいいけど
途中だとどこまで戻ったのかわからない、とかでしょ。

C言語の {} でも同じようなことになるけど。
0529デフォルトの名無しさん2012/06/12(火) 13:44:36.99
XML「ガタッ」
0530デフォルトの名無しさん2012/06/12(火) 13:54:55.82
endばっかりだと暗いじゃん
0531デフォルトの名無しさん2012/06/12(火) 14:38:43.55
終端子が多重になるのはどんな言語のどんな文字や記号であっても基本防げないよね
「多重にならない」ことがあるとしたなら、それは途中でネスト構造がなくなってるってことだもの

module M
class C
def hoge
"hoge"
endef
def hage
"hage!"
endmodule

インデントが区切れたら終了ってことにでもする?
0532デフォルトの名無しさん2012/06/12(火) 14:47:16.30
def があったらそこで区切ればいいじゃんという意見は稀に見る

class C
 def aaa
  "えー"
 def bbb
  "びー"
 def ccc
  "し〜"
end #<= クラスの終わり

def の中に def も(一応)書けることとか、class 〜 end の中は「キーワード空間」ではなく普通の地の文だということを指摘するとたいてい黙る

class C
puts "クラス定義の中にメソッド実行文が書けるRubyはうんこ"
end
0533デフォルトの名無しさん2012/06/12(火) 14:50:52.66
明らかな解決策はインデントベース
あるいは、対応をエディタ任せにして、S式みたいに畳んじゃうとか(end終端だと辛いが)
いずれにせよ万能な解決策とはいかない
0534デフォルトの名無しさん2012/06/12(火) 15:53:28.64
()の鬼のlispのなかには ] が来たら全部閉じるみたいなのを実装してるのもあった気がする。

(defun hoge (a b c)
(put "%d" (- a (/ b c]

みたいなの。
0535uy2012/06/12(火) 16:37:17.46
俺様的には
def func ; "test" end
↑こういう事たまにやる奴いるけどこれがうざいから

"test" def func a , b
後おきdefとか作ればって思う
ifもforもイテレータも時代は後置き
0536デフォルトの名無しさん2012/06/12(火) 16:38:02.56
>>534
Haskellの$みたいなもんか、あれは開き括弧を$に置き換えることで複数の閉じ括弧を纏めるって形だからちょっと違うけど
0537デフォルトの名無しさん2012/06/12(火) 17:00:44.57
>>534
超括弧って名前はそのまんますぎだって昔から思う
0538デフォルトの名無しさん2012/06/12(火) 18:04:38.88
>>535
俺は後置きif使う奴がうざいわ
0539デフォルトの名無しさん2012/06/12(火) 18:07:39.73
三項演算子とか後置ifとかドヤ顔が透けて見える時があるからなあ。
0540デフォルトの名無しさん2012/06/12(火) 18:10:43.21
後置ifは別によくね?条件が真の際の内容が一行のときは何使うの?
0541デフォルトの名無しさん2012/06/12(火) 18:13:22.88
一行だからって理由で構文変える意味が分からん
0542デフォルトの名無しさん2012/06/12(火) 18:17:58.57
後置ifや三項演算子使ったぐらいでドヤ顔とか言われたらたまったもんじゃないな
0543デフォルトの名無しさん2012/06/12(火) 18:36:11.40
Zimbuのキモさに比べたら、endと} なんて瑣末な違い
0544デフォルトの名無しさん2012/06/12(火) 18:50:20.75
>>541
んじゃあ if 条件式 then 処理; end とか書くのか、読みにくくね?
0545デフォルトの名無しさん2012/06/12(火) 18:58:14.18
unko? and unko
■ このスレッドは過去ログ倉庫に格納されています