Ruby 初心者スレッド Part 61at TECH
Ruby 初心者スレッド Part 61 - 暇つぶし2ch150:デフォルトの名無しさん
17/09/08 20:25:09.24 dCkrwQvc.net
でも、違うクラスのほうを見にいって、うまく動作しないはめになりそうだけどな。

151:デフォルトの名無しさん
17/09/08 21:38:34.51 K2jDcQfO.net
適当なモジュールを定義して、
そのモジュールに対してmodule_evalでファイルを評価させるとかどう?
ファイル側はトップレベルでのloadを想定してるだろうから、何らかから派生させたモジュールを用意する必要があると思うけど
kernelだったかmainだったか
で、同名のファイルも別のモジュールでeval

152:デフォルトの名無しさん
17/09/09 08:22:23.23 A2Lkc5St.net
ヤフー株式会社が中途採用していたので応募した。
会社半休とって、深夜01時までかけて、写真付き履歴書、職務経歴書(必須提出書類)つくった。
火曜に提出、金曜に不採用通知が来た。
ショック!でもまあ、さすが爆速開発の会社。
まあ、しょうがない。

153:デフォルトの名無しさん
17/09/10 21:05:31.91 16Gqj/Qh.net
RubyはマルチパラダイムなLLって言われるけど、
ほんとどんな書き方でも可能だよな
逆に、他の言語で可能だけどRubyじゃできない書き方って何かあるの?

154:デフォルトの名無しさん
17/09/10 21:08:03.14 n6o1Bnrv.net
n++

155:デフォルトの名無しさん
17/09/10 21:29:31.42 E1NtPZfm.net
パターンマッチ
参照渡し
Null非許容参照型

156:デフォルトの名無しさん
17/09/10 21:31:59.45 CfAD8p5O.net
>>150
少し前にあるけど
同じ名前の2つの異なるモジュールを
それぞれ別名でロードして使うことが簡単に出来ないみたい

157:デフォルトの名無しさん
17/09/10 22:01:26.40 /lqG1P6W.net
>>150
インテリセンスのような、洗練されたIDEサポート。

158:デフォルトの名無しさん
17/09/10 22:08:47.22 pWB+7BVh.net
>>150
なので、他人の読むほうからしたら悪夢のような言語

159:デフォルトの名無しさん
17/09/11 03:20:30.57 jNI6u+LE.net
こりゃあ自演やってますわ
晒しage

160:デフォルトの名無しさん
17/09/11 03:47:13.89 uZhmkQHT.net
嘘をつかないとネガキャンもできないとか、
どんだけこの言語は強力なんだよ

それ程rubyが怖いの?

161:デフォルトの名無しさん
17/09/11 04:39:33.36 0SM4UhfV.net
こんなやつらばっかりじゃそりゃpythonに負けるわけだw

162:デフォルトの名無しさん
17/09/11 05:07:13.86 VvF2iP9D.net
>>150
Lispのマクロ
Prologのユニフィケーション

163:デフォルトの名無しさん
17/09/11 05:26:08.54 uZhmkQHT.net
python騙るなボケ
このpythonの恥さらしが
勝利宣言なんか負けですと言ってる様なもんだろ

164:デフォルトの名無しさん
17/09/11 05:49:53.28 qwui3b48.net
書き方を聞いたんだけど、なんで答えてるレスはどれも同じ様な勘違いしてるの?
もしかして自演するほどRubyが怖い?

165:デフォルトの名無しさん
17/09/11 06:11:35.71 6TazFtUw.net
使えない言語ならそもそもアンチなんて湧かないし
使える言語だからこそ怖いんだよ

166:159
17/09/11 06:50:21.08 VvF2iP9D.net
>>150
>>159
>>161
Prologのパラダイムは論理型でそれを
Rubyは標準でサポートしてないから
「マルチパラダイム~」の反証になってる

167:デフォルトの名無しさん
17/09/11 07:01:29.60 6TazFtUw.net
嘘を付いてまでネガキャンしてる人がいるから言語の話は無理だと思うよ
もうちょっと荒れていない時を見計らったら?
それに、それ、異論がばんばん出そうだし

168:デフォルトの名無しさん
17/09/11 09:25:49.87 9tUjHIzk.net
クラスはClassクラスのインスタンスだってのがよく判らん。
Fixnum, String, ArrayもClassクラスのインスタンスだって事らしい。
こんな仕様が一体、何の役に立つんだ?

169:デフォルトの名無しさん
17/09/11 09:28:34.16 9tUjHIzk.net
インスタンスなのだから、クラスのメソッドをもちろん呼べる。スーパークラスのメソッドも呼べる。
それから、Classクラスのメソッドも呼べる。こういう仕様にしたかったという事なのだろうか?

170:デフォルトの名無しさん
17/09/11 09:43:53.15 9tUjHIzk.net
Classクラスにインスタンス変数を定義すれば、すべてのクラスのクラス変数(Static変数みたいなもん)となる。
class Class
attr_accessor :foo
end
class Foo;end
Foo.foo = 10
puts Foo.foo # => 10
どうやら、こういう事が出来る様になるらしい。

171:デフォルトの名無しさん
17/09/11 09:50:42.79 R+JnAI3g.net
どのサイト見てそういう話になっていっているのか少し気になる
Webサイトは焚書できないからな

172:デフォルトの名無しさん
17/09/11 10:03:46.95 9tUjHIzk.net
BasciObject, Objectがクラスで
Kernel, Moduleがモジュールだ。
ClassはModuleを継承したクラスだ。Classにあるメソッドは、new, superclassだ。全てのクラスはClassのインスタンスなので、
Foo.new, String.new, Foo.superclass, String.superclassといったクラスメソッドを呼び出す事ができる。
ModuleにはRubyのリフレクション機能を実現するメソッドやeval族がある。
例:nacestors, instance_method, method_defined?
例:class_eval, instance….おっと、instance_evalはBasicObjectにある。

うぅーん。独特な世界観だ。

173:デフォルトの名無しさん
17/09/11 10:05:04.24 9tUjHIzk.net
>>168
みてるのは、『メタプログラミングRuby」第一版。

174:デフォルトの名無しさん
17/09/11 10:08:48.21 9tUjHIzk.net
あと見ているのは、Ruby 2.0.0 Reference Manual。macOS SierraにはRuby2.0が最初から入っているから、ちょいと古いRubyを使ってる。
Ruby2.2あたりでGCの改良があって、その関係でSecurity重視のWebアプリ作る場合は、2.0はNGらしい。
誤解してる?

175:デフォルトの名無しさん
17/09/11 10:10:47.61 OodeiMD8.net
そういう問題じゃなくて、Webアプリ作るなら実行環境と開発環境をなるべく同じにするのは当たり前。
特にRubyみたいに互換性のいい加減なものを使うなら尚更のこと。

176:デフォルトの名無しさん
17/09/11 10:15:39.57 hxvjUFQQ.net
webサーバやDSLの主流言語の一つって時点で他の主要言語を繋げて扱える上に手軽だから
使える人が増える事はあっても、減ることは無い
そしてRuby恐怖症患者が恐れているのはこの部分だと思う

177:デフォルトの名無しさん
17/09/11 10:17:31.55 9tUjHIzk.net
俺的ざっくりRubyのバージョンによる違い。
1. 2.0 - 2.1は1.9.3のbugfix版
2. 2.2 - 2.4はGC改良されてるが、言語仕様的には1.9.3と大差無い。
Fixnum, BignumがIntegerに統合された(2.4)とか、String Literalがdefaultでfrozenされている(2.3)とか、細かな仕様変更があるが、俺への影響は無いな。

178:デフォルトの名無しさん
17/09/11 10:21:25.75 9tUjHIzk.net
俺:昔Ruby1.8 - 1.9.2の頃、WebスクレイピングをRubyでやってた。Mechanizeとか便利だぁ。。。とか言いながら。その頃DSLなんてあまり気にしなかった。
しばらくXcodeばかりいじって居て、Rubyに戻ってきたら2.4になってた。SinatraとかRailsとか触ってみたら、DSLバリバリで、これはまずいと感じて、「メタプログラミング」の本読んでます。

179:デフォルトの名無しさん
17/09/11 10:23:03.39 9tUjHIzk.net
Rubyの歴史については、en.wikipediaのRuby(programing language)のpageがよく纏まっている。

180:デフォルトの名無しさん
17/09/11 10:29:24.77 9tUjHIzk.net
今後、Ruby2.5, Ruby3.0が予定されているが、3.0の仕様は流動的みたいだ。
1. 並列処理
2. 静的型付け
1は技術的に難しそうだし、2はコミュニティに受け入れられるのか?

181:デフォルトの名無しさん
17/09/11 10:30:38.59 R+JnAI3g.net
反省している

182:デフォルトの名無しさん
17/09/11 10:31:18.51 AukiEDF0.net
>>178
はい

183:デフォルトの名無しさん
17/09/11 10:36:20.19 ggzNTq4z.net
>>165
クラス自体を処理の対象にできる。
.NETでも、Typeクラスがあったりする。
C++などではできないこと。

184:デフォルトの名無しさん
17/09/11 10:42:25.66 9tUjHIzk.net
>>180
クラス自体を処理の対象にする場面って?
一つ見つけたけど、他にある?
見つけた一つ!
1. クラスメソッドを提議

185:デフォルトの名無しさん
17/09/11 10:43:38.99 OodeiMD8.net
>>180
それは違う
Rubyのクラスはそれ自体が本当にオブジェクトだけど、
.NETのTypeオブジェクトやJavaのClassオブジェクトはリフレクションのためのハンドルに過ぎず、オブジェクトとは明確に異なる

186:デフォルトの名無しさん
17/09/11 10:48:45.33 9tUjHIzk.net
クラス自体を処理の対象にする、ってのは例えばStringクラスのsizeメソッドの仕様が気に食わん。
だったら、俺が好きな仕様に変えてやる!(モンキーパッチング)
って事ができるのは、StringクラスがClassクラスのインスタンスだから出来るってことなのかも。

187:デフォルトの名無しさん
17/09/11 10:56:59.59 9tUjHIzk.net
クラス拡張、オブジェクト拡張は
class << self; end
class << obj; end
って感じで行うが、extendメソッドを使ってもできる。
こいつがクラス拡張、オブジェクト拡張のショートカットみたいだ。
class MyClass
extend MyModule
end
こんな感じ。
class MyClass
class << self
include MyModule
end
end
こんな事しなくても良くなる。

188:デフォルトの名無しさん
17/09/11 11:14:01.54 9tUjHIzk.net
俺の備忘録、スレ汚しスマソ
aliasを使うとメソッドの再定義ができる。
String#lengthメソッドを再定義して、再定義前の実装をreal_lengthで呼び出せる様に退避させる様にする例。
class String
alias :real_length :length
def length
# anaother implementation
end
end

189:デフォルトの名無しさん
17/09/11 11:21:39.37 9tUjHIzk.net
aliasを使うと同じ実装を2つの名前で、可視性private/publicをコントロールしながら呼び出したりできる。
class C
def x; “OK”; end
alias :y :x
private :x
end
obj = C.new
obj.y # => “OK”
obj.x # => private methodだから呼べまシェーン。

190:デフォルトの名無しさん
17/09/11 12:03:38.85 ggzNTq4z.net
>>182
違わない。用途を限定しすぎ。
型を引数にできたり、型のリストが作れたり、型自体の基底クラスが存在するから可能になることがいくつもある。

191:デフォルトの名無しさん
17/09/11 14:19:18.95 VvF2iP9D.net
>>165
>クラスはClassクラスのインスタンス
>こんな仕様が一体、何の役に立つんだ?
メタプログラミング

192:デフォルトの名無しさん
17/09/11 15:26:04.86 4atU11H8.net
うわ、まだこんな言語やってるやついたんだ
endとかきめえ

193:デフォルトの名無しさん
17/09/11 15:46:37.43 y9RYm9ja.net
自分が使ってない言語の出来なんかどうでもいいだろ
関係ないんだよ、君には

194:デフォルトの名無しさん
17/09/11 15:51:37.08 9tUjHIzk.net
中かっこで、一行で治るblockを記述し、
do end, class endで複数行に渡るblockを記述する。
class endもblockらしい。
例:
class Foo
puts ‘OK’ # => OK、なんと実行されちゃう!
end

195:デフォルトの名無しさん
17/09/11 15:53:04.47 9tUjHIzk.net
class Bar
attr_accessor :a
end
これもModule#attr_accessorメソッドの呼び出し(引数:a)だって。

196:デフォルトの名無しさん
17/09/11 15:53:50.74 9tUjHIzk.net
putsはKernel#putsで定義されている。

197:デフォルトの名無しさん
17/09/11 15:55:48.32 9tUjHIzk.net
putsってグローバル関数だと思ってた。Rubyにはグローバル関数ってのは無いのか?
たしか、$fooでグローバル変数だよねぇ。

198:デフォルトの名無しさん
17/09/11 16:15:12.72 I3u+9T/v.net
ID:9tUjHIzkこそRubyを使うのに相応しい人材だ
Rubyはこうでなくてはダメだ

