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

Rubyについて Part 42

レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん2011/01/15(土) 17:55:52
オブジェクト指向スクリプト言語Rubyについて扱うスレッドです。
仲良く使ってね。

Ruby Home Page
http://www.ruby-lang.org/ja/

= 前スレ
【RoR】Rubyについて Part 41【CPAN vs RubyGems】
http://hibari.2ch.net/test/read.cgi/tech/1281473294/

過去スレ・関連スレは >>2-
0951デフォルトの名無しさん2011/04/25(月) 10:13:25.72
まあ、>>938がFAではある
Rubyだからなんか特別にベンリな方法があるわけではない
たぶんCでもJavaでもPerlでもPythonでも書けるだろう

むしろPerlはもう無駄にライブラリがあるので、
用途に合致するライブラリがうっかりCPANあたりに存在する可能性はある
0952デフォルトの名無しさん2011/04/25(月) 14:58:38.66
配列やハッシュを記述する時に、最後の要素の後にもカンマを残す先輩PGがいるのだが
これってどこか他の言語の方言なのか?

[a, b, c]
これをグータラな先輩は
[a, b, c,]
こう書く。
潔癖症な俺はこれを見るたびに最後のカンマを丁寧に削除してコミットし直す。
0953デフォルトの名無しさん2011/04/25(月) 15:43:43.76
>>952
1行1要素で
a = [
  a,
  b,
  c,
]
のように書く場合に編集が楽になる(行単位で編集できる)のが利点だが、
行内の場合は、末尾コンマを書いても余りメリットないんじゃないだろうか。

「末尾に追加するときに便利」という主張もあるけど、
追加した要素にも結局コンマを付けるわけなので、あまり説得力がないと思う。
0954デフォルトの名無しさん2011/04/25(月) 15:51:44.99
…方言のモトを探すなら、Rubyの方言というべきかもしれない
リテラルで列挙子が余分な場合に空要素を追加する言語もあるので、
(たとえば [1, 2, 3, ] は要素 4の配列)
これを安全弁として多用するのはRubyだと思っていい

個人的にはあんまり好きではなく、自分から書くことはない
俺は
「追加のときにカンマ忘れても配列になるので便利」よりも
「追加のときにカンマ忘れて文法エラーになるので親切」を選ぶ
arr = %w[ ] の中に空白あり単語をうっかりコピペして悩むのと根は一緒

行単位差分管理システムだと、編集履歴が1行で済むので本質的というメリットがないでもないが
目的としては1行追加しただけなのに編集履歴は2行になる、というのはあまり気持ちよくない
0955デフォルトの名無しさん2011/04/25(月) 16:07:49.22
[
a,
b,
c,
]
みたいな書き方で項目を追記、削除していく場合は普通に便利だけどね
ある意味一貫性があって合理的だと思う
一行にまとまってる時は書かないけど

それはそうと次スレは早めに
09569522011/04/25(月) 16:23:26.76
>>953
>>954
>>955
おおなるほど、要素追加時の利便性のためだったのか。
ありがとうございます。

しかし
>リテラルで列挙子が余分な場合に空要素を追加する言語もあるので、
>(たとえば [1, 2, 3, ] は要素 4の配列)

こんな言語があるのならこの癖はつけない方が良さそうですね。。
0957デフォルトの名無しさん2011/04/25(月) 17:16:27.99
>>954
>…方言のモトを探すなら、Rubyの方言というべきかもしれない

ええっ、CでもJavaでもPythonでもJavaScriptでも使えるだろ。
JavaScriptではstrictモードで警告が出るけど。
0958デフォルトの名無しさん2011/04/25(月) 20:04:49.75
追加(挿入)、削除のルールが統一できるのがラク
といっても一行で [1, 2, 3, 4,] みたいなのは見たことないな

一行、一要素での場合だと
diffで差分とるとったり、バージョン管理のときに見やすい

>>957
ふるーいCだと多分書けない
俺の知ってる範囲ならPerlが最初だけどLisp系は知らん
0959デフォルトの名無しさん2011/04/25(月) 20:27:05.93
>>958
Lisp系は大概リストの要素を区切るのが空白文字
だから末尾に空白文字あっても単語の区切りでしかなく
そもそも「末尾の区切り文字の後に何もない」という状況が存在しない
0960デフォルトの名無しさん2011/04/25(月) 22:14:30.99
[1, 2, 3, 4,]
みたいに書かれたら要素の書き忘れなのか心配になるだろ。
要らんもんを書くなバカタレ!
って言いたいわ。
0961デフォルトの名無しさん2011/04/26(火) 00:16:39.39
要素ごとに改行するときには欲しい
単行ではまず要らないな
0962デフォルトの名無しさん2011/04/26(火) 06:55:50.24
自分用なら勝手に汁。
みんなで作ってるなら書くな。
これでよし。
説明おわりっ!
0963デフォルトの名無しさん2011/04/26(火) 09:21:02.37
>>914-915

