Rubyについて Part 36 at TECH
[2ch|▼Menu]
1:デフォルトの名無しさん
09/06/28 16:29:28
オブジェクト指向スクリプト言語Rubyについて扱うスレッドです。
前スレに変なのが沸いて流れてしまいましたが、まったりと行きましょう。

Ruby Home Page
URLリンク(www.ruby-lang.org)

= 前スレ
Rubyについて Part 35
スレリンク(tech板)

過去スレ・関連スレは >>2-

2:デフォルトの名無しさん
09/06/28 16:31:42
Rubyリファレンスマニュアル刷新計画
URLリンク(doc.loveruby.net)
ライブラリ一覧
URLリンク(doc.loveruby.net)
RubyExtensionProgrammingGuide
URLリンク(i.loveruby.net)
Ruby Hacking Guide
URLリンク(i.loveruby.net)
Symbol < Stringも止める。
URLリンク(www.rubyist.net)
クラスローカルインスタンス変数
URLリンク(www.rubyist.net)
クラス変数
URLリンク(www.rubyist.net)
ローカル変数
URLリンク(www.rubyist.net)
可視性メモ
URLリンク(www.rubyist.net)
URLリンク(blade.nagaokaut.ac.jp)
URLリンク(blade.nagaokaut.ac.jp)
YARV without 1.9
URLリンク(www.rubyist.net)
URLリンク(www.atdot.net)
URLリンク(i.loveruby.net)
JSON
URLリンク(json.rubyforge.org)
URLリンク(webos-goodies.jp)
URLリンク(webos-goodies.jp)
YAML
URLリンク(www.ruby-lang.org)
URLリンク(jp.rubyist.net)
URLリンク(www.namikilab.tuat.ac.jp)

3:デフォルトの名無しさん
09/06/28 16:32:34
Ruby/Gtk+
URLリンク(www.unixuser.org)
URLリンク(takeposo.sakura.ne.jp)
URLリンク(ruby-gnome.sourceforge.net)
URLリンク(ruby-gnome.sourceforge.net)
URLリンク(ruby-gnome2.sourceforge.jp)
URLリンク(psux1.kek.jp)
URLリンク(www.rubycgi.org)
URLリンク(ruby.gfd-dennou.org)
URLリンク(www.magicianmaster.jp)

4:デフォルトの名無しさん
09/06/28 16:33:29
Ruby on Rails
スレリンク(tech板)
URLリンク(jp.rubyist.net)
URLリンク(www.onlamp.com)
URLリンク(kyotosanga.com)
URLリンク(blog.hacklife.net)
URLリンク(www.metadata.co.jp)
URLリンク(japan.cnet.com)
URLリンク(japan.cnet.com)
URLリンク(journal.mycom.co.jp)
URLリンク(www.atmarkit.co.jp)
URLリンク(www.atmarkit.co.jp)
URLリンク(www-06.ibm.com)
URLリンク(itpro.nikkeibp.co.jp)
URLリンク(itpro.nikkeibp.co.jp)

5:デフォルトの名無しさん
09/06/28 17:00:55
>>1-4
Rubyの残念さを象徴するようなわかりづらいテンプレだね
>>3,4とかもうURL羅列してあるだけで何がなんだか

6:デフォルトの名無しさん
09/06/28 17:07:36
「残念」って流行語なのか?

残念(笑)

7:デフォルトの名無しさん
09/06/28 17:25:19
>>1

テンプレは前回と同じじゃんか。
残念だと思ったら自分で整えて「次はこれで」って書き込めばいい。
世の中に不満があるならほかでやれよ。

8:デフォルトの名無しさん
09/06/28 18:02:48
前スレ最後まで必死でワラタw

9:デフォルトの名無しさん
09/06/28 18:18:47
このスレタイでよく続くな

10:デフォルトの名無しさん
09/06/28 18:42:29
それだけマイナーだし。

11:デフォルトの名無しさん
09/06/28 19:14:49
>>7
こんなわかりづらいテンプレに疑問を持たないようなユーザーがRuby使いです

12:デフォルトの名無しさん
09/06/28 19:28:32
実践CommonLispって本で
(deftest test-+ ()
 (check
  (= (+ 1 2) 3)
  (= (+ 1 2 3) 6)))
(deftest test-* ()
 (check
  (= (* 2 2) 4)))
(deftest test-arithmetic ()
 (combine-results
  (test-+)
  (test-*)))
(deftest math ()
 (test-arithmetic))
って書くと
pass ... (MATH TEST-ARITHMETIC TEST-+): (= (+ 1 2) 3)
pass ... (MATH TEST-ARITHMETIC TEST-+): (= (+ 1 2 3) 6)
pass ... (MATH TEST-ARITHMETIC TEST-*): (= (* 2 2) 4)
みたいに関数テストができるユニットテストをつくるってネタがあったんだけど
これrubyでかくとどんなかんじになるのかな?

13:デフォルトの名無しさん
09/06/28 19:32:05
>>11
文句付けるなら具体的に案を出せば?

14:デフォルトの名無しさん
09/06/28 20:19:54
>>12

LISPよくわからんが、読める人は逐語的に書けばいいんじゃないの?
単なるユニットテストの超簡易サンプルだろ?
てかLISPって知らない人間に取っては暗号以外の何者でもないな。

15:デフォルトの名無しさん
09/06/28 21:36:25
>>14
rubyっぽくかくとこんな感じ。

deftest test_plus
 assert_equal(1+1, 2)
 ...
end

deftest test_arithmetic
 test_plus
end

deftest test_math
 test_math
end

ってかいてtest_mathを呼ぶと
pass ... test_math test_arithmetic test_plus : assert_equal(1+1 ,2)
みたくテスト内容と階層と結果を自動的に表示してくれるという
lispではこれをdeftestとかっていうマクロから書き始めても二十行くらいでかけてびっくりした。

英語版がここに公開されてる
URLリンク(gigamonkeys.com)

16:デフォルトの名無しさん
09/06/28 21:51:00
>>15
Lisp向きの処理をわざわざRubyに置き換えても無意味
糞言語がゲロ言語になるだけ

17:デフォルトの名無しさん
09/06/28 21:56:30
糞よりはゲロのほうがとか思ってしまった俺オワタ

>>12
まずは自分で書いてみな
置き換えること自体は無意味でも勉強にはなる