199:デフォルトの名無しさん
17/09/11 16:24:37.91 9tUjHIzk.net
試しにやってみた。
class Bar
#attr_accessor :a
attr_accessor “a”
end
puts (Bar.new).a = 3 # => 3
なんと、attr_accessorの引数はputsと同じ様に文字列でもOK!
調子に乗って、
puts :OK
puts :Failed NG # error
puts :”Failed NG”
うぅーん。Symbolと文字リテラルは違うはず。

200:デフォルトの名無しさん
17/09/11 17:27:22.55 ggzNTq4z.net
>>196
カンマ

201:デフォルトの名無しさん
17/09/11 17:28:46.19 VvF2iP9D.net
>>194
>グローバル関数ってのは無いのか?
ない
ただトップレベルのメソッドを
実質的にグローバル関数として利用するのは可能

202:デフォルトの名無しさん
17/09/11 18:25:05.46 VnfANrEr.net
ネガキャンはとうとう嘘まで付いちゃったか

203:デフォルトの名無しさん
17/09/11 19:01:04.46 dKd+OEyf.net
ruby 2.1
WEBrick 1.3.1
Internal Server Error
(erb):58: syntax error, unexpected end-of-input, expecting keyword_end ; _erbout.force_encoding(__ENCODING__) ^
文法エラー、予期せぬend-of-input、keyword_endを待つ;
_erbout.force_encoding(__ENCODING__) ^
って何でしょうか?

204:デフォルトの名無しさん
17/09/11 19:35:28.63 503iQjsy.net
文法エラーだろ。
まずそれを修正すれば。

205:デフォルトの名無しさん
17/09/11 20:12:04.40 Se8bNuoM.net
>>200
erbがエラー吐いてんじゃね?
template engineだから、*.html.erbに問題あるんちゃうか?

206:デフォルトの名無しさん
17/09/11 20:31:42.69 8y57wnUU.net
>>163
確かに「Rubyはマルチパラダイム言語である」の明確な反証になっているね
ところで、Python の公式文書には以下の記述がある:
  URLリンク(docs.python.jp)
  >> 複数のアプローチに対応した言語もあり、
  >> Lisp, C++, Python はそうしたマルチパラダイム言語です