empty?あるからrubyはこういうもんだと思っていたら、
nil?使うのがやっぱり習慣なんだな。罠にはめられた気分。
0964デフォルトの名無しさん2011/04/26(火) 09:22:02.46
>>917
jitが効くのはjrubyまでで、rubyスクリプトまではネイティブコンパイルされてないだろう。
その論理だと、cで実行形式作ってるrubyインタプリタでもrubyスクリプトがネイティブコンパイルされて実行されてることになってしまう。実際はそんな事無くて普通にインタプリタ実行。
0965デフォルトの名無しさん2011/04/26(火) 09:54:12.87
>>963
empty? は「無い」ことを表すものじゃない
「コンテナがあるのは分かってる、でもそれは空なのか?」ってものだ
オブジェクトに対して、そもそも存在するかを調べるなら nil? を使うべし
0966デフォルトの名無しさん2011/04/26(火) 09:57:46.95
存在するかどうかは defind?(変数名) だろうという説もある
Object#nil? はオブジェクトが存在していないとそもそも呼べない
自分が NilClass のインスタンスであるかどうかを調べて真偽を返す Object クラスのメソッドでしかない

…まあ、なんだ、>>891の考え方自体があまり Ruby にフィットしないのだな
0967デフォルトの名無しさん2011/04/26(火) 10:00:45.70
ああ、また find の否定になってる、defined? ね
responed_to? と書いて色づけされなくて一瞬悩むのもよくやる
0968デフォルトの名無しさん2011/04/26(火) 10:29:49.98
>>963
if obj.nil? は obj が nil か否か
if obj は obj が真か偽か
0969デフォルトの名無しさん2011/04/26(火) 10:32:00.07
>>963
Ruby以外の言語だとnil?と同じ意味でempty?(と同じ機能のメソッド)を使うの?
0970デフォルトの名無しさん2011/04/26(火) 10:46:53.46
(変数が)empty
0971デフォルトの名無しさん2011/04/26(火) 10:50:01.44
インタプリタ→VM→JIT
→組み込み向け

なんかJavaが通った道とおなじだな。
要するに「スクリプト言語Ruby」に置き換えて後を追いかければ
良く知らないファンドちゃんからからお金ちゃんがもらえるのう。
0972デフォルトの名無しさん2011/04/26(火) 13:07:40.59
>969
Lisp系とかだと、空リストと無参照はどちらも null じゃないっけな
あれのリストは「要素+次の要素への参照」というデータが連なったものだから
リスト終端、空リスト、無参照はほぼ一緒ってことになる

明示的な nil や null でなく、真偽値としてなら「空配列(リスト) → 偽」になる言語は結構多いから
Rubyに来たとき配列にempty?を使うのを見て「真偽はempty?で調べるのかぁ」とか勘違いしちゃったのかも知れない
0973デフォルトの名無しさん2011/04/26(火) 13:10:00.45
よく知ってる人はどう判断するのでしょうか?
0974デフォルトの名無しさん2011/04/26(火) 16:40:41.19
>>964
> >>917
> jitが効くのはjrubyまでで、rubyスクリプトまではネイティブコンパイルされてないだろう。

されてる。
ttp://jruby-ja.blogspot.com/2010/06/jruby.html

要は、jrubyチームは超頑張ったので
rubyソース→構文木→バイトコード
まで出来るようになってて、
バイトコードからネイティブコードへはJVMがよきにはからってくれてると。

付随してjavaをはじめとしたJVM上の他言語もシームレスに呼べるようになってて非常に強力になっているという。
0975デフォルトの名無しさん2011/04/26(火) 21:30:51.18
>>972
ただしSchemeでは空リストも真。というか#f以外は全部真として扱われる。
0976デフォルトの名無しさん2011/04/26(火) 21:37:53.62
>>963
emptyが実装されているクラスの場合
「変数objがnilかどうか」と「変数objの状態がemptyか」のチェックは別ものでしょ

if obj.nil? || obj.empty?
とかよく使うし
# Java風に書くと if (null==obj || obj.isEmpty())

めんどくさければblank.rbみたいに
Objectにメソッド追加しちゃえばいいし
ttp://www.koders.com/ruby/fidE878628590E26A82065AB2A491566FAB8159F9A2.aspx?s=.rb
0977デフォルトの名無しさん2011/04/27(水) 09:38:13.30
そこでtime.empty?するとエラーって話じゃないの?
0978デフォルトの名無しさん2011/04/27(水) 10:06:47.53
そもそも empty じゃないだろというループ
empty は限られたクラスの限られた状態を表してる