18:デフォルトの名無しさん
09/06/28 23:21:09
>>12
まず、
> pass ... (MATH TEST-ARITHMETIC TEST 〜〜
この出力が何に由来するものか理解できない俺は、Rubyでのコードもまったく想像できない。

って>>15のサイト見てたら、それはそれで定義するのかよw
# ゴルフネタなのか?それならPerlでもJavaScriptでもなんでも変わらないような以下略
今ひとつピントがわからない俺に易しい解説キボン

19:デフォルトの名無しさん
09/06/29 00:00:58
16bit CRCを求めるライブラリって標準でついてないの?

20:12
09/06/29 00:35:55
要するにテストの階層化が簡単にできるって話。
assert_equalに該当するようなcheckっていう関数(マクロ)を作って
deftestっていう関数定義のようなものをテスト用に作って
deftestで、例えば足し算のテストをする。test_plusっていうのを定義して、
その中でcheck(1+1==2)みたくテストを書く。
で実行すると「test_plusから呼ばれたcheckの1+1==2っていう式は真/偽だったよ」
って教えてくれるわけ。
さらにdeftestでtest_arithmeticを定義してその中でtest_plusを呼ぶと
「test_arithmeticから呼ばれたtest_plusから呼ばれたcheckの1+1==2っていう式は真/偽だったよ」
と教えてくれる。さらにdeftestでtest_mathを定義してその中でtest_arithmeticを呼ぶと……
みたいに階層化することができる。さらにそれぞれの関数ですべてのテストが真だったか/ひとつ以上偽だったか
の結果を返すので、

「test_arithmeticから呼ばれたtest_plusから呼ばれたcheckの1+1==2っていう式は真だったよ」
「test_arithmeticから呼ばれたtest_plusから呼ばれたcheckの1+9==10っていう式は真だったよ」
「test_arithmeticから呼ばれたtest_timesから呼ばれたcheckの1*1==1っていう式は真だったよ」
すべてのテストは成功しました。

みたいに関数名とか階層とか評価した式とかをいちいち別に書かなくても表示してくれる。
それでこれと似たようなことをrubyで書けるかなっと少し考えてみたんだけどさっぱり思いつかない。

21:デフォルトの名無しさん
09/06/29 00:48:50
>>19
Zlibにあったような気がしたが、CRC32だな。
githubにCRC16が落ちてたからそれで我慢して。


22:デフォルトの名無しさん
09/06/29 00:49:32
階層化とやらの実装はcaller調べりゃすぐ出来る
むしろ最終的に実行した式(1+1=2とか)を表示する部分に工夫が必要

23:デフォルトの名無しさん
09/06/29 06:23:05
そもそもLISPとか括弧だらけで美しくない
レベルの低い話をRubyのスレに持ちこまないで

24:デフォルトの名無しさん
09/06/29 06:38:33
>>20
今ひとつ掴み切れんが、RSpecの階層化で幸せになれる話?

context 'arithmetic' do
 context 'plus' do
  specify '1+1' do
  end

  specify '1+9' do
  end
 end

 context 'times' do
  specify '1*1' do
  end
 end
end

実行した式の表示に関しては、Rubyではまず無理だろう
その芸当は「手続きも含めてすべてがデータ(リスト)」のLispだからこそだ

25:デフォルトの名無しさん
09/06/29 07:46:46
無理やりやるとしたらこんなか?何か気持ち悪いなあ

def check(recv, method, *args)
 expect = args.pop
 backtrace = raise rescue $@
 result = recv.send(method, *args)
 うんたらかんたら
end
check(1, :+, 1, 2)


26:デフォルトの名無しさん
09/06/29 09:54:34
GitHubで、有名じゃないRubyライブラリのプロジェクトをいじって遊んでる
足りないテストがあるので追加してるんだが、
ユーザー指定のわりとレアな組み合わせによっては期待通り動作しないことがわかった
ライブラリ側を直せばいいんだが、これを直すと確実に大改造になるし、
ライブラリを利用してる既存スクリプトの動作も下手すると変わってしまうし、
正しく直せたかどうかがいまいち俺にはわからん分野でもある

 A 現状追認のテストだけ書いて、不動作関連は記述せず、別途報告
 B 現状追認のテストだけ書いて、不動作関連は記述せず、報告もしないで見なかったことに
 C テストを実行するとテスト失敗になるようにしておいて、不動作は別途報告
 D テストを実行するとテスト失敗になるようにしておいて、不動作は無視
 E 「BUG:本当はテスト失敗になります」と書いて、失敗結果を出すことを成功とみなしてテストは通す

どうしましょ

27:デフォルトの名無しさん
09/06/29 10:03:41
そういや、GitHubでむちゃくちゃ大量にすっごいアドホックなコード追加して
「みんなの見つけてないバグ見つけたのでなおしときましたー」って言ってくる人はいる

そんなコミット怖くてマージできんわー
そんな怖いコード書くくらいならひとまず現象の報告だけして改正案募ってくれ
「どうすればいいかわからんがとりあえずやるか」といったときのコードはたいていあとで問題を起こす

ということで、A

28:デフォルトの名無しさん
09/06/29 13:09:37
>>24
evalでねじ込めば実現できなくもない・・・・・・

29:デフォルトの名無しさん
09/06/29 16:11:54
びっくり最小にするためにアグレッシブに進化してるな。
URLリンク(codezine.jp)

30:デフォルトの名無しさん
09/06/29 19:13:36
Pythonのことあんま知らんけど、intとlongの互換性ってどんなんだったん?
Rubyの場合、FixnumとBignumはほとんどシームレスだけど

31:デフォルトの名無しさん
09/06/29 19:19:00
なんつーか、Rubyやってる奴ってRubyしかできないんだよな
だから>>12みたいに毛色の違う関数型言語の話題が来ても誰もついていけないという…

32:デフォルトの名無しさん
09/06/29 19:41:20
それはまあ言語歴、プログラミング歴によるのでー

33:デフォルトの名無しさん
09/06/29 19:41:22
LISP やっているやつはこんなのばっか。

34:デフォルトの名無しさん
09/06/29 19:54:54
C言語やJavaやってる人間がいきなり>>12見ても理解不能だろ・・・常識的に考えて

35:デフォルトの名無しさん
09/06/29 20:00:20
C#から満を持して飛び込んできましたがサッパリです

36:デフォルトの名無しさん
09/06/29 20:07:29
SICP読んだ事があるのに分からんかった。

37:デフォルトの名無しさん
09/06/29 20:08:44
解説いらないなら本書く理由も無いからな

38:デフォルトの名無しさん
09/06/29 20:21:26
PL/SQLで頼む

39:デフォルトの名無しさん
09/06/29 20:43:42
>>31
そうそう。逆にPHP使える奴はPerlもHaskellも楽勝だったりする。

40:デフォルトの名無しさん
09/06/29 20:49:03
誰にも構ってもらえてないのか?

41:デフォルトの名無しさん
09/06/29 20:49:13
>>39
ダウト

42:デフォルトの名無しさん
09/06/29 20:51:36
>>39
×PHP
○Python

43:デフォルトの名無しさん
09/06/29 20:52:14
Rubyに限らず他言語を一つでも知ってればlispなんて1日で読めるようになるよ。

44:デフォルトの名無しさん
09/06/29 20:53:39
>>42
それは単純にPython厨に古い人が多くてRuby厨に新しい人が多いってだけだろw
古い人は経験豊富なんだから他言語習得するも簡単

45:デフォルトの名無しさん
09/06/29 20:56:15
PythonはLispのパクリだから親和性が高いのが特徴

46:デフォルトの名無しさん
09/06/29 21:01:19
Ruby会議いくやついる?
あれって、チケット必要なのね。
とっくに売りきれてたorz.



47:デフォルトの名無しさん
09/06/29 21:02:41
RubyにもCommon Lisp成分が入ってると思うが
触ってみると、なるほどご先祖様だと感じられる
Matzが参考にしてると言うだけはある

48:デフォルトの名無しさん
09/06/29 21:05:26
>>39
それはないだろw

49:デフォルトの名無しさん
09/06/29 21:12:04
Ruby も Python も LISP も信者はおかしなのが多い。

50:デフォルトの名無しさん
09/06/29 21:13:46
隔離スレあるんだからいい加減そっち行ったら?

51:デフォルトの名無しさん
09/06/29 21:26:02
>>20
実行結果出力例が納得いかないんだが、test-arithmeticの結果、mathの結果、は別途表示されないの?

それはともかく、

deftest "test_plus" do
 check ["1+2", 3], ["1+2+3", 6]
end
deftest "test_times" do
 check ["2*2", 4]
end
deftest "test_arithmetic" do
 combine_results "test_plus", "test_times"
end
deftest "math" do
 test_arithmetic
end

に対して

pass ... (math test_arithmetic test_plus): 1+2 == 3
pass ... (math test_arithmetic test_plus): 1+2+3 == 6
pass ... (math test_arithmetic test_times): 2*2 == 4

と表示させるテストライブラリくらいはあっという間に書けた。

52:デフォルトの名無しさん
09/06/29 21:33:00
evalかな
そうだとすると、違わないんだけどなんか違うようなやっぱり違わないような
なんだこの無形の障壁は

53:デフォルトの名無しさん
09/06/29 22:04:34
evalです。
作ってみて思ったんだが、>>52の気持ちはよくわかる、というか、対象式を表示させるために文字列で渡してevalするという発想自体が捻じ曲がってる気はする。

54:デフォルトの名無しさん
09/06/29 22:26:43
構文木を直接書き下すlispはそこんとこ突き抜けてるからな。

55:デフォルトの名無しさん
09/06/29 22:30:23
1年ほど前からスピードランニングやってます。
貧乏なので生活費辛くなってPart9で中断してますが。。

率直な感想を言えば、内容は悪くないと思う。聞きやすいしバックのクラシック音楽も意外に効果的。
ただ、会話がいかにも教材のために作られたという感じの内容なのでつまらなくてすぐに飽きます。
例えば、日本人と外国人が映画に行って、お互いの文化を説明しあったりとか。
価格は高すぎると思う。ちゃんと机で教科書開いて学習する意思がある人ならNHKラジオの英語教材買った方が遥かにお得だし効果的。
1年ぐらいの間暇を見つけてはCD聴いてたわけですが、現時点で英語の映画とか観ても相変わらずほとんど聞き取れない。
効果が出るかは謎。出るにしても時間はかかるんだろうなぁ

56:デフォルトの名無しさん
09/06/29 22:31:14
↑誤爆した。すまん

57:12
09/06/29 22:31:20
>>51
まさにそんなかんじ。すげー
でも勉強不足なもんでそのdeftestの実装がどうなってるか
よくわからん。
checkは文字列を引数としてあとでevalするのか。なるほど


58:デフォルトの名無しさん
09/06/30 01:19:50
Proc#to_sあたりでコード片の文字列に戻せたならeval避けられそうなんだけどね

例えばJavaScriptだとユーザー定義の関数は
(インデント等の差違はあるけど)Function#toStringでコード片に戻せる

rubyの実装だとこういうの難しいんだろうか

>>47
Array#cdrあったような気がしてつい探したことがあるw
・・・昔あったんだっけ?

59:デフォルトの名無しさん
09/06/30 06:52:46
いいかげんウザいよ

60:デフォルトの名無しさん
09/06/30 10:25:45
お前はなんの話題なら納得するんだ

61:デフォルトの名無しさん
09/06/30 12:11:29
まぁ、Array#cdrなんて無くても ary[1..-1]で済むからなぁw

62:デフォルトの名無しさん
09/06/30 12:33:45
>>57
実装はこんな感じ。5分ほどで書いたから汚くてごめん。
class Test
 @@tests = []
 def check(*tests)
  name = caller[0...-2].reverse.map{|str| str.sub(/\A.*`(.*)'\z/){$1}}.find_all{|m| @@tests.include?(m)}.join(' ') #`
  tests.flatten.each_slice(2) do |expression, expected|
   result = eval(expression) == expected
   puts "#{result ? 'pass' : 'failed'} ... (#{name}): #{expression} == #{expected}"
  end
 end
 def combine_results(*cases)
  result = true
  cases.each do |c|
   result = false unless send c
  end
  result
 end
 def self.run
  self.new.__send__ @@tests.last
 end
end
def deftest(name, &block)
 Test.class_eval "
  define_method(name, block)
  @@tests.push(name)
 "
end
END {
 Test.run
}

63:デフォルトの名無しさん
09/06/30 13:07:24
> 5分ほどで書いたから汚くてごめん。
謝るくらいなら5時間できれいなものを書け

64:デフォルトの名無しさん
09/06/30 13:28:35
2chのレスのために5時間かけるくらいなら、5分で書いてゴメンするほうを選ぶわな。
みんながみんな、2chに張り付いているわけじゃない。63みたいに。

65:デフォルトの名無しさん
09/06/30 13:29:48
なんで1円にもならんことに5時間もかけにゃならんのだ。

66:デフォルトの名無しさん
09/06/30 13:36:37
>>64-65
だったら一々言い訳つけて女々しいレスすんな

67:デフォルトの名無しさん
09/06/30 13:42:14
こいつ前スレの>>971だろ
酷い劣等感だ

68:デフォルトの名無しさん
09/06/30 14:12:26
Ruby ユーザの脳味噌の中身は PHP みたいですね

69:デフォルトの名無しさん
09/06/30 22:19:01
>>67
そんなわけないだろ。
ちなみに前スレでやり合ってたのもおれじゃない。
監視する価値を感じなくなったからもう書き込むことはないよ。じゃあ

70:デフォルトの名無しさん
09/06/30 22:24:37
ここまで我慢してたけど監視する価値でフイタ

71:デフォルトの名無しさん
09/06/30 22:32:29
watchの機械翻訳かもな
外国のお客さんは大事にするべきかもよ

72:デフォルトの名無しさん
09/07/01 00:41:49
るびまきてるね、編集乙
だが松江Ruby会議と仙台Ruby会議は福岡開催じゃNEEEE


73:デフォルトの名無しさん
09/07/01 01:52:16
>>72
ワロタwww
広島Ruby会議も栃木で開催されてるよ!

74:デフォルトの名無しさん
09/07/01 02:19:50
Ruby会議って面白いですか?
「はじめてのRuby」を一通り読んだ程度の人間が行っても場違いでしょうか?

75:デフォルトの名無しさん
09/07/01 05:30:43
教祖に有って、誤利益の有るツボとか買いたければ参加してみるのも一興。

76:デフォルトの名無しさん
09/07/01 06:54:36
>>72-73
普段どういうコードを書いてるか目に浮かぶようだ

77:デフォルトの名無しさん
09/07/01 10:11:31
Ruby ユーザの質は PHP みたいですね

78:デフォルトの名無しさん
09/07/01 11:12:35
>>77
仲の悪い奴らを一緒に語ると、変なのが湧いてくるからやめてくれ。

79:デフォルトの名無しさん
09/07/01 14:31:17
そもそもperlの再発明だしね。

80:デフォルトの名無しさん
09/07/01 15:24:28
rubyはperlの…とは良く言われるが、一体rubyのどこがperlな訳?
perlオリジナルの機能でrubyが模倣したモノって何よ?

81:デフォルトの名無しさん
09/07/01 15:25:40
>>80
模倣じゃなくて劣化再発明
だからRubyはPerlではないし、Perlの代わりにはならない

82:デフォルトの名無しさん
09/07/01 15:40:54
やっぱり無いんだ、そもそもperlこそがパクリ言語だもんな
そーゆー意味では劣化再発明と言うのは当たってるか

83:デフォルトの名無しさん
09/07/01 16:01:39
RubyがBlack PerlをパクってZen of Rubyを隠しコマンドに入れたのは超有名

84:デフォルトの名無しさん
09/07/01 16:51:33
コマンドラインオプションとかif/unless修飾子とかredoとかだってグーグル先生が
あとperlが出典かわかんないけど、メソッドだと同じ名前のものが腐るほどあるよな

85:デフォルトの名無しさん
09/07/01 18:37:48
他の言語からも取り込みまくってるから、perlと特に似てるって感じではない
いろいろな言語のいろいろな特徴・アイデアを取り込んだのがRuby

強いて言えば、主な用途(スクリプティング、文字列処理、Web)がperlと似てるか


>>83
詳しく

86:デフォルトの名無しさん
09/07/01 22:57:04
perlっぽい使い方を想定してる所は有るね。
松本教祖謹製perlってところか。

87:デフォルトの名無しさん
09/07/01 23:38:09
perlパクってるくせに
perlからの脱却とか言ってperlの悪口ばかり言ってるのも面白いよね

88:デフォルトの名無しさん
09/07/01 23:47:24
>>87
こんなところにまでわざわざご苦労様です

89:デフォルトの名無しさん
09/07/01 23:49:07
rubyはawkのパクり。

90:デフォルトの名無しさん
09/07/01 23:54:52
とりあえず国産言語だから、という理由で覚えてみてる。
scala見たいな別の言語が出てきたら使いたいなー


91:デフォルトの名無しさん
09/07/02 00:46:08
でも国産言語だと世界でメジャーじゃないのがねえ。

主要OSが英語圏で作られてるから、利用環境が充実しない。
plやpyと比べると(ry

92:デフォルトの名無しさん
09/07/02 00:59:57
むしろ国産言語じゃ世界的に普及しまっくてる方じゃね?

93:デフォルトの名無しさん
09/07/02 01:03:09
>>87
だからperlからパクったものをあげてみろって
今んとこ出てるのはif,unless(while,until)修飾子とredoな
# 関数名とメソッド名が似通ってるのはUNIX文化から来てるからperlは関係ない

どうせperlもrubyも他の言語もロクに使ったこと無いんだろ?

94:デフォルトの名無しさん
09/07/02 01:10:03
>>92
まがりなりにも世界的に利用者のある国産言語と言われても思いつかない
KL/1ぐらい?Prologの世界では有名なのかも分からんが、
とてもメジャーとは言いがたいと思う

95:デフォルトの名無しさん
09/07/02 01:18:19
お堅い洋書を読んでいてもRubyの名前は当然のように出てくるぞ

>>93
pack/unpack, shift/unshiftなんかはPerl起源っぽくない?

96:94
09/07/02 01:20:54
あああRubyを除いての話

97:デフォルトの名無しさん
09/07/02 01:52:35
>>94
Lisp 界隈だと KCL (Kyoto Common Lisp) とか ISLISP くらいかねえ
まあ、 KCL は言語じゃなくて処理系だし、 ISLISP は ISO 標準のわりにあまり見掛けないけど

98:デフォルトの名無しさん
09/07/02 05:02:39
>>95
その手の関数はC等で良く使われる手法を、perlでは言語標準にしただけだと思う
perlの関数はunix-cやawkの関数がそのまま使われてるし、他の言語もだいたい同じ
むしろ同じ機能なのにわざわざ別の名前にされても憶えるのが面倒だし混乱の元だから
パクリと言われても同じ名前をつけてくれる方が使う側としてはありがたい

99:デフォルトの名無しさん
09/07/02 06:00:57
Rubyは国産でも日本語対応がいいわけじゃないから何のメリットもないよ

> Ruby(ルビー) †
> 日本産ではあるが日本語の取り扱いは他の言語と同レベルで、特にRubyとしてのアドバンテージはない。

100:デフォルトの名無しさん
09/07/02 06:32:18
標準で日本語の文字コード変換機能を備えてる訳でもないしな。

101:デフォルトの名無しさん
09/07/02 09:12:18
>>99-100
( ゚д゚)ポカーン

102:デフォルトの名無しさん
09/07/02 09:23:08
>>100は皮肉だろ。たぶん

103:デフォルトの名無しさん
09/07/02 10:45:01
>>93
コマンドラインオプションは既に出てるでしょ。
あと、特殊変数の類はほぼ全部perl由来だね。
それに絡んで、Kernelの一部のメソッド類が$_を特別扱いするのもperl由来。

104:デフォルトの名無しさん
09/07/02 12:05:42
> 日本産ではあるが日本語の取り扱いは他の言語と同レベルで、特にRubyとしてのアドバンテージはない。

どこからの引用だそれ?

1.8 までの文字列は 8 ビットスルーで、どんな文字コードでもトラブらないように
作られてるし、1.9 の i18n は、文字コードフェチの夢実装屋の悪夢の CSI が
実現されてるしで、日本語対応は他のスクリプト言語と比べて特徴的な所
なんだが。

検索したら、プログラミングスレまとめ in VIP、かよ。
訂正してやる気も失せる VIP クオリティだな。

105:デフォルトの名無しさん
09/07/02 12:12:31
パクっただのなんだのなんてネタは前世紀で終わらせとけよw

106:デフォルトの名無しさん
09/07/02 12:59:23
なぜこんなに多くの人が日本語の扱いに困っているんだろう。
それを考えてみることも必要。

107:デフォルトの名無しさん
09/07/02 13:01:13
> 多くの人が日本語の扱いに困っている

困ってるのか?

108:デフォルトの名無しさん
09/07/02 13:12:38
>>106
バカだからだろw

109:デフォルトの名無しさん
09/07/02 13:23:37
Ruby ユーザの日本語の認識は PHP の mb_* 並ですね

110:デフォルトの名無しさん
09/07/02 13:41:08
辞書順ソートが標準でできないとダメとか言いたいのか?

111:デフォルトの名無しさん
09/07/02 17:51:07
>>87
スリップストリームに使う車体は
追い抜くためにありますので。

112:デフォルトの名無しさん
09/07/02 23:21:01
>>104
> 日本語対応は他のスクリプト言語と比べて特徴的な所
日本語対応…?
対応…?

113:デフォルトの名無しさん
09/07/03 01:06:20
JISで統一すれば良かったのに、EUCとかSJISを使い続けるのを許してた。
結局、UTFなんて新しいコードがもう一つ増えたしなあ。
欧米だと、utfとascii/iso8859がちゃんとマップしている。

114:デフォルトの名無しさん
09/07/03 01:10:23
今さら去年のRubyConfでのmatzの基調講演を見たが、
ことさらloveだとか強調されるとキモい

115:デフォルトの名無しさん
09/07/03 01:49:57
Ruby愛を語った講演というと、むしろRuby会議2007のDave Thomasを連想する
生で見たことはないが、ニコニコ動画に転がってたと思う
ユーモアたっぷりにRubyを語ってるのは面白かったw

116:デフォルトの名無しさん
09/07/03 02:00:56
C(++)系のプログラマに pack/unpack を直感的に理解してもらう
うまい説明の仕方ってあるだろうか?


117:デフォルトの名無しさん
09/07/03 02:17:19
>116
ソースコードを読ませる。

118:デフォルトの名無しさん
09/07/03 02:35:41
>>116
Cで構造体なんかをfread/writeするコードと
Rubyでpack/unpackするコードを並べて見せればいいじゃまいか

119:デフォルトの名無しさん
09/07/03 04:04:30
char* <=> struct* のキャストにbase64等の便利機能を加えた物、とか

120:デフォルトの名無しさん
09/07/03 08:49:39
それCで書けるなら、Cのほうがいいって結論に成る。
おまいらだと、rubyで書ける事をわざわざCで書かないだろ。

121:デフォルトの名無しさん
09/07/03 08:51:15
むしろC/C++プログラマの方が理解しやすいだろ
ネイティブのintとかエンディアンがどうこうとか日常だし

122:デフォルトの名無しさん
09/07/03 09:51:45
この論点のずれ具合が巨大掲示板の醍醐味。

123:デフォルトの名無しさん
09/07/03 10:42:33
pack/unpackなんて実質的にCプログラマのための機能だろう。
直感的にもなにも、C構造体そのものやん。

124:デフォルトの名無しさん
09/07/03 12:23:48
すいません。どなたか、初心者スレたててください(´・ω・`)
おながいします

125:デフォルトの名無しさん
09/07/03 12:32:03
>>123
あれはRubyらしく操作するということをハナから放棄したシロモノだよね

新しく再構成したRuby専用インタフェースを覚えなおすのとかめんどくさいから流用というのもあるんだろうけど

126:デフォルトの名無しさん
09/07/03 12:41:00
初心者スレって意味あるのか?

127:デフォルトの名無しさん
09/07/03 12:44:48
そりゃ初心者は一定数いるだろうし、
初心者が卒業する一方で新しい初心者も出てくるだろうし
大抵の言語スレで初心者スレがあるのを見ても、あったほうがいいんでない

128:デフォルトの名無しさん
09/07/03 12:54:14
スレ立てトライしてみる

129:デフォルトの名無しさん
09/07/03 12:58:46
Ruby 初心者スレッド Part 29
スレリンク(tech板)

130:デフォルトの名無しさん
09/07/03 13:01:50


131:デフォルトの名無しさん
09/07/03 14:28:28
>>113
EUC-JPもShift_JISもJISベースですがなにか


132:デフォルトの名無しさん
09/07/03 15:08:43
だから何なのかサッパリわからんレスの最後に、なにか、とか書かれてもな。

133:デフォルトの名無しさん
09/07/04 12:13:23
Shift_JIS と名乗って CP932 の文字使ってる Web ページは爆発しろ
あと ~ と 〜 でどうにかなるページももれなく爆発しろ

134:デフォルトの名無しさん
09/07/04 14:33:05
どか〜ん

135:デフォルトの名無しさん
09/07/04 14:46:00
ラテン文字入ってるのに us-ascii と名乗ってるページがあるのと同じようなもんかな、と思うことにしてる

136:デフォルトの名無しさん
09/07/04 17:59:45
何も言わないと、iso8859が仕様ですがなにか?

137:デフォルトの名無しさん
09/07/04 18:10:17
ラテン文字てーと
ABCDEFHIKLMNOPQRSTVWXZ
こうですか。Gもか。



138:デフォルトの名無しさん
09/07/04 18:16:28
>>136
US-ASCIIって名乗ってるって言ってるじゃん

139:デフォルトの名無しさん
09/07/07 09:34:04
しつもんー
Ruby は外部 iconv のバージョンとか構成とか関知してないよね
WINDOWS-31J が使えない Iconv モジュールとか存在しうるよね
でも SHIFT_JIS は期待していいよね

140:デフォルトの名無しさん
09/07/07 09:45:11
URLリンク(www.gnu.org)
> Japanese
>   EUC-JP, SHIFT_JIS, CP932, ISO-2022-JP, ISO-2022-JP-2, ISO-2022-JP-1

この6つは存在するものとして扱っていいと思う

これ以外はシステムに存在しなかったときのエラー処理が要るな
エラー処理ったって何すればいいのかさっぱりわからんが(w
自前で変換表持って置換でもすればいいのか?

141:デフォルトの名無しさん
09/07/07 20:46:44
ISO-2022-JP系で使ってるようなエンコーディングを
外部とのデータ交換用ではなく内部で使おうとするのは
かなり技術的なセンスが欠落してるよな

まだ昔のX-Multiがやってたような
独自の固定長のコード体系の方がマシというか

142:デフォルトの名無しさん
09/07/07 20:48:51
メール前提だと文字化けしない事が重要なので、一切変換せず扱えるのも大きい。
バイト文字列として扱えば良いけどね。

143:デフォルトの名無しさん
09/07/08 00:03:58
これからの時代は文字コードはUnicode系しか認めん。
みんながテキストファイルをUTF-8にしておけば文字コード関係のトラブルは格段に減るのに。

144:デフォルトの名無しさん
09/07/08 00:19:07
メール程度の日本語を使いたいだけならUTF-8一択で問題が極小になるという
現代の真実が主流になるのは一体いつのことだろう。
Outlookか?Thunderbirdか?鶴亀か?Beckyか?正直何が悪いんだ?

145:デフォルトの名無しさん
09/07/08 08:33:31
フォントとグリフと文字集合とエンコーディングを分けて話さないと
CSIの怖い人がきそうだな


146:デフォルトの名無しさん
09/07/08 09:09:34
文字集合とエンコーディングとcharsetを区別して
(定義を暗誦するとかではなく)日常的に使える人は日本で一握りだろうな

147:デフォルトの名無しさん
09/07/08 10:42:18
言語と用字(スクリプト)の区別とかもだねー。



148:デフォルトの名無しさん
09/07/08 23:31:08
オブジェクト指向だと、メソッドの長さは15行程度ってえらそうな人が書いてたですが
そんなものなの?…

149:デフォルトの名無しさん
09/07/08 23:41:37
>>148
そうとは限らないが、たいてい短い方が好ましいのは確か

とはいえ、重要なのは「処理内容がきちんとメソッドに分割されているかどうか」だから
長さそのものが問題になるわけではない

150:デフォルトの名無しさん
09/07/09 00:10:03
なるほど…しっかり分割していけば、だいたいその程度に収まる事が多い
という感じか・・・

151:デフォルトの名無しさん
09/07/09 00:18:58
javaはクラスやメソッドが長いって馬鹿にするやつが多いけど
あれはeclipseで補完するもんなのにわかってないおん

152:デフォルトの名無しさん
09/07/09 00:32:54
補完機能つきの重量級IDEを使わないと仕事にならないということですね、分かります

153:デフォルトの名無しさん
09/07/09 00:42:23
しかしIDEでの補完を使えば、LL言語よりも生産性は上がる。
なにしろ、変数の型付けが厳格で、定義していない変数は使えないから、
単純なミスタイプなら、遅くともコンパイルする段階で防げる。
これはちょっとしたことのようでかなり大きい。

154:デフォルトの名無しさん
09/07/09 00:55:12
>LL言語よりも生産性は上がる
問題の種類による。ウォーターフォールで仕様策をガッチリきめて
作り始めるならともかく、形を考えながらプロトタイプを
チャッチャと作ってすぐ練り直す問題(今はほとんどがこれ)だと
LL言語のほうがメリットが大きい。

鶏を裁くのに牛刀を使う必要はないってこと。


155:デフォルトの名無しさん
09/07/09 01:01:34
LL言語て

156:デフォルトの名無しさん
09/07/09 01:04:36
牛刀で鶏なんて表現知らなかった・・・
あまりに上手いこと言えてて誰かの名言か何かと思えば故事だったのか

157:デフォルトの名無しさん
09/07/09 01:11:20
漏れが知ってるぐらいだから結構知られてる表現じゃないか

>>155
AST木ってのを見たことがある

158:デフォルトの名無しさん
09/07/09 01:47:56
RAS症候群はわかりやすい意思疎通を行おうとする正常な人間の証だろ

そういうことを言い出すと、
DVDディスクとか、IT技術とか、LCDディスプレイとかBB弾とか
HIVウィルスとかBS放送とかもダメになる。そんな馬鹿なことはあるまい。


159:デフォルトの名無しさん
09/07/09 02:06:11
>>158
ほう、現在のDVDが何の略かご存知とお見受けする
ぜひ御教えを請いたいものだ

160:デフォルトの名無しさん
09/07/09 02:27:42
今のDVDはDVDの3文字を擁する規格だからな
まーどうでもいいっちゃどうでもいいが
あと「LL言語」は日本語としては普通
LLとだけ書かれてもよーわからんし、読むときもLの部分だけ訳して考えてなどおるまいて

プログラムとしてではなくプログラミング最中の静的言語のメリットは完全な補完ができることだろ
Rubyの補完なんて文脈なしで文字列としてしかできんからへぼいことこのうえない
まあそれでもけっこうなんとかなるこたなるんだが、Javaのようなものとは比べるべくもない

161:デフォルトの名無しさん
09/07/09 03:18:01
「軽量言語」でええじゃろ

162:デフォルトの名無しさん
09/07/09 06:52:36
普通にLLつってるな。
文脈でわかるもんだし。

163:デフォルトの名無しさん
09/07/09 07:14:23
LLと呼び習わされる言語群、という程度の意味合いしか持たせてないからLL言語と言ってる
そんな引っかかるほど頻繁に使う言葉じゃないし

セミナとかで使いまくってるような人はまた違う感覚があるのだろう

164:デフォルトの名無しさん
09/07/09 11:05:35
>>151
名前の長さの話なんか誰もしてないぞ。

165:デフォルトの名無しさん
09/07/09 11:14:11
>>151ではないが名前の長さのことなんて言ってないと思うぞ

RubyでもIDEを使えばけっこう構文エラーチェックがされて楽だけどな

166:デフォルトの名無しさん
09/07/09 11:26:13
Java の Eclipse に負けている Ruby の emacs/vi の機能ってなに?

167:デフォルトの名無しさん
09/07/09 11:39:09
>>166
はやーい

168:デフォルトの名無しさん
09/07/09 11:57:41
eclipse のほうが遅い

169:デフォルトの名無しさん
09/07/09 12:05:47
Emacs や vim のほうがエディタとしての体をなしている、というあたりだな

べつに、Eclipce で完結してるならそれはそれでいいじゃんね
Emacs や vim を試して「○○機能がないからこれではプログラミングできない」と考えたなら使わなきゃいいんだしさ

170:デフォルトの名無しさん
09/07/09 12:37:02
irbでのタブによるオートコンプリートやvimのオムニ補完が存在することから考えれば、
rubyをはじめとしたスクリプト系言語でもabbrev以上のレベルの補完機能は
普通に需要があると思うけどね

動的言語ゆえの実装の難しさから実装例が少ないだけの話を
「LLに補完は不要」といわんばかりの主張にすりかえちゃうのは
いわゆる酸っぱいブドウでしかないよねえ

171:デフォルトの名無しさん
09/07/09 12:46:58
irbのは実行中のインスタンスバイナリが手元に存在してるからできる芸当だろ

あるクラスに対して略語展開以上の妥当なメソッド名や変数名候補を提供するには
「クラスの実際のパースとモジュール参照の解決だけを行うがインスタンス生成はしない」
ということをする必要があるが、それはつまり普通にスクリプトの実行だよな

172:デフォルトの名無しさん
09/07/09 12:56:21
もっと言っちゃうと、
「区別のために関数名を長くして、
 使用時の利便性は環境による補完などのアシストで補う」
っていうアプローチって、静的言語によく使われている手法ではあるけど、
そもそもの元祖ってLISPのREPLだからむしろ動的言語側から
発生したアイデアなんだよねw

関数名を長くするか小さくするかなんて言語を利用する際の
考え方の違いでしかなくて、
動的か静的かなんて観点とは直交なんだけど、
歴史を知らない人って目先の相違点で近視眼的に敵味方を分けちゃうんだよねー。

173:デフォルトの名無しさん
09/07/09 12:58:41
えー、

class C
eval("def hoge; end")
end

C.new.

この時点で hoge が候補に出てきて欲しいということ?

174:デフォルトの名無しさん
09/07/09 13:05:06
>>173
それが出ないのはさすがに諦めていいんじゃないかと思う。

175:デフォルトの名無しさん
09/07/09 13:10:09
じゃあ何が自動で出て欲しいのよ
require した完成済みのクラスやモジュールのメソッド?
作ってる最中のコンパイルエラーのクラスのメソッド?
今まさに書いてる引数に指定してもエラーを起こさない妥当なクラスが入ってる変数名?

176:デフォルトの名無しさん
09/07/09 13:10:54
実際Netbeansは内蔵のjrubyで解析かけてるし、vimもrubyと連携してオムニ補完してるんだけどね。

実用上役に立つレベルにもっていくにあたって
エディタのコードハイライトみたいなお手軽な実装量で済まないのは確かだけど、
やれば出来るし、動く現物が今存在するわけだしねえ。

そもそも補完に完璧を目指す必要なんかなくて、
使用する際の8割でアシストが出来るなら5倍の効率化だし、
9割効くなら10倍の効率化になるわけだし。



177:デフォルトの名無しさん
09/07/09 13:17:59
> require した完成済みのクラスやモジュールのメソッド?
これは ri あたりから引いてくるのが既にあるな
fastri が動作しなくなって久しいが

> 作ってる最中のコンパイルエラーのクラスのメソッド?
変な書き方してると補完試すたびにスクリプト片が中途半端に動作して
テストサーバに接続とかそういうことが起きそうで怖い
というか現在のバッファに書いてあるなら動的略語展開でなんとかならんか

> 今まさに書いてる引数に指定してもエラーを起こさない妥当なクラスが入ってる変数名?
これは無理だろ、型の情報がない

178:デフォルトの名無しさん
09/07/09 13:25:21
>>177が最近の技術に疎いだけというオチがつく悪寒
vimの奴のソースでも見てみたらいいんじゃね?

179:デフォルトの名無しさん
09/07/09 13:29:02
そのへんで楽したいなら無理せずにJavaやれよJava
静的言語は素晴らしいって実感するぞ

180:デフォルトの名無しさん
09/07/09 13:31:00
Java をずっとやってきて、動的言語の素晴らしさを実感しているけど?
用途によるね。

181:デフォルトの名無しさん
09/07/09 13:35:09
Rubyでメソッド引数の型をアノテーションか何かで註記する標準的な方法って
無いの?
いくら動的型だからって、或る程度想定してるクラスの範囲ってあるでしょ?

182:デフォルトの名無しさん
09/07/09 13:37:45
>>181
マジでなんもないよ
必要なメソッドさえ動作すれば何でもいいから

マニュアル的に注釈をする方法は、マニュアルシステムによっては存在するけど、案の定全く流行ってない

183:デフォルトの名無しさん
09/07/09 13:41:53
よくわからんけど、
Eclipse(Aptana Rad Rails)より Netbeans Ruby のほうが、
補完の候補が出てくるのが速い気がする。

184:デフォルトの名無しさん
09/07/09 13:43:59
まあメソッド定義から与えられた引数がどう使われるか(どんなメッセージがsendされるか)
追跡して、引き数に指定できる変数を絞り込むぐらいなら出来る。

method_missing使ってどうこうしてるようなケースじゃ厳しいが。
まあ完璧である必要もないしな。

185:デフォルトの名無しさん
09/07/09 13:53:54
>182
えーと、逆に言えば、メジャーなマニュアルシステムを選べば、
標準的とまでは言わないまでも、まぁまぁ一般的な型の註記法があるって感じ?
例えば?

186:デフォルトの名無しさん
09/07/09 13:55:27
>>182
yard流行ってないよね
URLリンク(yard.soen.ca)
最初はきちんとクラスを書いていたものの「Rubyだとホントはどんなクラスでもいいんじゃね??」とか
気づいてしまった人が多いのではないかと推測

# 挨拶する
#
# @param [String] name 挨拶する対象
def hello(name)
 puts "hello, #{name}"
end

# 家にいるかどうかをチェック
#
# @return [true, false] 家にいるかどうかの真偽値
def at_home?
 # check
end

187:デフォルトの名無しさん
09/07/09 14:04:09
>>186
yardoc の引数のはたくさん書かなきゃいけなくなるからめんどくさくなるんだよ
each で回せればなんでもいい場合は [#each] とも書けるが、必要なメソッドったって結構あるしなー

188:デフォルトの名無しさん
09/07/09 14:08:32
マニュアル書くのめんどいメソッドは駄目メソッドという教育効果が

189:デフォルトの名無しさん
09/07/09 14:13:24
>186
それはわざわざ書き方がめんどくさいのを選んでるせいかも?

ScalaかHaskell的なシグネチャが有れば十分じゃない?
その例で言えば、こんな感じ
hello : String => nil # Scala的書法
hello : {def to_s: String} => nil  # ScalaのStructual Typing的書法
hello :: String -> nil # Haskell的書法

190:デフォルトの名無しさん
09/07/09 16:01:31
is_a? ではなく respond_to? で制限をかけることを思いついた
が、使うメソッド全列挙がめんどいのでやっぱり駄目だな

191:デフォルトの名無しさん
09/07/09 16:20:01
respondで縛ると結局JavaのXXXableインターフェースみたいになっちゃうからね

指定が煩雑な割に完全に型が決定できるわけでもないから
JavaのうれしくないところとRubyのうれしくないところが悪魔合体したような有様に

192:デフォルトの名無しさん
09/07/09 16:30:29
phpunit なら PHPDoc をある程度自動生成するのにね
yardoc を生成するのを作ったら

193:デフォルトの名無しさん
09/07/09 16:51:54
いや、その、なんていうかだな、yard の @params のクラス名称の8割くらいの用途は、
実は引数の名称で用が済むんだよ

引数の名称に data とか e とか使いまくってるならまだしも、
普通は相当の意味のある引数名になってるだろ

 def hoge(str, params)

って書いてあったら、str はよっぽどでなけりゃ String だし、
params は意表をつく攻撃をする意図がなければたいてい Hash だろ
それ以上の情報は @params のクラス名称でもわからんわけだしな

194:デフォルトの名無しさん
09/07/09 17:02:31
それゆえに真面目にyardを書いても大してうれしくないという話になり、
今のまんまでいいじゃん、でここまで来たのが現状だからなあ

195:デフォルトの名無しさん
09/07/09 17:12:54
変数名に「str」ってハンガリアン記法の問題そのままだなw

196:デフォルトの名無しさん
09/07/09 17:18:59
yardoc の一番よくないところは、必死でクラスを書いても現時点で特にメリットがないということ
このクラスを利用して補完がうまく動くぜーということも特になく、マニュアルの行が1個増えるだけ

マニュアルを読むときの話なのなら説明文やそれこそ引数名を直接読んでもらえれば
クラス名なんて不完全な情報だけどころか意図まで全部わかるわけだ

197:デフォルトの名無しさん
09/07/09 17:23:55
>>195
title_string_or_empry_when_tag_contains_nothing_or_nil_when_tag_itself_doesnt_exist_called_by_HTMLParser_ParsedData_title とか
そういう一発で内容がわかるほうがいっすか

198:デフォルトの名無しさん
09/07/09 17:30:40
>>196
まあrdocの代表的な実装が、メソッド名クリックとかで
該当部分のソースを見れるようになってるのが
その辺の現実を如実に示してるよね。

>>197
責務を分割しろとかパッケージ化して共通の修飾部を外せとか言われるんじゃね
つうかstrが文字列だとわかると嬉しいのかどうかってのがよしあしの分岐点だよな

199:デフォルトの名無しさん
09/07/09 17:39:45
// i に 100 を代入する
i = 100;

のような「見ればわかることまでいちいち書かんでええ」系のツッコミの適用範囲が
Ruby ではえらい広いから
どこまでコメント書くべきなのか書かなくてもいいもんかちょっと迷う

200:デフォルトの名無しさん
09/07/09 18:02:25
>>197
意味分からない。

ハンガリアン記法と同じ問題を抱えてると具体的に書いたのだが、
なんでそんなに見当違いのレスがくるんだ?

201:デフォルトの名無しさん
09/07/09 18:13:01
CやJavaのような強く型付けされた言語と違って、引数の型情報のないLLでは
引数の名前に型名情報を加えたほうが使いやすい場合も多いだろう。
Smalltalkだと、aString, anEvent, aRectangle, xNumber, yNumberみたいに書いたもんだ。
この場合は、変数の役割よりも型名のほうが偉い。


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

5371日前に更新/227 KB
担当:undef