故に、少なくとも Python は標準で論理型をサポートしていないから、
>>163 の主張は「Python はマルチパラダイム言語である」の反証でもある訳だ
たかだか2chの通りすがりのカキコ(>>150)どころか、
Python様の公式文書にすら堂々と反証してしまう >>163 ってスゲーよなあ(棒

207:デフォルトの名無しさん
17/09/11 20:38:54.64 I3u+9T/v.net
>>203
君もRubyとRubyコミュニティーに向いてる人材だな

208:デフォルトの名無しさん
17/09/11 20:43:18.49 wRb7h9Km.net
>>200
endを期待してるところでendが無いよってエラーだよ
_erbout.force_encoding(__ENCODING__) は
ERB#set_eoutvar内で呼ばれてる処理だけど
今の理解状況なら気にする必要ない

209:デフォルトの名無しさん
17/09/11 20:47:01.81 8y57wnUU.net
>>174
自作のRubyで書いたドキュメンテーションツールを日常的に使っているけど、
1.9 で28秒だったのが(ほんの気まぐれで) 2.4 へ変えただけで6秒になった
レスポンスが4倍から5倍変わるのは大きなインパクトだった
付け加えると、こうしてバージュンアップを繰り返してもなお
後方互換性を維持し続けてくれているのはありがたい
(もちろん自作ツールでメタプログラミングといった魔術は使っていないが)

210:デフォルトの名無しさん
17/09/11 20:50:22.49 pNAVrMoT.net
>後方互換性を維持し続けてくれているのはありがたい
ナイスジョーク👍

211:200
17/09/11 20:55:04.19 dKd+OEyf.net
>>201-202 >>205
助言くださった皆様、どうもありがとうございます。
とりあえずendを閉じ忘れていないかチェックしてみます。

212:デフォルトの名無しさん
17/09/11 21:28:47.33 8y57wnUU.net
>>207
>ナイスジョーク👍
確かに世の中にはバージョンアップしただけで、たかだか
Hello world すら動かなくなるナイスジョーク👍な言語も存在する(棒
Rubyの設計上の欠点とは何か?
スレリンク(tech板:126番)

213:デフォルトの名無しさん
17/09/11 22:10:48.79 8y57wnUU.net
>>150
>逆に、他の言語で可能だけどRubyじゃできない書き方って何かあるの?
Ruby と競合するLLで、かつ関数型というパラダイムに限定すれば、
「関数は一級市民ではない」という制限がある
これは Ruby の世界だと「メソッドがオブジェクトではない」と
言い換えることができる
具体的なコードを Python で示そう:
(注:以下は Python を例にしているが、JavaScriptでも同様なコードは書ける)
  >>> def add(x, y): return x + y  # 関数 add を定義
  ... ^D
  >>> add(1, 2)  # 関数へ実引数 (1, 2) を適用
  3
  >>> f = add  # 関数は値(=一級市民)だから、それを別の変数 f として宣言
  >>> f(1, 2)  # 変数 f へ実引数 (1, 2) を適用しても add と同じ結果になる
  3
それに対して Ruby では:
  irb(main):001:0> def add(x, y); x + y; end  # メソッド add を定義
  => :add
  irb(main):002:0> f = add # メソッドは値(=一級市民)ではないから..(略
  ArgumentError: wrong number of arguments (given 0, expected 2)
     from (irb):1:in `add'
  from (irb):2
  from /opt/local/bin/irb:11:in `<main>'

214:デフォルトの名無しさん
17/09/11 22:53:57.56 /+/7clo/.net
ブロックがオブジェクトじゃないのはほんと糞
Rubyは基本的に嫌いじゃないけどこれだけは擁護できないわ

215:デフォルトの名無しさん
17/09/11 23:30:33.81 503iQjsy.net
いや、ふつう。
必要であればlambdaにすればよし。

216:デフォルトの名無しさん
17/09/11 23:51:41.69 dZxzu+uY.net
>>210
f = method :add
p f[1,2] # => 3

217:163
17/09/12 00:16:04.48 EWvqPynr.net
>>203
「マルチパラダイム」への反証じゃなくて
「どんな書き方でも可能」への反証
「他の言語で可能だけどRubyじゃできない書き方」の例証でもある

218:デフォルトの名無しさん
17/09/12 00:26:02.80 FDETfUWp.net
メソッド呼び出し時の括弧をオプショナルにしてるから
f = add みたいなのは出来ないよね
でもそういう使い方をするときはメソッドじゃなくProcオブジェクト使う
だからObject#methodを実際のコードで使ったことはない

219:デフォルトの名無しさん
17/09/12 00:37:53.72 JOxdLua/.net
俺が質問したのは書き方
Rubyは純オブジェクト指向で書けるし、関数言語的な書き方も可能�


220:Aワンライナーやダックタイピング、メタプログラミングも書ける だから逆に他の言語で実用的な書き方を挙げてほしかったんだけど



221:デフォルトの名無しさん
17/09/12 01:09:50.45 HQWpPXKt.net
n++

222:デフォルトの名無しさん
17/09/12 01:10:31.53 HQWpPXKt.net
rubyの連中は、初心者、日本人をバカにするからきらいだ

223:デフォルトの名無しさん
17/09/12 01:11:34.30 HQWpPXKt.net
マルチパラダイムの言語をしらべればいいだろ
D, pike, いろいろある

224:デフォルトの名無しさん
17/09/12 01:12:37.06 K8M+GTE7.net
>>215
何でそんな言い訳がましい書き方すんの?
defで宣言した関数は変数に代入出来ない。そのような場合はProcを使う必要がある。この行き当たりばったりな仕様は関数を第一級オブジェクトとして扱える言語が流行ってきたため「る、rubyでもできるし!」と言いたいがために適当に実装したためである、ってスパっと言えよ。

225:デフォルトの名無しさん
17/09/12 01:15:08.18 EWvqPynr.net
>>216
それは「書き方」の定義が曖昧だから
でもまあもう少し小さな区分で言うと
動的型付けの関係でJavaができるような
メソッドのオーバーロードは標準のRubyではできない

226:デフォルトの名無しさん
17/09/12 01:19:06.28 TH/zNQOA.net
思い込みで嘘振りまいてたアンチが発狂しとる

227:デフォルトの名無しさん
17/09/12 02:14:24.98 FDETfUWp.net
>>220
嘘で印象操作はいかんよ
そのうちRubyも韓国起源説を唱えそうだな

228:デフォルトの名無しさん
17/09/12 03:23:16.78 65BZCqIl.net
URLリンク(fatiherikli.github.io)
のローカル版のような2画面エディタないですか

229:デフォルトの名無しさん
17/09/12 06:32:54.30 Yg2YMH7r.net
>>224
今プログラミングエディタで一番勢いがあるのはVSCode
見た目はだいたいこんな感じ

230:デフォルトの名無しさん
17/09/12 07:48:04.25 xdcKpwUc.net
Emacsじゃあかんの

231:デフォルトの名無しさん
17/09/12 10:04:19.58 9jgbEmKh.net
>>218
Rubyの連中ってのは、「たのしい」だとか、「直感的」とか、「生産性が高い」
とかってよく言う。
けど、メタプログラミング、DSLの辺りで躓く人って多そう。
SinatraのDSLがどう言う実装になっているのか理解するのに相当時間かかった。
特に、こんなコードがキモだとは、長らく気づかんかった。
class A
puts “OK”
end

232:デフォルトの名無しさん
17/09/12 11:06:52.61 WW0MtbKa.net
JavaScript でも、関数内の地の文は、実行される
たぶん、Python, Groovy なども同じだろ

233:デフォルトの名無しさん
17/09/12 11:11:57.63 9jgbEmKh.net
>>228
THX
JavaScriptでも同じなのね。class定義内の地の文が実行されるの。

234:デフォルトの名無しさん
17/09/12 11:25:19.54 h0iAeYHr.net
> けど、メタプログラミング、DSLの辺りで躓く人って多そう。
その前に自分みたいにオブジェクト指向とか言う暗号が理解できなくてC言語で止まってしまう人もいると思います。
アセンブラからC言語は問題なかったんですけどね…

235:デフォルトの名無しさん
17/09/12 11:57:03.55 onUD/nnU.net
>>230
オブジェクトのポインタも暗黙の引数として渡される、と割り切ってしまえばとにかく理解はできるはず。
オブジェクト指向だからのこともあるけど、全体像がわかれば、たいして難しいことではないと思う。

236:デフォルトの名無しさん
17/09/12 12:04:12.58 WW0MtbKa.net
まずこの本で、オブジェクト指向を学ぶ
スッキリわかる Java入門 第2版、2014
その後、この2冊を順に読む
たのしいRuby 第5版、2016
みんなのPython 第4版、2017
だから、勉強する順番が、この順になる
この後に、4つの道に分かれる。
1. Groovy, Kotlin
2. C#
3. C++
4. JavaScript

237:デフォルトの名無しさん
17/09/12 18:53:46.13 JOxdLua/.net
リファクタリング:Rubyエディションを読んだ方がもっと直接的にオブジェクト指向を学べる
リファクタリングと名が付いてるけどオブジェクト指向が何のためにあるのか、源流から把握できるよ

238:210
17/09/12 23:44:30.69 hhSY9FWw.net
>>220
>defで宣言した関数は変数に代入出来ない
defで宣言できるのはメソッドであって関数ではない
またRubyには(関数型言語における)関数は存在しない
基本に立ち返って、計算モデルという視点でメソッドと関数との違いを
学習したほうがいいと思われる
また関数型言語の流行を見て適当な実装したのはナイスジョーク言語(>>209)だよ
・クロージャって何がいいの?
 スレリンク(tech板:197番)
このカキコをまとめると、君の文章スタイルを真似れば:
  lambda式の本体には式しか書けない。文を書きたい場合はdefで名前付きの関数を
  宣言する必要がある。この行き当たりばったりな仕様は関数型プログラミングを
  扱える言語が流行ってきたため「ば、pythonでもできるし!」と言いたいがために
  適当に実装したためである、
ってスパっと言えるね
少なくとも、Rubyはその誕生の時からすでにオブジェクト指向と関数型を融合した
マルチパラダイム言語として設計された
・推薦図書/必読書のためのスレッド 74
 スレリンク(tech板:857番)
手続き型言語として誕生し後から流行を追ってオブジェクト指向と関数型を
行き当たりばったりで適当に実装したナイスジョーク言語とRubyを一緒にしないでね!!(棒

239:デフォルトの名無しさん
17/09/13 00:11:46.24 ZSgQvDIS.net
>>234
>defで宣言できるのはメソッドであって関数ではない
この難癖は頭おかしい。
トップレベルで定義したメソッドを関数と呼ぶのは便利な方便じゃないか。
そんなこと言ったらいちいち演算子もメソッドと言わなければならないのか?
たしかまつもと著の初期の書籍でも
関数を定義してみましょう→実はRubyでは関数はメソッドとして~という流れだったはず。たしか。たぶん。

240:デフォルトの名無しさん
17/09/13 00:40:14.46 S8v0D06m.net
そしたらブロックローカル変数という
糞ダサいものは何故必要になったのですか?
やっぱり変数宣言は必要だったのですか?

241:デフォルトの名無しさん
17/09/13 00:43:26.25 n1InxPaY.net
>>235
少しRubyやったことある人なら「defで宣言した関数」なんて理解の仕方をしないからさ
>>234の言い回しはともかく>>220はRubyのメソッドを理解してないって指摘でしょ
演算子はメソッドの一部をさす言葉なんだから演算子って呼んでもおかしくないよ
でもRubyの場合メソッドは関数じゃないから「defで宣言した関数」とは言わない

242:デフォルトの名無しさん
17/09/13 04:43:32.45 OIAQviv2.net
>>236
うん、変数宣言は必要だった。
まちがいない。

243:デフォルトの名無しさん
17/09/13 06:57:22.00 QnpmdH9u.net
鏡の自分と話していないでいい加減リアルで話し相手を見つけろ
いつまでごっご遊びする気だ?

244:デフォルトの名無しさん
17/09/14 05:43:14.25 MKn91q5M.net
>>232
スッキリわかる Java入門 第2版
658ページ
すごいなぁ。
俺が良かったのは、Java流オブジェクト志向入門、この薄い本でOOPに合点が言った。
それから、Master Mind of Programming.
OOPのキモは、差分プログラミング。

245:デフォルトの名無しさん
17/09/14 05:49:47.26 CERdfB5z.net
オブジェクト指向の初期に言われてた
(継承による)差分プログラミングは
今はOOの主流でない

246:デフォルトの名無しさん
17/09/14 06:39:33.22 DHSnOET6.net
主流ではないどころか現代では継承による差分プログラミングはクラスの典型的な間違った使い方であるというのが一般的な認識だよね
あまりにも時代錯誤が過ぎる

247:デフォルトの名無しさん
17/09/14 09:15:38.86 RGoLM/1P.net
class Product < ApplicationRecord
end
この継承だけで、
p = Product.new
p.name = “Some Book”
と書き始める事ができるが!
これは、差分プログラミングでは無いのか?

248:デフォルトの名無しさん
17/09/14 11:25:35.14 mzgiopKB.net
構ってほしいなら他スレいけ

249:デフォルトの名無しさん
17/09/14 13:23:53.04 hmZWacm7.net
今のオブジェクト指向って差分は嫌われてんのか。
しらんかった。

250:デフォルトの名無しさん
17/09/14 13:45:04.43 emC4w7HW.net
差分プログラミングは継承元のクラスの細かな仕様
特に処理の流れのようなものまでしっかり把握してないと
破綻するからな
複雑な動きをするクラスの一部だけ上書きして破綻なく動かすのは難しい

251:デフォルトの名無しさん
17/09/14 13:58:16.02 hmZWacm7.net
オブジェクト指向って継承とか差分とかをなくしたら
それって関数型プログラミングじゃないのか?

252:デフォルトの名無しさん
17/09/14 14:04:35.89 QnR6ews3.net
差分と増分は違う。
一般的に差分プログラミングというと、243の例のように元あるものに足するだけではなく
上書きして元あったものを「引く」ことを伴うやり方を指す。
これは大抵の場合、論理的なis-A関係を無視した実装継承になる。

253:デフォルトの名無しさん
17/09/14 14:32:09.28 8Cslzo3n.net
何がどうダメでどうするのがより良いことなのか書いてくれ

254:デフォルトの名無しさん
17/09/14 14:44:12.14 RGoLM/1P.net
>>242
何が、「だよね」だよ。
変なやつ。
たんなる、知ったかだわぁ、こいつ。

255:デフォルトの名無しさん
17/09/14 18:45:33.64 MKohVal2.net
>>246
そうでもない

256:デフォルトの名無しさん
17/09/14 19:46:31.21 QnR6ews3.net
>>249
簡単な話だよ
クラスを継承するとき、スーパークラスの実装を潰してはいけない
常に増分の形になるようにする
たとえばクラスAのメソッドaの動作を変更したいとき、サブクラスBでaをオーバーライドして置換えてしまうのが継承による差分プログラミング
そういう場合、AとBを共通のスーパークラスCを継承するようにして、Cのaは空にしておき、A, Bそれぞれでaを実装するのが一つの正解

257:デフォルトの名無しさん
17/09/14 20:29:04.75 emC4w7HW.net
多分意味が無いと思う
物分かりが良い人だったら今時Rubyなど触ってるわけないし
そのなかでも特別アレな人がここに集まっているわけだし
こういう人に何言ったって、なぁ・・・
そりゃ、聞く気があって向上心があるならRubyなんか触ってないって
差分プログラミングがあまり良くないって話は随分昔からあって
他スレッドだと、それを言っても、何今更当言ってるんだ?
となるだけなんだが、こんなことに食って掛かるやつがいるってのがね
さすがのRubyなんだわ
冗談みたいな話だけど、マジで
Rubyは今の流行りと全く反対の方向に全速力な言語だから
こういう言語を好む人に常識を解いても無駄なんだわ

258:デフォルトの名無しさん
17/09/14 20:33:41.31 TqGAiQtg.net
はいはいNGNG

259:デフォルトの名無しさん
17/09/14 20:36:29.79 DHSnOET6.net
まあ既存のクラスのメソッドを置き換えたりする醜悪なモンキーパッチをクールだと有難がってる連中が沢山いるくらいだから、
継承を使った差分プログラミングなんて可愛いもんだ

260:デフォルトの名無しさん
17/09/14 20:50:14.91 i72uwPMW.net
>>253
> そりゃ、聞く気があって向上心があるならRubyなんか触ってないって
つまりお前は聞く気がなくて向上心がない、という自己紹介?

261:デフォルトの名無しさん
17/09/14 20:56:24.98 DHSnOET6.net
念のためイメージしやすいように具体例を出しておこう。
何らかの処理結果をHTTPで出力するHTTPPublisherクラスがあったとしよう。
これをHTTPではなくFTPで出力したくなったが、最終的に送信するところ以外は実装は全て同一だ。
そこで、HTTPPublisherクラスを継承して最終的な送信のところだけをオーバーライドしたFTPPublisherクラスを作った。
その結果、FTPPublisher is HTTPPublisherという継承関係になった。
これが継承による差分プログラミングだ。何がおかしいか考えてみよう。

262:デフォルトの名無しさん
17/09/14 20:57:42.86 i72uwPMW.net
つまり、ダックタイピング最高、ということか

263:デフォルトの名無しさん
17/09/14 21:08:29.85 emC4w7HW.net
>>256
俺はRuby触ってないし
失敗した発明に興味があるだけ

264:デフォルトの名無しさん
17/09/14 22:12:26.20 i72uwPMW.net
>>259
> 失敗した発明に興味があるだけ
嘘はいけない
お前は単に叩いてスッキリしたいだけだよ
そのためには捏造も辞さない、半島系メンタリズムなんだよ
恨の文化ってやつだ
そこを自覚しよう

265:デフォルトの名無しさん
17/09/14 22:17:27.79 mzgiopKB.net
荒らしはまーた嘘ついちゃったのか

266:デフォルトの名無しさん
17/09/14 23:07:38.38 z8360qWk.net
ガチ初心者で申し訳ないっす。
rake db:migrate:reset
rake db:seed
railsで作るサイトに上を実行してくれるボタンを作ることって出来ますか?

267:デフォルトの名無しさん
17/09/15 00:06:02.35 pcdb6BZK.net
>>259
あらま!
見る目が無いのね

268:デフォルトの名無しさん
17/09/15 01:13:28.42 HyLcEmwG.net
>>262
よくわからんけど、Ruby内からバッククォート文で実行させれば良いんじゃない?

269:デフォルトの名無しさん
17/09/15 02:50:07.52 NqjvejJe.net
>>264
ありがとうございました!感謝感激雨あられっす

270:デフォルトの名無しさん
17/09/15 05:52:12.67 gy747Xnp.net
差分問題は継承より委譲、で終わり

271:デフォルトの名無しさん
17/09/15 13:17:19.48 M6zHVajf.net
>そりゃ、聞く気があって向上心があるならRubyなんか触ってないって
今年一番説得力あるレスだった

272:デフォルトの名無しさん
17/09/15 21:25:27.63 gy747Xnp.net
まあRubyは使いやすくて楽だからな
Lispみたいな言語だと
向上心や忍耐力が必要とされる

273:デフォルトの名無しさん
17/09/16 00:44:23.41 54wKV8j0.net
手軽だし、便利だし、どこにでも手が届くわりに、細部まで言語として背景や地盤が整備されてる
確かに、使える人が増える事はあっても減る事は無い言語だ

274:デフォルトの名無しさん
17/09/16 03:15:44.04 cRp93fnk.net
>>269
俺、その背景や地盤ってのを理解するのに、めっちゃ時間かかった。

275:デフォルトの名無しさん
17/09/16 07:19:19.83 ja70x9oy.net
Gradle は、Groovy だけど、
vagrant, chef, SASS とか、ツールを作る時は、真っ先に、Ruby が選ばれる。
他の言語は、Rubyよりも、2年ぐらい遅れる
この2つは、DSL も作りやすい。
さらに、Groovyには、JavaVM が必要だけど、Rubyには必要ない
おまけに、シェルスクリプトの代わりにもなるし、
PowerShell よりも、プログラミングしやすい

276:デフォルトの名無しさん
17/09/16 07:28:00.02 AcW1bn43.net
>>271
>ツールを作る時は、真っ先に、Ruby が選ばれる
おっそうだな
静的サイトジェネレータならJekillとか
Rubyはプロトタイプを早く作るのに向いてるから
新ジャンルを開拓するのにふさわしい

277:デフォルトの名無しさん
17/09/16 09:14:50.48 dauRpkAs.net
そう感じるのは君がRuby村の中から見える世界しか見てないからだ
少なくとも今はRubyが最先端とはとてもじゃないが言えないよ

278:デフォルトの名無しさん
17/09/16 11:26:43.15 54wKV8j0.net
アンチって平然と人を騙そうとするよな

279:デフォルトの名無しさん
17/09/16 11:33:09.75 DEccgWHW.net
>>271
その手のツールがRuby製なのはちょっと不思議なんだよな。
バージョンアップで壊されるかもしれないんだから。
もっと安定性のあるものを選べばいいのに。

280:デフォルトの名無しさん
17/09/16 11:45:25.97 gf/ZkNkm.net
Railsと違ってRuby自体の後方互換性はかなり高いよ。1.8や1.9で作ったコードも今もそのまま問題なく使えてる。使えなくなる機能があっても数バージョン前から警�


281:随oるから対応しやすい。



282:デフォルトの名無しさん
17/09/16 11:50:32.56 54wKV8j0.net
rbenvで全ver入れてOK

283:デフォルトの名無しさん
17/09/16 15:03:52.29 cRp93fnk.net
>>273
Rubyは最先端ではない。
首相は獣医学科設置に関与してない。
首相は、国有地を森友学園へ売却するよう指示してない。
これらは、証明できない。
ツールを作る時の選択肢にRubyがある。
これらの証明は例を示せば良い。
例:vagrant, chef, SASS

284:デフォルトの名無しさん
17/09/16 16:48:46.12 ZCzFTInQ.net
>>270
おまえにrubyは早すぎる

285:デフォルトの名無しさん
17/09/16 17:39:16.46 ja70x9oy.net
自分がツールを作る時に、シェルスクリプトは論外だろ。
PowerShell は、補完が効くけど、
クラスを使うような、本格的なプログラミングは出来ない
Kotlin は大掛かりで、厳格なものを作れるけど、
静的チェックが厳しすぎるような気もする
結局、Groovy, Ruby が手軽。
DSL も作りやすい
Haxe も、様々な言語に変換できるから、面白そうだけど

286:デフォルトの名無しさん
17/09/16 17:58:02.30 3y963gmF.net
PowerShellはクラス作れるぞ?
そんなんだからアンチに馬鹿にされるんだよ

287:デフォルトの名無しさん
17/09/16 18:03:45.86 3y963gmF.net
あと静的チェックが厳しすぎるというのも意味不明だな
Rubyだって想定してる型を間違えたら落ちるかバグるだろう
型書くのが面倒というならわかるけど、静的チェックが緩いこと自体にメリットはない

288:デフォルトの名無しさん
17/09/16 18:08:25.83 iZTbrLgf.net
静的チェックをするということは、Crystal みたいな方向性になるのかな

289:デフォルトの名無しさん
17/09/16 20:35:26.41 AcW1bn43.net
>>280
要はLLとかグルー言語っていうか
シェルスクリプトと静的言語の中間が
Ruby(やPython)の守備範囲ね

290:デフォルトの名無しさん
17/09/16 20:37:44.80 AcW1bn43.net
>>281
PSはバージョンアップでクラス構文が追加されたね
でもまあ本格的なオブジェクト指向はRubyの方がやりやすい
>>282
動的型付けにも多態するのに継承いらないとか
ダックタイピングとかメリットがある

291:デフォルトの名無しさん
17/09/16 20:38:28.09 PUFjteak.net
>>282
>静的チェックが緩いこと自体にメリットはない
たとえばC言語が標準ライブラリ関数である printf を
容易に実装できたのは、C言語の「静的チェックが緩い」という
特性がメリットになった実例だろ

292:デフォルトの名無しさん
17/09/16 20:43:55.95 54wKV8j0.net
アンチはまた自演で誘導しようとしてんのか
ほんと嘘をついて騙すのが好きだな

293:デフォルトの名無しさん
17/09/16 21:02:57.30 PUFjteak.net
>>280
ためしに「Kotlin dsl」でググって見たら最初にヒットした記事
・KotlinでイケてるDSLを作る
 URLリンク(qiita.com)
この記事では DSL を作るのに有益な Kotlin の言語機能を
6つ紹介しているけど、先頭の4つは Ruby と共通しているね
・拡張関数
 ―> 既存のクラスへ後からメソッド定義を追加できる
・引数の最後がラムダ式であれば、メソッド呼び出しの …(略)
 ―> Ruby の「ブロック付きメソッド呼び出し」
・ラムダ式のreturnは省略可能
 ―> もちろん Ruby もメソッド/ブロックの最後に書くreturnは省略できる
・thisは省略可能
 ―> Ruby も同じく
特に3つ目の「ブロック付きメソッド呼び出し」は Apple の新世代言語である
Swift でも「Tailing Closure」という名前で導入されている
・クロージャって何がいいの?
 スレリンク(tech板:262番)
世界は Ruby 良さに気付いている、そして Ruby の良き特性を取り込んだ
新世代言語が次々に登場している(>>283 の Crystal、他には Elixir もある)

294:デフォルトの名無しさん
17/09/16 23:13:55.67 +qyS/XRX.net
日々アンチっぽいと感じる書き込みがあるかもしれないが
書き込んでいる本人たちは、そんな気は決してない
これは皆さんに末永くRubyを使ってもらおうと思ってしていること
未だなおRubyが好きな人に、何言っても回心しないのは分かり切ってるから
逆に強化していこうって方向なわけ

295:デフォルトの名無しさん
17/09/16 23:18:50.04 +qyS/XRX.net
たとえばシステムにsafeな部分とunsafeな部分があったら
unsafeな部分は一か所にまとめて管理したいって考えるだろう
スラム街みたいなもんだな
別にこの世は俺の管轄するシステムでも何でもないから
どうでも良いっちゃどうでも良いんだが
2chにも隔離スレという文化があるし
似たような感覚ではある

296:デフォルトの名無しさん
17/09/17 03:18:56.25 tx3RW6Nz.net
嘘付いてスレを妨害した荒らしのレスが上の方にあるじゃん

297:デフォルトの名無しさん
17/09/17 05:11:26.55 7k/HywsS.net
Rails5.1.4を使用しています
アホしてsendカラムを含んだテーブルをmigrateしたところ、あちこちでエラーが発生するようになりました。
すぐにロールバックし、DBからはカラムが消えたことを確認しましたが、ApplicationRecordを継承したクラスではいまだに生きているようで、症状が改善されません。
ロールバック以外にできることがあれば、教えてください。

298:デフォルトの名無しさん
17/09/17 13:22:15.36 EJ9y/eYt.net
>>292
>ApplicationRecordを継承したクラスではいまだに生きているようで
そのModelも戻せよ

299:デフォルトの名無しさん
17/09/17 13:27:05.45 iyMogwhx.net
エスパーするが
Rubyではメソッド名が同じであれば同じような振る舞いをします
そのことはRubyで保証されているので
プログラマは振る舞いについて何も考えなくてよいです
メソッド名が同じなら、同じような振る舞いをします
なのでそうしてください
そのあと言語仕様から変数宣言を無くして代入で代用してください
一見すると「変数宣言」と「代入」の区別がつかなくなるように思えるかもしれませんが
変数宣言が無くなるので変数のスコープのことを考えなくてよくなります
これらはRubyでサポートされているので、そのようにしてください

300:デフォルトの名無しさん
17/09/17 13:46:03.46 rqcmn5Um.net
荒らしのコピペまじウゼー

301:デフォルトの名無しさん
17/09/17 19:33:50.41 vAwE04IK.net
>>292
Rails の質問や話題はWebProg板のRailsスレへ:
・【RoR】Ruby on Rails Part20
 スレリンク(php板)

302:デフォルトの名無しさん
17/09/17 20:54:55.57 vAwE04IK.net
>>294
> Pythonではメソッド名が同じであれば同じような振る舞いをします
> そのことはPythonで保証されているので
> プログラマは振る舞いについて何も考えなくてよいです
> メソッド名が同じなら、同じような振る舞いをします
> なのでそうしてください
> そのあと言語仕様から変数宣言を無くして代入で代用してください
> 一見すると「変数宣言」と「代入」の区別がつかなくなるように思えるかもしれませんが
> 変数宣言が無くなるので変数のスコープのことを考えなくてよくなります
> これらはPythonでサポートされているので、そのようにしてください
試しに Ruby を Python に変えて見たけど、何ら違和感が無い
そもそも「オブジェクト指向+動的型付け+手続き型言語」という特性を備えた
あらゆる言語(Python/JavaScript/Perl/PHP..etc)に通じる単純明快な事柄だね
いったいぜんたい >>294 は何を言いたいのだろうか?
あえて >>294 の主旨をエスパーすると:
「私はプログラミングを習い始めたばかりの初心者です、よろしくお願いします」
ってことではなかろうか

303:デフォルトの名無しさん
17/09/17 21:59:40.46 iyMogwhx.net
>試しに Ruby を Python に変えて見たけど、何ら違和感が無い
それで何が問題?
あと、Pythonは型アノテーションを取り入れてるから
過去の過ちを修正していこうということだろうね
一方Rubyは逆走中
失敗しちゃったから、もういっそ、突き抜けちゃおう、という勢い

304:デフォルトの名無しさん
17/09/17 22:05:37.68 G7neoTxj.net
Ruby 以外の動的言語は、関数の外で宣言した変数が、
関数の内側で、使えるよな
つまり、関数スコープが厳格ではない
Rubyで、変数宣言が無いのは、関数スコープが厳格だからかな?

305:デフォルトの名無しさん
17/09/17 22:15:19.17 5DAGa3Dm.net
>>299
Rubyはオブジェクト指向言語なので
カプセル化するために基本的に
他のオブジェクトの変数をそのまま使わない
使う必要がある場合は引数またはアクセサを通して使う
またグローバル変数も使えるが非推奨

306:デフォルトの名無しさん
17/09/17 22:58:55.88 iyMogwhx.net
|x; foo|
↑の foo のような、変素宣言と変わらない素晴らしい存在と出会うことが出来ます
ちなみに python にも nonlocal という素晴らしいお友達が居ます
変数宣言を無くして代入で代用するアイデアは本当にうまく行きます
「@」に出会うことが出来るし
レキシカルスコープについて考えると夜も眠れないほどです

307:デフォルトの名無しさん
17/09/17 23:06:07.39 G7neoTxj.net
Ruby のブロック(クロージャ内の)変数だろ
python のnonlocal は、いらんわ。
親のスコープへ、遡って探しに行く、変数だよね

308:デフォルトの名無しさん
17/09/17 23:20:45.74 vAwE04IK.net
>>298
>過去の過ちを修正していこうということだろうね
その Python の過ちがあまりに低レベルな訳だが:
(1) print 機能が文として実装され、ライブラリとして分離されていなかった(>>209)
  すでに1970年代に登場したC言語では、
  print は標準ライブラリ関数として言語仕様から
  分離していたにもかかわらず
(2) 整数の割り算という極めて基礎的な計算仕様が安定していない
 ・割り算の扱い – Python2からPython3への変更 –
  URLリンク(www.trusted-design.net)
(3) 関数型言語ブームを追って行き当たりばったりで適当に実装したおかげで、
  ラムダ式の本体には式しか書けない
  改善要望は過去から存在したが、作者のGuid氏はGuido氏は
  「複数行のラムダは解けないパズル(unsolvable puzzle)」と匙を投げた(>>234)
(1)と(2)はようやく Python3 で修正を終えたけど、その代償として
「後方互換性の断絶」という事態を招いた
(3) の「解けないパズル」に至っては Python3 でも修正の目処が立たず先送り
おそらく Python4 で修正して「後方互換性の断絶」が再現されることになる
つまり Python における「過去の過ちの修正」の歴史って、こういうこと
繰り返すけど、Python は過ちのレベルがあまりに初歩的すぎるのよ

309:デフォルトの名無しさん
17/09/17 23:28:50.19 vAwE04IK.net
>>299
>Ruby 以外の動的言語は、関数の外で宣言した変数が、
>関数の内側で、使えるよな
いや、そもそも Ruby ではメソッド定義の中で入れ子になった
メソッドは定義できないよ
これは Smalltalk や Java といった最初からオブジェクト指向言語として
設計された仲間に共通する特性

>Rubyで、変数宣言が無いのは、関数スコープが厳格だからかな?
いや、メソッドの入れ子定義を禁止したことで、スコープの定義が簡潔なだけ
というか、Python や JavaScript のような関数の入れ子定義ができる
動的型付け言語でも、関数宣言は必要無いから、何を言いたいのだろうか?

310:デフォルトの名無しさん
17/09/17 23:36:32.98 vAwE04IK.net
>>301
>↑の foo のような、変素宣言と変わらない素晴らしい存在と出会うことが出来ます
Ruby:
 lambda { |foo| …… }
Python:
 lambda foo: ……
JavaScript:
 function(foo) { …… }
Scheme:
 (lambda (foo) …… )
SML:
 fn foo => ……
言語によってブロック、ラムダ式、無名関数と呼び名は様々だけど、
どの言語でも「変素宣言と変わらない素晴らしい存在」foo とは出会えるよ
ひょっとして >>301 は「仮引数(パラメタ)」という概念を知らないのかなあ?

311:デフォルトの名無しさん
17/09/17 23:54:56.42 vAwE04IK.net
>>304
>動的型付け言語でも、関数宣言は必要無いから、何を言いたいのだろうか?
最後の文章を自己レスで訂正:
X:関数宣言は必要無いから、
O:変数宣言は必須では無いから、
補足しておくと:
・JavaScript は予約語 var で始まる変数宣言の構文があるけど、
 省略すれば暗黙的に宣言される
・Python の型アノーテーションは、その名アノーテーションとあるように
 コメント扱いだから変数宣言の意味とは全く異なる存在であるし、
 当たり前だけど省略できる

312:デフォルトの名無しさん
17/09/18 00:24:39.32 Rs/BRyvp.net
> Ruby:
>  lambda { |foo| …… }
ではなく
Ruby:
 lambda { |x; foo| …… }
この仮引数ではない余計な「foo」の事ですよ
明らかに浮いてますね、変ですね
何なんですかね、このfoo
変数宣言を代入で代用するアイデアは本当に素晴らしいですね
>(2) 整数の割り算という極めて基礎的な計算仕様が安定していない
URLリンク(postd.cc)
Ruby: それはstdlibが搭載されているモジュールをrequireすると、
整数割り算の動き方に影響を与えてしまう言語。 @tomdale

313:デフォルトの名無しさん
17/09/18 01:38:17.76 +b1AQYPX.net
>>307
>Ruby: それはstdlibが搭載されているモジュールをrequireすると、
>整数割り算の動き方に影響を与えてしまう言語。 @tomdale
それは整数割り算のメソッドをオーバーライド(上書き)したからだよ
リンク先の文書だとモジュール “mathn” を require で指定しているね
外部モジュールの import うんぬんとは無関係に、バージョンによって
素の「整数割り算の動き方」が変わってしまうナイスジョーク言語(>>209)と
一緒にしないでね!!(棒

314:デフォルトの名無しさん
17/09/18 02:48:06.01 nAoTSCTK.net
>>307
>変数宣言を代入で代用するアイデアは本当に素晴らしいですね
へ??

315:デフォルトの名無しさん
17/09/18 04:01:15.69 rETRD+xz.net
lambda { |x; foo| …… }
ブロック(クロージャ内の)変数として、使いたい場合、
わざと、foo に代入しない
JavaScript でも、undefined が予約語ではないから、
わざと引数に代入せずに、undefined を作る方法がある

316:デフォルトの名無しさん
17/09/18 08:11:23.91 vEKmFrOo.net
糞自演でスレを荒らすなよ屑

317:デフォルトの名無しさん
17/09/18 09:16:48.21 nAoTSCTK.net
>>310
fooに代入するって何?

318:デフォルトの名無しさん
17/09/18 09:47:51.23 rETRD+xz.net
X だけに代入して、foo には何も代入しなければよい
そうすれば、foo は、ブロック内だけのローカルスコープを持つ、
ブロック変数として使える

319:デフォルトの名無しさん
17/09/18 10:13:22.15 Rs/BRyvp.net
fooに代入出来るけどあえてしない場合は
lambda { |x, foo| …… }
って書くんじゃないの?
俺の書いたのは
lambda { |x; foo| …… }
「;」以降の変数って何なんですかね、こんな変な文法
変数宣言してるのと変わらないですよね
変数宣言を代入で代用するアイデアは本当にうまくいってますね
「@」もサイコーですし、python の nonlocal も最高

320:デフォルトの名無しさん
17/09/18 10:49:09.23 vEKmFrOo.net
しつこいぞ荒し
いい加減にしろ

321:デフォルトの名無しさん
17/09/18 11:15:25.67 Rs/BRyvp.net
> >>307
> >Ruby: それはstdlibが搭載されているモジュールをrequireすると、
> >整数割り算の動き方に影響を与えてしまう言語。 @tomdale
> それは整数割り算のメソッドをオーバーライド(上書き)したからだよ
> リンク先の文書だとモジュール “mathn” を require で指定しているね
> バージョンによって
> 素の「整数割り算の動き方」が変わってしまうナイスジョーク言語(>>209)と
> 一緒にしないでね!!(棒
これもはっきり言ってPythonのがマシ
問題になるのは2から3への移植の時だけだから
自分で移植しようとしているのは明らかに分かり切っているから
当然注意深くやるし
requireするしないで、割り算の挙動が変わる方が悪質

322:デフォルトの名無しさん
17/09/18 11:19:25.70 Rs/BRyvp.net
ああ分かりにくい日本語になってしまったな
移植の時だけ気にすればよいPythonと違って
常に気を付けなければならないRubyの方が悪質
requireするしないで、割り算のような基本的な四則演算の
挙動が変わるのはあり得ない

323:デフォルトの名無しさん
17/09/18 11:21:09.53 RAFTqz6F.net
>>317
なるほど納得
ずっと逃れられないのは、たしかに困りますなあ…

324:デフォルトの名無しさん
17/09/18 11:34:58.89 ePom9dNv.net
>>317
Rubyはオープンクラスなのでそれを致命的なデメリットと感じる人は使わないよね、というだけ
そう感じない人が多いから使う人も多いんだけどね

325:デフォルトの名無しさん
17/09/18 11:53:48.10 VM+b53w3.net
> requireするしないで、割り算の挙動が変わる方が悪質
何の話かと思ってmathnを検索したら標準クラスをオーバーライド?するのね。
ただやるかやらないかと出来る出来ないは別の話だと思うし
requireする前に説明文読まない人はいないでしょう。
まあ間接的にrequireされてたら憤死ものですが…。

326:デフォルトの名無しさん
17/09/18 12:06:43.11 H26Q6EL5.net
逆に言うとrequireするだけで、自分のタイミングで置きかえれるのは柔軟

327:デフォルトの名無しさん
17/09/18 12:59:55.26 nAoTSCTK.net
いつもの荒らしを相手にしてごめんなさい
私が馬鹿でした

328:デフォルトの名無しさん
17/09/18 13:19:24.65 KVRZIFdh.net
なんかこのアンチ、思い込みが激しくない?

329:デフォルトの名無しさん
17/09/18 14:08:56.09 T75MpWNi.net
確認したらmathnライブラリは非推奨扱いになってる
リファインメントを使う代替ライブラリがあるのかな
mathn自体使った事はないけどさ

330:デフォルトの名無しさん
17/09/18 14:22:24.92 NfLL63dw.net
こういう人の話を聞かないで延々、一人しゃべりしてるやつって気持ち悪い

331:デフォルトの名無しさん
17/09/18 14:50:20.87 /S27bRBH.net
おまい2ちゃん初めてか?

332:デフォルトの名無しさん
17/09/18 15:01:07.52 KVRZIFdh.net
現実で話し聞いてくれる相手を見つけなよ

333:デフォルトの名無しさん
17/09/19 00:51:54.54 qwtMAuXO.net
荒らしはまずその嘘をつく癖を直さないと

334:デフォルトの名無しさん
17/09/19 11:48:35.35 oRSrnZEU.net
オープンクラス、つまりモンキーパッチは嫌われてる
JS の、prototype.js と同じ。
基本的なAPI を上書きするから、挙動が変わる
だから、嫌われる

335:デフォルトの名無しさん
17/09/19 11:59:30.04 PO17xH6Y.net
なぜそんなものを作ったとなじる前にそんなものじゃない実装をお作りになったらどうでしょうか。
オーバーライドな実装が気に入らない、だから自分でそれをしない実装を作った!というのは別に誰にも否定されませんよ。
出来たそれが多くの人に支持されるかどうか?の話はまた別ですが。

336:デフォルトの名無しさん
17/09/19 12:23:14.37 PJTSF08k.net
オープンクラス自体が必ずしも悪いわけではないけど、問題はどこかで一回requireしたら影響がVM全体に波及してしまうことだね。
そのことは重大な問題としてよく認識されていて、
例えばC#の拡張メソッドはそれを含む名前空間を同一ソースファイル内で明示的にインポートしないと使えない。
Rubyも必ず毎回requireしないといけないようにすればよかったんだよ。Matzに言わせれば屈辱かもしれないけど。

337:デフォルトの名無しさん
17/09/19 12:58:20.02 pUrd1x2X.net
refine使えよ

338:デフォルトの名無しさん
17/09/19 14:07:33.30 PO17xH6Y.net
それは逆のこともあってグローバルにしたいからそのようにヤルってのもあるでしょう。
それがそのように作成されているのはそのようにする意図があるのだし
影響受けまくりの共同開発のリポジトリで独断なら話は戦争ですが
使う人がいなきゃ肥やしにもならないライブラリにいちいち文句つけるなんて時間の無駄ですよ。
ただそこにあるだけで目障りという話でしたらまったく同じ理由で罵詈雑言の応酬になるのがオチでしょう。

339:デフォルトの名無しさん
17/09/19 14:12:31.68 qwtMAuXO.net
アンチは思い込みの激しい性格だから、まともな社会生活をおくれなくて孤独なんだよ

340:デフォルトの名無しさん
17/09/19 15:04:48.55 pVbgaDCi.net
話し相手が欲しくてスレを荒らしてたのか
なんだかちょっと可哀想

341:デフォルトの名無しさん
17/09/19 15:11:46.91 OkajuEzq.net
必要ならrefinementを使おうで終わる話をグダグダ続けるなよ
初心者なら素直に、こういう場合はどうすればいいのって聞こうね

342:デフォルトの名無しさん
17/09/19 15:36:30.17 AHugq77Y.net
孤独な人生を送るのは親の育て方が間違っていただけ
だから思い込みが激しいのは本人の責任ではない

343:デフォルトの名無しさん
17/09/19 19:13:47.20 sOczhhK4.net
標準クラスを上書きしようって発想に至らしめる原因は
Rubyが遅いからなんだけどね
C++ならユーザー定義の数値クラス作って終わり

344:デフォルトの名無しさん
17/09/19 20:41:46.88 e66Wy8x+.net
>>331
C#の拡張メソッドは、別のメソッドを変更しない。

345:デフォルトの名無しさん
17/09/19 20:56:09.99 pVbgaDCi.net
自演で構って下さいアピールは逆効果だよ

346:デフォルトの名無しさん
17/09/20 07:19:28.44 +O4Z8sr5.net
昔、Rubyのコードを他言語のソースコードに翻訳したり逆翻訳するコンパイラツールを見た覚えがあるんだけど、
誰か詳細知っている人いる?

347:デフォルトの名無しさん
17/09/20 10:18:26.15 cwCxN8ct.net
>>341
Crystal:Ruby風の文法を解釈し、LLVM IRを生成
こんなんあるけど。

348:デフォルトの名無しさん
17/09/20 10:19:21.40 cwCxN8ct.net
>>341
Opal: Ruby to JavaScript Compiler
こんなんも。

349:デフォルトの名無しさん
17/09/21 02:02:31.36 zN1Ojhkv.net
どっかでrubyからC/C++に変換する物を見たけど、
どこだったかな?

350:デフォルトの名無しさん
17/09/21 07:56:13.32 jI+7buuF.net
荒らしが出てこない所を見ると、学部生の夏休みは終わっちゃったか

351:デフォルトの名無しさん
17/09/21 08:02:41.56 i2z8B4+0.net
LLVMの中間言語に変換するのはまだ完成してなかったんだっけ

352:デフォルトの名無しさん
17/09/21 08:59:07.48 az3FYHb4.net
単位取得ギリギリの学生さんは、夏休み中イライラ爆発してんだろうねぇ。
最近は、単位バラマキなんだけか?

353:デフォルトの名無しさん
17/09/21 13:03:17.36 kkyna6sC.net
JRuby は?
JVM 中間コードから、逆コンパイルできるかも?

354:デフォルトの名無しさん
17/09/21 18:45:40.87 iiWOifkH.net
>>348
聞いたことないんですね。作ってもらえるんですか?

355:デフォルトの名無しさん
17/09/21 18:51:20.23 Ei962/hq.net
>>348
JRubyのランタイムにがっつり依存したクソビッチなコードをゲロゲロするから使い物にならんよ

356:デフォルトの名無しさん
17/09/21 20:38:47.71 K0No9bcT.net
釣りにやさしい反応を返すRubyist

357:デフォルトの名無しさん
17/09/21 22:44:42.25 ttsHKcWH.net
Ruby自体が釣り言語だからな

358:デフォルトの名無しさん
17/09/21 22:50:21.57 ttsHKcWH.net
しかし、釣った後の魚をどうするかで困るんだよな
本当に魚じゃあるまいし、無下にも出来ない
せっかくスコープをグチャグチャにしてまで変数宣言を無くしたわけで
それが結局メリットが無いのが皆にバレても、今更ね

359:デフォルトの名無しさん
17/09/21 23:01:34.46 ttsHKcWH.net
変数宣言に型を書かなくてもよいって所までは
動的型にすれば簡単なんだけど
ここで誤って勢いあまって変数宣言自体を無くすところまでやると
スコープがぐちゃぐちゃになる
代入で変数宣言を代用しても
新しい変数への代入なのか、既存の変数への代入なのか、区別がつかない
そこへきて、動的型自体にメリットが無いことが広く知れ渡ってしまったもんだから
スコープをグチャにしてまで変数宣言を無くした意味がもうワケワカ
ここで変数に静的な型を付けるよう改良するなら、変数宣言も復活する話になるし
変数宣言があるなら普通のレキシカルスコープでよい話になるので
今までのキメラ的な苦労が水の泡
素晴らしい

360:デフォルトの名無しさん
17/09/21 23:54:47.40 qyztOB8O.net
オメーの話なんざ価値ねーから
1行未満にまとめとけや

361:デフォルトの名無しさん
17/09/22 00:00:54.86 GRZGpevQ.net
1行未満って0行じゃんw
消えろっていう表現ってことかーいいね、その使い方w

362:デフォルトの名無しさん
17/09/22 00:41:00.54 9s7VGfiV.net
いつもの人だと思うけど
こういうのは即NGできるので助かるわー

363:デフォルトの名無しさん
17/09/22 08:48:34.24 CYSXe8iX.net
単位没収確定

364:デフォルトの名無しさん
17/09/23 13:02:09.34 WtNBJIHg.net
今だにruby1.9.3以下がメインですが、今の言語・システムの設計では、変数宣言とスコープが今の論点の一つなんですか?
思いついた解法を書くつもりは特に無いですが。

365:デフォルトの名無しさん
17/09/23 14:54:45.80 j6VCxv0o.net
全然
皆もっと先を行ってるけど
Rubyは一番最初の時点で躓いてるってだけだね
「@」

366:デフォルトの名無しさん
17/09/23 14:58:52.93 Dvp9BlYO.net
perl嫌いって言いつつperlの真似しちゃってるのがね

367:デフォルトの名無しさん
17/09/23 15:23:09.65 xCJjTQ1w.net
>>359
lambdaの引数で、|a,b;x,y|という記法が追加されたんだよね。
事実上、ここにだけ変数宣言が追加されたってことなので、ヘンな弱みみたいになってるかも。

368:デフォルトの名無しさん
17/09/23 15:32:32.74 WtNBJIHg.net
つまづく原因は、履いてる靴が悪いのか、障害物があるのか、のどちらかでしょう。頑張り過ぎ、何でもござれ、全方位対応は、昭和時代の思い出です。
stringの、force_encoding (String)あたりはrubyならではの釣りだと思います。java9のstringは内部はbyte[]みたいになるそうですけど。
ところでrubyの、初心者じゃない方の質問スレは、いつ消えたんですか?

369:デフォルトの名無しさん
17/09/23 15:41:14.27 PFKg/P6i.net
またいつもの人だね
NG捗らないからID変えならが書くのやめて欲しいわ

370:デフォルトの名無しさん
17/09/23 15:42:24.35 WtNBJIHg.net
>>361
pl,rbで比較したんですが、僅差でrbの勝ちでした。
plだけあればなんでもできます。が、plはawk+rbで代替するのを善しとします。
u8サポートないならplです。けれど、バイナリ操作はjava,c99があります。pl5に未来はありません。rbは複雑ですがshell scriptと考えれば、rbはplと比較するものではなく、bashの仲間です。
>>362
最近js(es6)の方がおもしろいので、rb1.9.3も使ってないです。js: function(a,b){}みたいな話ですか?

371:デフォルトの名無しさん
17/09/23 16:14:06.50 89h9xiW6.net
FXRubyなんていう便利な代物を今更知った
RubyにもちゃんとGUI作れるツールあるじゃないか!

372:デフォルトの名無しさん
17/09/23 16:50:37.72 xCJjTQ1w.net
>>365
> pl5に未来はありません。
きっとまだまだ未来はある。
クソ変化をする可能性がほとんどないからな。
> rbはplと比較するものではなく
比較するものだよ。シェルとは違う。
> >>362
> js: function(a,b){}みたいな話ですか?
近いかも。
jsも、関数スコープしかないけど、ムリヤリ無名関数にすれば外を汚染しないとかあるからな。

373:デフォルトの名無しさん
17/09/23 17:28:51.15 WtNBJIHg.net
私のお聞きしたことに答えないなら、このスレで私がお役に立てることは無いです。
>>366
www.fxruby.orgは接続できませんでした。fox tkですね。guiは、はるか昔に考えたことがあります。が、普通はwxwidgets,tcltk,javaswingじゃないですか。guiを今ならhtmlしかないです。
作ってみても、どうせformもどきでしょ。しかもコードは、処理(命令)と云うより構造(宣言)だらけだし。
>>367
あなたとお話することはなさそうです。私が知ってることばかり、または、容易に推論できることばかりです。その程度の指摘しかできないなら、ググれば十分です。なので、あなたが、私へ、時間を使う、必要は、ありません。

374:デフォルトの名無しさん
17/09/23 18:41:00.21 oQZcLwSS.net
>guiを今ならhtmlしかないです。
xmlならwx,qt,gtkなどよく見るけどhtmlってどんなの?
HTA的なものがあるのかな

375:デフォルトの名無しさん
17/09/23 18:46:39.04 WtNBJIHg.net
>>369
stringが不明ですね。あなたは蟲なんですか?

376:デフォルトの名無しさん
17/09/23 19:23:40.35 xCJjTQ1w.net
>>368
なにこいつ(|||´Д`)

377:デフォルトの名無しさん
17/09/23 20:26:38.45 WtNBJIHg.net
rubyスレでも、達人はいなくなったんですね。寂しい限りです。

378:デフォルトの名無しさん
17/09/23 20:30:41.03 b6I3iAXW.net
もともといない

379:デフォルトの名無しさん
17/09/23 20:46:17.06 WtNBJIHg.net
>>373
ID導入の数年前までは少しいましたよ。今は、rubyの達人さんたちはどこにいるんでしょうか?

380:デフォルトの名無しさん
17/09/23 21:42:42.17 lJM5VEju.net
>>354
いくつか勉強不足な箇所はあるけど、「スコープがぐちゃぐちゃ」という
指摘に関しては、まったくもってそのとおりだね
>>> x = 1  # グローバル変数 x を初期値 1 で宣言
>>> def f(dx): x = x + dx  # 変数 x を破壊的に更新する手続き f を定義
... ^D
>>> f(2)  # 手続き f を引数 2 で呼び出してみると・・・
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 1, in f
UnboundLocalError: local variable 'x' referenced before assignment
まさに公式文書に書かれている通りの結果になった:
 URLリンク(docs.p)


381:ython.jp/3/glossary.html#term-nested-scope    ネストされたスコープはデフォルトでは変数の参照だけができ、    変数の代入はできないので注意してください。 では、続けてみよう >>> array = [1,2,3]  # グローバル変数 array を初期値 [1,2,3] で宣言 >>> def f(x): array.append(x)  # 変数 array を破壊的に更新する手続き f を定義 ... ^D >>> array  # 念のため、変数 array の内容を確認 [1, 2, 3] >>> f(4)  # 手続き f を引数 4 で呼び出してみると・・・ >>> array [1, 2, 3, 4]  # あれれ、グローバル変数なのに書き込みできてしまったぞぉ?!(棒



382:デフォルトの名無しさん
17/09/23 21:49:13.50 WtNBJIHg.net
ああ。このレベルなんですか。このスレは。よく分かりました。

383:357
17/09/23 23:11:57.93 lJM5VEju.net
Python を知らない人には >>357 はワケワカメだと思うので補足しとく
変数への破壊的代入を基本とする大半の手続き型言語、例えば Ruby や JavaScript、
さらには古典的な Pascal や C において、スコープは以下のように定義される:
 (1) あるスコープの内側で宣言された変数は、スコープの外側にあるコードから読み書きできない
 (2) あらゆるスコープの内側のコードは外側の変数を自由に読み書きできる
ところが Python という言語だけは、ナゼか (2) をオレ様定義した
 (2)’ あらゆるスコープの内側のコードは外側の変数を自由に読めるが、書き込みはできない
まあそんなオレ様定義も設計哲学やら個性と見れば批判にはならないのだけれど、
>>375 で実際のコードを使って示したように、このオレ様定義が実装されたのは
数値や文字列といった単純型だけで、配列/集合/辞書およびユーザ定義クラスといった
複合データ型では実装を忘れたものだから、何のためのオレ様定義だったの?と批判されている
おまけにこのスコープ問題を解決するために世の中の常識的なスコープ定義へ訂正するという
根本策を採用せず、わざわざ予約語 nonlocal やら grobal を消費してまで変数宣言文という構文を
追加するといふ「行き当たりばったりで適当な泥縄実装」を Python3 でやらかしたものだから、
>>354氏が指摘したように「スコープがぐちゃぐちゃ」になったわけです
このスコープ問題もラムダ式問題(>>303 の (3))と同様に Python4 で修正されて
「後方互換性の断絶」が再現されるんでしょうね

384:デフォルトの名無しさん
17/09/23 23:21:12.35 b6I3iAXW.net
>>376
このスレに達人がいると言うつもりもないけど
そんな一方的に上から目線になるほど
レベルの高いレスしたの?
>>365
>rbは複雑ですがshell scriptと考えれば、
>rbはplと比較するものではなく、bashの仲間です。
こんなのただの雑な印象論で
別にレベル高くないと思う
「Rubyってbashの仲間だよなー」って思ってる
Rubistがどれくらいいるかね?

385:357
17/09/23 23:34:44.90 lJM5VEju.net
>>359
>変数宣言とスコープが今の論点の一つなんですか?
いいえ、それらがホットな論点であるのは Python といふナイスジョーク言語だけです(>>377)

>>362
>ヘンな弱みみたいになってるかも。
あまりにひどい言い方ではないでしょうか(棒
Ruby のそれは単純明快なブロックというスコープの内側だけで有効なローカル変数宣言の構文です
それに対して Python は nonlocal などといふ否定形の単語で「非ローカル変数宣言」という
前代未聞で意味不明瞭な構文を追加してしまったんですよ
Ruby のそれが「ヘンな弱み」なら Python のそれは「トラウマレベルの致命的欠陥」です
でも、そこまで言うのはあまりに酷すぎるんじゃないかと思います(棒
かわいそうなので、Python に関する話題は止めにしませんか?

386:デフォルトの名無しさん
17/09/23 23:43:28.77 WtNBJIHg.net
pyでは、ブロック {} do endのサポートはされたんですか?

387:デフォルトの名無しさん
17/09/23 23:45:31.47 WtNBJIHg.net
>>378
そのレベルの高低は、何を基準としてでてきたんですか?

388:357 改め 375
17/09/23 23:55:10.03 lJM5VEju.net
名前欄と>>377内のアンカが間違っていたので訂正:
>>377
X:Python を知らない人には >>357 はワケワカメだと思うので補足しとく
O:Python を知らない人には >>375 はワケワカメだと思うので補足しとく
あと >>377 の grobal はglobal の typo

389:デフォルトの名無しさん
17/09/24 00:06:19.23 ry31kkE4.net
pyの話やpyの言語specはすれ違いです。まず、pyを使い続けることに疑問を持ったほうがいいでしょう。
人工知能など、十数年の周期で起きているインフルエンザです。あと2年は流行が続くでしょうけど、ノイマン型の限界で研究も限界が来るでしょう。そのときにpyの人気も終息します。
どうせバイトコードにするなら実行速度など比べても仕様がないと思うんですけど。なんでどうしようもないところを気にするんでしょうか。シングルスレッド?マルチスレッド?知能が低い人の考えてることは、なんだかよく分かりません。

390:デフォルトの名無しさん
17/09/24 00:54:08.29 ZoycLPfe.net
>>381
>>376
自分で「レベル」って言い出したんじゃん
スレのレベルより突出して
高いレスはないって言いたいだけ

391:デフォルトの名無しさん
17/09/24 06:59:11.54 bAyFiwH3.net
最近、このスレ以外でもマッチポンプ目的で荒らしが出没してるから気をつけて

392:デフォルトの名無しさん
17/09/24 09:08:31.15 L7/sMAP/.net
Pythonのスコープはひどいが、Rubyスレで言うことではないし
同じようにRubyのスコープもひどいのだから笑えない
「@」はどう見ても今時ではないし
if文などがスコープを持てないのも酷い
これらは変数宣言を無くしたからそうなった
明らか

393:デフォルトの名無しさん
17/09/24 09:21:53.62 bAyFiwH3.net
みんな釣られないでね

394:デフォルトの名無しさん
17/09/24 09:32:00.62 L7/sMAP/.net
Pythonのスコープは本当にバグってて
変数への代入の有る無しでスコープが変わる
どこのスコープに属しているか調べるのに
代入の有る無しを調べなければならない
変数への代入があればインナースコープで
参照のみならアウタースコープ
つまりは 変数宣言を無くしたことで
変数宣言->変数への(最初の)代入 としたので
代入の有る無しでスコープが変わるという糞になった
これに加えてnonlocalまである
このような動作は安全性の面から好ましいという人もいるが
それは絶対嘘で、実装上の都合でそうなったに過ぎない
本当にひどいと思うが
しかしRubyのスコープが優れているという結論には繋がらない

395:デフォルトの名無しさん
17/09/24 09:38:59.52 L7/sMAP/.net
Pythonは一例だが
基本的に変数宣言を無くすとスコープの仕様がバグる
だから変数宣言は有ったほうが良いし
どうせ変数宣言するんならオプショナルで型をけても悪くない
という風に考えていくと、すごくありきたりな言語が出来上がる
Rubyの最初のバージョンがそういう形で出来上がっていたら良かったが
一番最初の基本的な部分で誤ってしまって今更修正できない
修正すると、ごく普通の言語の仲間入りをするがRubyではなくなる
だから素晴らしい

396:デフォルトの名無しさん
17/09/24 09:40:47.21 EATy0LdH.net
スレ違い
なんでわざわざRubyスレ来てるんだろうかこの荒らし
寂しいの?

397:デフォルトの名無しさん
17/09/24 10:41:11.83 tu0D//Rh.net
>>366-369
Redmine は、Rails

398:デフォルトの名無しさん
17/09/24 14:06:06.63 ry31kkE4.net
便所の隅っこで、しかもrbスレでpyの話をしても、もしかしてアスペ?

399:デフォルトの名無しさん
17/09/24 17:06:53.98 bAyFiwH3.net
10スレ程前のスレを試しに見てみ

400:デフォルトの名無しさん
17/09/24 19:42:53.06 D2B0Yv9Y.net
何も見えません!!

401:デフォルトの名無しさん
17/09/24 22:11:40.34 bAyFiwH3.net
荒らしはうせろ

402:デフォルトの名無しさん
17/09/25 00:21:12.84 CVLN5qtY.net
ID:WtNBJIHg(>>363,365,368,370,372,374,376,380,381)
 URLリンク(hissi.org)
ID:L7/sMAP/(>>368,388,389)
 URLリンク(hissi.org)

403:デフォルトの名無しさん
17/09/25 00:59:05.75 CVLN5qtY.net
>>386
>Pythonのスコープはひどいが、Rubyスレで言うことではないし
などと言っておきながら、>>388っすか?

>同じようにRubyのスコープもひどいのだから笑えない
>「@」はどう見ても今時ではないし
>if文などがスコープを持てないのも酷い
結論として、Ruby のスコープ仕様に関する具体的な問題は、
主観的なその2点だけしか見つけられないほど小さいのだと
納得しますた

>>388
>しかしRubyのスコープが優れているという結論には繋がらない
誰一人「Rubyのスコープが優れている」なんて言っていませんけど
個人的には、Rubyのスコープ仕様は複雑だけど矛盾は無く一貫しているし、
きちんと理解すれば現実のプログラミングに支障は無いと思っています
ただし、とりたてて「Rubyのスコープが優れている」と言うほどのものではない
>>354氏が指摘してくれたように、Python のスコープ仕様は世の中の常識とは
かけ離れていて、あまりに酷すぎるんです(>>375,377)

404:デフォルトの名無しさん
17/09/25 01:36:00.79 SyR0/asg.net
さて同胞がRubyのスレでPythonの悪口言ってますよ
皆さん擁護してあげてください

405:デフォルトの名無しさん
17/09/25 02:09:17.63 Lq2k6P7o.net
よっしゃ
んじゃ俺はPythonスレでRubyを的外れにディスってくるぜ!!!!!

406:デフォルトの名無しさん
17/09/25 05:28:37.17 AJ+0XaK7.net
リアルで話相手見つけろ
ここにおまえを構ってくれるほど暇な人はいない
受け付けているレスは初心者の質問中心だ

407:デフォルトの名無しさん
17/09/25 13:37:27.59 7SZSTs1B.net
瑕疵担保責任(かしたんぽせきにん)
瑕疵担保責任のポイント
民法改正で事実上期限が「無制限」になった
バグや設計のミスなどは、瑕疵担保責任
納品物に不具合があれば損害賠償を請求される可能性もある
不具合を指摘されたらすぐに行動をとるべし
軽微なミスでも先延ばししない
URLリンク(www.atmarkit.co.jp)
URLリンク(itpro.nikkeibp.co.jp)
改正法では欠陥に気付いてから1年以内にITベンダーに通知すれば、
通知後5年以内は修正や報酬の減額などを求められるとしている
全ベンダーが泣いた民法改正案を解説しよう その1
URLリンク(www.atmarkit.co.jp)
URLリンク(www.atmarkit.co.jp)
URLリンク(www.atmarkit.co.jp)
ポイント1:修補や損害賠償、契約解除の期限がなくなる
従来あった「瑕疵担保期間は引き渡しから1年」という考えはなくなる。
条文にある通り、注文者は成果物が契約の目的に適合しないことを発見したら、
その「発見したときから1年以内」ならさまざまな請求ができる。発見が10年後なら、
11年後まで請求可能なのだ。
もっとも、現実のユーザーとベンダーの関係でも、たとえ契約書に「瑕疵担保責任期間は納品から1年と」明記されていても、
「2年目以降は不具合の修正に対応しない」と主張するベンダーはまれだ。多くの場合は、納品から何年たっても、
バグが見つかればユーザーのところに飛んで行き、無償で改修するだろう。

408:デフォルトの名無しさん
17/09/25 13:46:59.49 1g9PJt6J.net
スレ違い

409:デフォルトの名無しさん
17/09/26 03:49:41.39 m0UrTKNQ.net
arrayのpackメソッドってみんな全部覚てる?
俺は量が多くて覚えきれないから、いまいち何ができて何ができないか把握できない

410:デフォルトの名無しさん
17/09/26 03:52:37.86 w3seKs+r.net
packとかそもそも使わない

411:デフォルトの名無しさん
17/09/26 04:26:57.32 q4PyBsS5.net
バイナリいじったり、作ったりするときに使う
その都度リファレンスを読み返すけど

412:デフォルトの名無しさん
17/09/26 09:37:33.97 fZxiOEU0.net
>>403
だいたい何ができるかだけは覚えておく
詳細は覚えるだけ無駄なので毎回マニュアル見る
個人的にはこれまで使った回数合わせても10回くらいだと思う

413:デフォルトの名無しさん
17/09/26 21:26:43.24 U5HCny0u.net
使う回数多ければ自然と覚えるだろう
文字列扱うやつなら正規表現とかみたいに

414:デフォルトの名無しさん
17/09/26 23:01:09.68 qHxce6jn.net
packフォーマットってある意味暗号だよな
かと言ってFiddle::CStructとかFFI::Structとかは文字列オブジェクトをそのまま扱えないし
それにバイナリデータをいじる時たまにunionを扱いたくなるけど一手間なんだよね

415:デフォルトの名無しさん
17/09/26 23:20:44.46 Ij7a6zSN.net
プロトコルの多くがテキスト化してきてるから、packは出番が少なくなってるんだよねー

416:デフォルトの名無しさん
17/09/28 08:04:49.74 o7bSKTAB.net
Rubyでファイル群を再帰的にパースして抽出したデータを表計算ソフトで編集後に書き戻す
という処理をする場合に表計算ソフトとのインターフェイスを簡単かつスマートに実装できませんかね?
OSはWindows、Linux、FreeBSD。表計算ソフトはExcel、Libre/OpenOffice、Gnumericを想定します
現状はWindows上でSYLKを経由してLibreOfficeで編集しているのですが、Unicode文字をそのまま
扱えなかったり、SYLKのサポートが不完全だったり、編集の終了の検出が難しかったりして面倒です
CSV/TSVでは書式や数式を扱えないですし、ODFでも編集の終了の検出が難しい問題が残ります

417:デフォルトの名無しさん
17/09/28 08:41:02.01 Lc06qyoR.net
>>410
Rubyでの内部表現は処理しやすいようにして
表計算ソフトとのデータ受け渡しの際には
CSVに変換するのが普通だと思う

418:デフォルトの名無しさん
17/09/28 08:48:24.32 7AnfF7EJ.net
表計算ソフトのファイルを何とかしようというのは筋が悪いよね
データとビューを分離するべき

419:デフォルトの名無しさん
17/09/28 12:07:21.55 jWw+HTna.net
>>410
WindowsとExcelに限定してしまって、win 32oleモジュールで処理すれば。
Excelのフル機能にアクセスできるのでは。

420:デフォルトの名無しさん
17/09/28 23:24:47.20 Rgro2LTl.net
判りにくくてすみません
現状のRubyスクリプト
 ファイル群をパースして情報を抽出
 SYLKファイルを生成してこれを引数にLibreOffice Calcを起動。スクリプトは待機する
 Calcで情報を編集する。このときにセル参照や簡単な数式等を使用する場合がある
 編集した情報をSYLKファイルに上書き保存してCalcを終了する
 スクリプトが再開しSYLKファイルをパースして情報を取り出す
 ファイル群の情報を更新する
な感じです
>>411
最初はTSVを使っていたのですが>>410に書いた制約等を緩和するために今はSYLKを使用しています
>>412
情報を表形式のUIで編集したいです。これを一から作る大変なので既成の表計算ソフトを使えないかなと考え
今のような形になっています
>>413
Excelはライセンスを1つしか持っていないこともあって滅多に使いません(絶対に使わないわけではない)

421:デフォルトの名無しさん
17/09/29 00:38:00.00 KC1uJX1K.net
表にRubyコードをテキストとしてぶち込んで、
後でRubyからeval

422:デフォルトの名無しさん
17/09/29 01:01:10.45 c3tXL9dl.net
MVC の、データ部分だけを処理すべき。
View は、そのアプリ(表計算ソフト)独自の規格だから、無理
結局、View の規格を学ぶことは、
自分で表計算ソフトを作ることになり、車輪の再発明となり、
ビジネスロジックとは無関係のことに、開発費を掛けることになる

423:デフォルトの名無しさん
17/09/29 01:16:50.93 Zb0/fBQl.net
CSVで用が済まないならエクセルVBAでやるのが一番妥当だと言う結論に至った
システムにくっついたスクリプト言語がなんだかんだでマシである

424:デフォルトの名無しさん
17/09/29 01:30:05.66 RLeXl8wr.net
表計算アプリからの戻りはプロセスを監視するかファイルを監視するかしかない
Windowsの場合はファイルクローズをイベントとして基本的に拾えないので
定期的にポーリングするかファイル変更イベントを監視してチェックする
Linux系で動かしてinotify使うと楽
でも表計算アプリでの編集は手動だろうから
それが終わったらRubyを起動したんでも良くない? 個人用でしょ?
もしそれも面倒なら最低限のマクロを書いてRubyからwatchしやすくするとかかな

425:デフォルトの名無しさん
17/09/29 03:05:56.84 UluMyDjB.net
>>414
>Calcで情報を編集する
確認するけどこれは手動だよね?
>Calcを終了する
>スクリプトが再開し
「編集の終了の検出」で再開を自動化したいの?
普通に編集後スクリプトを
手動起動するんじゃダメなの?
商業アプリでも他ソフトで編集してから
再起動させるのは普通だと思うけど
もし表計算と何度も往復して面倒とかだったら
1. VBAを使ってエクセルメインで処理する
2. RubyにGUIをつけて編集可能にする
上記のいずれかを考えるが
表計算のGUIを実装するのは非常に大変なので
1の方が圧倒的に楽だと思う

426:デフォルトの名無しさん
17/09/29 05:59:14.07 jL38KlQs.net
表形式のUIで編集したいだけなんだから、GUIはWebブラウザに任せればいいだけじゃん

427:デフォルトの名無しさん
17/09/29 06:25:50.08 UluMyDjB.net
Webアプリにすれば連携しやすいが
GUIを実装するのに
JavaScriptが必要になる
JSが使える前提ならアリかもしれないが
やはりエクセルの挙動を再現するのは
ライブラリがあっても大変

428:デフォルトの名無しさん
17/09/29 07:29:16.17 Vf0Ansyt.net
require 'win32ole'
ServiceManager = WIN32OLE.new("com.sun.star.ServiceManager")
StarDesktop = ServiceManager.createInstance("com.sun.star.frame.Desktop")
doc = StarDesktop.loadComponentFromURL("private:factory/scalc", "_blank", 0, [])
#doc = StarDesktop.loadComponentfromUrl( 'file:///D:/Office/OOO/wrk.ods', '_hidden', 0, [])
sheet = doc.sheets.getByIndex(0


429:) cell = sheet.getCellByPosition(0, 1) cell = sheet.getCellRangeByName("A2") sheet.getCellRangeByName("A1").string = "文字" sheet.getCellRangeByName("B1").value = 123 sheet.getCellRangeByName("B2").value = 654 sheet.getCellRangeByName("B3").formula = "=B1+B2" p sheet.getCellRangeByName("A1").type p sheet.getCellRangeByName("B1").type



430:デフォルトの名無しさん
17/09/29 09:07:46.91 xJMWYcO3.net
やった事ないけどリブレオフィスならpythonでマクロ操作できるんじゃないの?

431:デフォルトの名無しさん
17/09/29 13:30:50.48 K1n6MHEs.net
ここまでの書き込みを読めばわかるけど
これだけ話がそれるのを見てもわかる通り
物凄く端的に言えば
出来ない
が回答のようだよ

432:デフォルトの名無しさん
17/09/29 13:52:36.88 KC1uJX1K.net
荒らしはうせろ

433:デフォルトの名無しさん
17/09/29 17:12:08.47 /1pN5XFr.net
>>423
出来るけど何をしたいの?

434:デフォルトの名無しさん
17/09/29 23:02:51.31 RLeXl8wr.net
Windowsで使ったことないけど
起動したプロセスを待ち受けるだけならこれ使ってみれば
URLリンク(github.com)

435:デフォルトの名無しさん
17/09/30 10:01:17.83 TLzEdb0d.net
来年のExcelを待とう。URLリンク(jp.techcrunch.com)

436:デフォルトの名無しさん
17/09/30 11:40:05.80 XdOHXaSN.net
本日14時から
ニコニコ動画などで
Excel方眼紙は悪なのか? その是非を問う公開討論会を生中継
2017/09/30 14:00開始 - ニコニコ生放送

437:デフォルトの名無しさん
17/09/30 20:03:10.07 auZlLsd0.net
質問です
ブロックつきで呼び出されたメソッドから、
super をブロックなしで呼び出したいんですが、
どうやればいいんでしょうか?
親クラスに外部イテレータ取得用のメソッドを追加するしかない?
コード例はこんな感じです
URLリンク(ideone.com)

438:デフォルトの名無しさん
17/09/30 20:58:00.31 zjhAyoS1.net
super(&nil)かな。でもeachのEnumeratorだからBのeachが呼ばれるだけだな

439:430
17/09/30 23:06:46.66 iQQJc6F+.net
>>431
method(&nil) って記法があるんですか
知らなかった……
まあ確かに今回の場合はこれではうまくいきませんが、
>>431さんのおかげで解決法は見つかりました
よーするに A#each を呼ぶときにブロックがあればいいわけなので
URLリンク(ideone.com)
こんな感じ?
17-18行目と、41行目以降です

440:430
17/09/30 23:09:29.84 iQQJc6F+.net
あっ 違う
URLリンク(ideone.com)
これでいいんですね
シンプルだしこれで行きたいと思います
どうもありがとうございました
そして sage 忘れ……

441:デフォルトの名無しさん
17/10/01 09:06:54.01 haDSEbeL.net
ジャアアアw

442:デフォルトの名無しさん
17/10/01 17:51:05.47 YAYz069J.net
Ruby 4: To Infinity and Beyond // Speaker Deck
URLリンク(speakerdeck.com)

443:デフォルトの名無しさん
17/10/04 16:19:15.38 x/lJJY2U.net
rubyの人工知能の本、もっと増えないかな

444:デフォルトの名無しさん
17/10/05 00:30:39.28 rJN31A7T.net
教えてください。
hash = [{"fruits"=>"apple","price"=>"100"},{"fruits"=>"orange","price"=>"50"}]
という風に続いている配列から
オレンジの値段を取り出す場合、
どうしたらいいですか?

445:デフォルトの名無しさん
17/10/05 01:02:40.96 MJCn4tJ3.net
ハッシュが入ってる配列にふさわしい名前は少なくともhashではない�


446:ニ思う irb> fruits_data = [{"fruits"=>"apple","price"=>"100"},{"fruits"=>"orange","price"=>"50"}] irb> fruits_data.each{|h| p h["price"]} "100" "50" irb> p fruits_data.map{|h| h["price"]} => ["100", "50"] irb> p fruits_data.inject(0){|sum, h| sum += h["price"].to_i} 150 だいたいこんな流れかと



447:デフォルトの名無しさん
17/10/05 01:07:26.58 MJCn4tJ3.net
すまん寝ながら書いてて要件満たしてなかった
irb> p fruits_data.find{|h| h["fruits"] == "orange"}
{"fruits"=>"orange", "price"=>"50"}
irb> p fruits_data.find{|h| h["fruits"] == "orange"}["price"]
"50"
文字列が嫌ならto_iでもしとけ

448:デフォルトの名無しさん
17/10/05 01:13:05.98 sXpkOy/U.net
>>437
URLリンク(ideone.com)

449:デフォルトの名無しさん
17/10/05 01:22:25.13 PaSIQ/4V.net
>>437
果物と値段を直接ペアにした方がシンプルになる
answer = ""
fruits_price = {"apple"=>"100","orange"=>"50"}
fruits_price.each do |k,v|
answer = v if k == "orange"
end
p answer #=> 50
書いてたら先を越されてしまった

450:デフォルトの名無しさん
17/10/05 01:37:00.79 URIOD7FQ.net
array.find{|i| i[:fruits] == "banana"}&.fetch(:price)

&.[:price]って書ければいいのに。
&.[](:price)は読みにくいからfetchで

451:デフォルトの名無しさん
17/10/05 07:56:55.79 rJN31A7T.net
>>438
>>441
>>442
みなさまありがとうございます!

452:デフォルトの名無しさん
17/10/05 22:52:18.95 RWFlOlgJ.net
Effective Ruby の項目10に書いてあるけど、
構造化データを扱う際、Hashの配列よりも、
クラスまたは、Struct(簡易クラス、クラスジェネレータ)のような専用の型を、使った方がいい
data[:name]
キー名のような実装の詳細が、隠蔽されず表に出てくる。
また、存在しないキーは、nilとなる
Person = Struct.new(:name, :address) #定数に代入
data = Person.new("foo", "fugafuga")
data.name
Structでは属性になるから、getter, setter も付いているし、
存在しない属性名でアクセスすると、NoMethodErrorになる

453:デフォルトの名無しさん
17/10/07 15:27:41.53 AWMSypLQ.net
ちまたのRubyハッカソンってどうやって見つけるの?

454:デフォルトの名無しさん
17/10/08 11:34:25.59 FYLwhXQv.net
Rubyの話題っていうか、rspecなんだけどさ、
すごいもやもや感がある。
rspec便利なんだけど、なんで通常のプログラミングとは
ことなった技術を使わないといけないだのだろう?
アサーションとかモックとか
アサーションって要は比較命令だろ?
モックは要はクラスの継承だろ?
もちろんテストのための機能(エラーが起きた時の情報表示)が
ついてるのはわかるよ。でもそれは本質的なことじゃなく
比較命令や継承ができればいいはず。
つまり通常のプログラミング技術と同じ書き方でテストコードも書けるはず。
テストコードが読みやすいようなDSLになっているというのなら
それを通常のプログラミングでも使えばいいやん?読みやすくなる。
なんでテスト用に特殊な書き方を覚えなきゃならないんだ?

455:デフォルトの名無しさん
17/10/08 12:00:51.07 qef5wK+C.net
TDD, BDD とか、流行っている
Ruby は、DSL に強いから、常に流行の最先端。
2, 3年遅れて、他の言語に取り入れられる

456:デフォルトの名無しさん
17/10/08 12:08:41.89 21EEh8/s.net
BDDを実現するためにあんな「変」な書き方になってる
どうしても性に合わなきゃフツーのユニットテストもあるよ
ただそういう「メソッドの戻り値が妥当かテストするテストの一覧」だけではテストたり得ないという考え方が主流


457: 個人的には好きよ、はみ出ないことを保証する自分向け補正レールとしての大量のユニットテスト群を高速でぐるぐるするやつ あの時代に戻れたらいいなと思うことはある



458:デフォルトの名無しさん
17/10/08 13:05:22.73 FYLwhXQv.net
>>477
Ruby TUEEEEはどうでもいいんだけど、そのレス見てRubyがなまじDSLに
強いからRubyという言語仕様の範囲内(内部DSL)にした結果
通常のプログラミングと異なる技術を使ってしまうんじゃないかって思った
いやちょっと違うかもな。通常のプログラミングで使う内部DSLとテスト用の
内部DSLが異なるという問題かもしれない。DSLといっても内部であればRubyという
言語でしかないので言い回しの違いでしかないかもしれないけど
TDDとかBDDとかshould系とかexpect系とか通常のアサーションとか正直どれもテストとしては
読みづらいと思う。英語としては読みやすいかもしれないけど、テストとしてはということ
どういうことかというと、テスト仕様書ってよくマトリクス(二次元の表)で書くでしょ?
日本語とか英語じゃなくて、マトリクスの形でテスト仕様書書いちゃうんだから
じゃあテストコードもマトリクスであるべきだよ。エクセルの表がまんまテストコードになる感じ
たぶんこの時点でRubyによる内部DSLとして書くのは無理なんじゃないかな
Rubyの表現能力を超えてしまう。無理にやっても読みづらくなる
そしてこのマトリクス。テストコード(定義書?データ?)はエンドユーザーでも
読みやすい(専用のテスト内容ビューワーを作っても良い)と同時にそれが
そのままアプリケーションのコードとして使えればよくね?
テストを書くだけでアプリができるとはいわない。それは不可能。でも減らすことはできる。
エンドユーザーがテストを目視で確認してOKだして、それがそのままアプリで使われれば楽じゃん?
このパラメータには英数字しか使えません。英数字しか入れられないようにチェックコード書きました
英数字しかうけつけないことを証明するテストコード書きました。頑張って英語風にしました。
そこまでやってもエンドユーザーはそれ見て判断できません。これじゃやっぱり無駄に感じる
俺が今話ししてるのはだいたい「定義」の部分なんだよね。「処理」ではない
処理に関してのテストはいままで通りやるしか無いと思うけど
定義に関するテストは(エンドユーザーにもわかりやすい形で)テストコードを書いて
それがそのまま通常のプログラミングのコードとして使えると思うんだよ
モックもクラス「定義」だしね

459:デフォルトの名無しさん
17/10/08 14:43:14.66 dWIEdLJn.net
じゃあとりあえず、そのやりかたを例示したら。
現行BDDへの不満はもうわかったので。

460:デフォルトの名無しさん
17/10/08 15:14:06.57 93IJP3PA.net
RSpecはテストを構造化しやすいのが良かったが
3からmatcherの文法がクソになったので基本使わない

461:デフォルトの名無しさん
17/10/08 17:04:31.77 X3i4AnjM.net
>>446
>なんでテスト用に特殊な書き方を覚えなきゃならないんだ?
それがDSLだから
たとえばHTMLやSQLもRubyやJSとはぜんぜん違うだろ
ただオレは実はMiniTest使ってる
RSpecが大きいフレームワークなので使いこなすの大変
RSpecはRakeやRailsみたいに独自の世界観築いてる
RubyでDSL使った大きめのフレームワークはみんなそう
使いやすいのはメリットだけど
学習コスト大きくなるデメリットもある
まあ個々に選べばいんじゃね?

462:デフォルトの名無しさん
17/10/08 17:43:35.10 FOJ8Xq1X.net
>>450
例示は5ちゃんねるとは別の場所でやってる or これからやる
ここではしない。雑多なアイデア?みたいなのを書いて
まあ誰か突っ込んでくれw
モック大嫌いなんだけど、今考えていて気づいたことが有る。
モックって形を変えた引き数なんだな。
テストする時のマトリクスとして考えれば、引数列とは別に
例えばAPI列があってその戻り値が○の場合なんて形で書くと思う
つまりArrange、Act、Assert(AAA)におけるArrange部分だな。
【アンチパターン】Arrange、Act、Assert(AAA)を意識できていないRSpecのコード例とその対処法
URLリンク(qiita.com)
モックを使う使わないに限らず、マトリクス(二次元の表形式)で
テスト仕様書(パターン)は作れると思う
あぁ、そうかrspec等は、このパターンを記述しづらいんだ。
describe、contextなどでパターンを書くことができるけど一覧性がない。
(マトリクスで書きづらいもののために)describe、contextみたいなものはあってもいいけど、
テストパターン(結果含む)とテスト内容はファイルごと分けるべきなんだろうな。
あとモックを使った場合、通常はテストパターンがあればいいと思うんだけど
呼び出し回数や引数テスト(つまりreceive(:hoge).with(引数)).at_least(回数).timesみたいなやつ)
なことをしたいことも有る。単体テストとして考えれば他のモジュール呼び出しだから理解はできるけど
どうみても内部実装に依存したテストだから嫌いだしわかりづらい
こういのはAAAと独立させて、内部実装のテストだって割り切って別に書くべきなんだろう。
マトリクスの表を用意して、引数列、テスト結果列とは別に、内部処理列を作って、
どういった関数が呼び出されるかを書いていく

463:デフォルトの名無しさん
17/10/08 17:52:31.79 FOJ8Xq1X.net
たとえば内部処理列に書くテストコードは
マトリックスの1行目を実行した場合、内部処理として
hoge.foo()
hage.bar(1,2,3)
tsuru.baz("aaa")
みたいに縦書きで書いていければいいんじゃないかな?
こういう処理が実行されることって。
あー、そうかrspecだと
Arrangeに相当する部分と
内部実装のテストがごっちゃになってるんだな。

464:デフォルトの名無しさん
17/10/08 17:57:45.59 FOJ8Xq1X.net
テスト仕様書ってエクセルがよく使われるけど、
それと同時にエクセルで書くなともいわれる。
ようは表計算としてとして使ってないからなわけだけど、
じゃあ表計算機能をなくしたものを作れば良いんじゃないかな

465:デフォルトの名無しさん
17/10/08 18:11:17.54 FOJ8Xq1X.net
ここまではテストパターンをどうやって書くかの話で
rspecでは一覧性がないから適していないという結論で良いんだろう。
これは別ファイルにするということで、describeとcontextとitあたりの
存在は消えたことだろう。
残ってるのはテストパターンではなくテスト内容。
expectとかそこらへん。これがまたRubyの通常のコードと
テストコードで書き方がぜんぜん違うってのが残ってるんだよな。
とここまで書いたが、あれ?テスト結果もマトリクスの
テスト結果列に書き込むよな?
テストコードのためにDSL(expectとか)を覚えなきゃいけないんって
本質的な問題は何なんだ?
テスト結果には、○○が××であること を
○○ == ×× みたいに書けるではないか?
あー、そうか。to be eq みたいに書かないと読みづらい(誰が?)という問題か。
to be eq みたいな構文いらんな。代わりにテストで使える命令のサブセット定義すればいい
そして専用のビューワーを使って見た時は、そのサブセット命令を日本語なりに置き換える。
WISYWIGみたいにどちらで書いても相互反映するのもいいだろう。

466:デフォルトの名無しさん
17/10/08 18:37:43.20 FOJ8Xq1X.net
バリデーション部分は実は前からアイデアがあって、
Railsとかこんな感じで書くわけだけど、
URLリンク(railsguides.jp)
こんなのは一切廃止して、言語非依存の
YAMLとかでバリデーション定義ファイルを作ればいいと思ってる。
そしてモデルでその定義ファイルを参照することもできるし、
APIからも参照することができる。関数からも参照することができる。
言語非依存ということは同じファイルをJavaScriptからも参照できるので
クライアントサイドのバリデーションも同時に定義できる。
ここで俺がいいたいことの1つとして、正規表現をバリデーション定義に
直接書くのはやめようということ。なぜなら技術的な内容過ぎて
エンドユーザーにはわからないから。
正規表現の代わりに独自の関数を使えば事足りる。
複数の条件や現在のデータも考慮しなければいけないものなどは
バリデーション定義ファイルでは実現できないかもしれないけど
重要なのは完璧にすることではなく無駄を減らすこと
またバリデーション定義に似たものとして
権限管理ファイルってのも考えられる。
なるべくエンドユーザーでも直接みれるようにして、
それをそのままプログラムに組み込めるようにしたい


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