…まあ、オブジェクトを情報コンテナだと思うかどうかに依存するんだけども
Time.new は空のオブジェクトで、別途時刻を設定して初めて時刻として機能するとか

class Time
 def initialize; @time = nil; end
 def at(t); @time = t; end
 def inspect; @time.to_s; end
 def empty?; @time.nil?; end
 def self.now; o = new; o.at(`date`); return o; end
end

こんな感じ
0979デフォルトの名無しさん2011/04/27(水) 10:14:32.96
全ての継承元の Object クラス(1.9では違うけど)のメソッドの意味みたいなの勉強しないとだめだよね
nil? は制御構造ではなく、ただのメソッド
empty? も制御構造ではなく、ただのメソッド
0980デフォルトの名無しさん2011/04/27(水) 10:18:14.58
nilである判断をempty? でしようとするのは、もしかして、
「変数は値を格納する箱のようなものです」という不適切な
説明を鵜呑みにしている輩ではなかろうか。
0981デフォルトの名無しさん2011/04/27(水) 10:51:11.51
次スレも立ってないのに無闇に荒れそうなワードを持ち出すとかマジ勘弁
0982デフォルトの名無しさん2011/04/27(水) 11:07:01.57
ttp://www.google.com/search?hl=ja&lr=lang_ja&ie=UTF-8&oe=UTF-8&q=%E5%A4%89%E6%95%B0+%E7%AE%B1+Ruby+-%E3%82%BF%E3%82%B0+-%E5%90%8D%E6%9C%AD&num=50
箱説は意外と残ってる?

>>981
何日も前から言われててまだ立ってないんだから、
スレ立てできる人がいないかスレ立ての価値が認められてないかどっちかだろ
0983デフォルトの名無しさん2011/04/27(水) 11:30:09.97
なんかよくわからんけどmaybeモナドとかいうやつみたいな
メソッドチェーン中にぬるぽでもよきに計らってくれる
うまい書き方は無いものか

Refinement が導入されたら
maybe{ このブロック中だけでNil#method_missingをどうにかする }
みたいなことできるのかな?
0984デフォルトの名無しさん2011/04/27(水) 11:32:29.82
0985デフォルトの名無しさん2011/04/27(水) 11:32:51.31
>>982
立てられるんだけど携帯なんだよな

テンプレを託していいんなら適当に立てるよ
0986デフォルトの名無しさん2011/04/27(水) 18:22:19.83
現行スレのをほぼコピペで良いと思われ
0987デフォルトの名無しさん2011/04/27(水) 21:00:31.36
>>807
0988デフォルトの名無しさん2011/04/27(水) 23:11:37.20
>>807
学生にRubyやらせる大学もあるからな。そんなのかわいそうだろ。
0989デフォルトの名無しさん2011/04/27(水) 23:53:26.38
>>988
新人にCOBOLを一週間で叩き込んでドナドナする
ウチの会社よりマシやん

大学はPascalだったな、数学系だとFORTRANとかなのか?
09909852011/04/28(木) 00:02:16.80
すっかり立てるのを忘れていたわけだが、どなたかが立ててくれたようだ

Rubyについて Part 43
http://hibari.2ch.net/test/read.cgi/tech/1303916370/

マジありがとう。
0991デフォルトの名無しさん2011/04/28(木) 00:22:35.91
スレ立てといたどー↑
2-3は適当にやっといた
0992デフォルトの名無しさん2011/04/28(木) 00:38:11.72
>>991
おつ
0993デフォルトの名無しさん2011/04/28(木) 00:55:32.35
>>988
C++よりはマシかと…
0994デフォルトの名無しさん2011/04/28(木) 06:18:22.62
>>988
だよな。今時はPHPだけ刷り込ませるのが普通。
0995デフォルトの名無しさん2011/04/29(金) 00:01:04.17
うめておくか
0996デフォルトの名無しさん2011/04/29(金) 05:16:49.16
なんでRubyってこんなに遅いの?
0997デフォルトの名無しさん2011/04/29(金) 06:14:44.73
matz disってんのか!
0998デフォルトの名無しさん2011/04/29(金) 06:14:59.75
おい、こら、ああん?
0999デフォルトの名無しさん2011/04/29(金) 06:15:24.19
>>997
全てのRubyプログラマを馬鹿にする言葉だぞ
1000デフォルトの名無しさん2011/04/29(金) 06:15:39.22
Rubyは遅い!
これは定説です。
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。