Ruby 初心者スレッド Part 62

■ このスレッドは過去ログ倉庫に格納されています
2017/11/24(金) 00:35:29.31ID:rLZHdQ3Q
プログラミング言語Rubyについての、初心者向けスレです。質問・要望・雑談などどうぞ。
質問するときは、OSやRubyのバージョン、エラーメッセージを書いたほうがいいお
Ruby on RailsについてはWEBプログラミング板で

前スレ
Ruby 初心者スレッド Part 61
https://mevius.5ch.net/test/read.cgi/tech/1503644351/

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

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

逆引きRuby
http://www.namaraii.com/rubytips/
348デフォルトの名無しさん
垢版 |
2017/12/17(日) 03:54:31.53ID:X5PuZ6e5
>>347
お前に言ってるんだが
2017/12/17(日) 03:58:35.63ID:Hi83U6qj
え? その前に俺の>>342のレスに答えてよ
おとなしくなるって、俺のレスに答えられなくなるって
話だと思ったよ
2017/12/17(日) 04:02:09.36ID:vi6El7FV
ソースを直で修正し再ロードして実行までをrubyコード内で記述できるわけだから、
言ってしまえばなんだって出来る

gemでparse2rubyとか色々あるし
351デフォルトの名無しさん
垢版 |
2017/12/17(日) 04:18:39.08ID:X5PuZ6e5
>>349
ID:Hi83U6qj「俺はID:BeMxy3i4だ」と言われても、
スレを妨害してるのはお前しかいないんだが
2017/12/17(日) 04:48:50.54ID:PRNmBS9S
>>349
いつまで逃げ回る気だ荒らし
本人確認するかruby-devかruby-listで早く発言しろ

>>351
Ripper.sexp_rawで良い具合にメソッドを書き換えて使ってる
2017/12/17(日) 08:13:32.84ID:6NwF6CYy
「ruby-devかruby-listで発言しろ」って言いまくってる奴は単発IDでの自演常習犯だから絡まないでスルーしましょう
>>252でも説明したけど自治の振りをした粘着荒らしです
354デフォルトの名無しさん
垢版 |
2017/12/17(日) 09:16:34.42ID:X5PuZ6e5
自演を繰り返す荒らしがスレ住民全員を荒らし認定か
ruby-devかruby-listで発言するのがそれほど怖いのかな?
2017/12/17(日) 11:53:12.66ID:Hi83U6qj
妨害って何? Rubyの話ししてるでしょ
>>341へのレスしてくれるのを待ってるんだが?
2017/12/17(日) 11:54:17.21ID:Hi83U6qj
>>351
それ間違えたw 本当は>>341と書くつもりだった

透明あぼ〜んされてて見えなかったから
ずれてしまったのかな?
357デフォルトの名無しさん
垢版 |
2017/12/17(日) 12:02:37.42ID:X5PuZ6e5
スレッドの進行を妨害して荒らすな
2017/12/17(日) 13:07:26.56ID:7FFT55NR
ちょいと質問です。
Cだと"__"から始まったり、"_"+大文字となったりする識別子は予約扱いだと明文化されてるけど、Rubyはどうなのかちょっと気になってます。
組み込みで__FILE__ __LINE__ __method__とかが定義されているのは知ってます。

gemライブラリの中で2つのアンダースコート"__"から始まり、同じく"__"で終わるメソッド名を定義しようかと考えてるけど、問題ないかなと思って。
2017/12/17(日) 13:28:17.09ID:Hi83U6qj
@で始まる変数はインスタンス変数
@@で始まればクラス変数
$で始まれば組み込み変数
大文字で始まれば定数
selfもnilもtrueもfalseも変数
360デフォルトの名無しさん
垢版 |
2017/12/17(日) 13:31:03.53ID:X5PuZ6e5
リファレンスで擬似変数の所を見てかぶりそうなのをさければ問題ない
かぶっても見分けられるなら問題ない
2017/12/17(日) 13:36:18.37ID:CQTxJs7f
Ripper.sexpつかえばソースの自己書き換えできるだろ

誰だよ出来合ないって言ったのは
2017/12/17(日) 13:41:01.76ID:Hi83U6qj
誰も言ってないよ?w
2017/12/17(日) 14:16:42.77ID:CQTxJs7f
require "ripper"
require "pp"
pp Ripper.sexp("class Foo p self end")
#[:program,
# [[:class,
# [:const_ref, [:@const, "Foo", [1, 6]]],
# nil,
# [:bodystmt,
# [[:command,
# [:@ident, "p", [1, 10]],
# [:args_add_block, [[:var_ref, [:@kw, "self", [1, 12]]]], false]]],
# nil,
# nil,
# nil]]]]
これでリファクタリングが難しいとか時間がかかるとか言ってた奴もいたな
2017/12/17(日) 14:21:37.40ID:Hi83U6qj
>>363
読む時間も含めれば、時間かかるんじゃないの?
2017/12/17(日) 14:32:48.20ID:CQTxJs7f
どんだけ遅いCPU積んでるの?
2017/12/17(日) 14:42:49.46ID:Hi83U6qj
>>365
何を言ってるの?

リファクタリングっていうのは人が
どうすべきかを考えるんだよ

今何が問題で、どうすべきかを考えるためには
ソースコードを読んで理解しなければならない。

その理解するまでの時間の話なんだけど

で、そのコードをどうしたいのか俺には分からん
まずそこからだよね。君が説明するべきことは
2017/12/17(日) 15:09:58.55ID:CQTxJs7f
メソッド抽出、インライン化、メソッドシグニチャの変更と、
IDEにある主なリファクタリング機能なんだが
これをrubyには出来ないと言ってた奴が居るらしい
2017/12/17(日) 15:28:24.67ID:7FFT55NR
>>360
ありがとう。
かぶったらその時ってことで突き進みます。
369デフォルトの名無しさん
垢版 |
2017/12/17(日) 15:45:11.24ID:X5PuZ6e5
Kernelモジュールに__で始まるメソッドがあるからそれにも気をつけろ
わからないことがあったら一度自分でリファレンスを検索して細部までしっかり見ろ
2017/12/17(日) 15:51:07.46ID:F+iLZcQ1
>>367
メソッド抽出はできるけどインライン化やシグニチャの変更は安全には行えないよ
実際にどのメソッドが呼ばれるかは実行してみるまで分かんないし、メタプログラミングでメソッドが存在しない場合すら珍しくない
371デフォルトの名無しさん
垢版 |
2017/12/17(日) 16:13:40.93ID:X5PuZ6e5
シグニチャの変更は、Ripper.sexpからの配列をまわして旧シグニチャを指定のに書き換えてソースに戻せば良いように見える
そもそもrubymineで出来る
インライン化なんて普通に:assign部分を使われてるところで展開すればいいだけだからシグニチャの変更より楽そう
逆に変数の切り出しも出来るだろこれ

ちょっとコードを書いてみるか
2017/12/17(日) 16:34:07.16ID:DhuU3UWX
ElectronみたいにWebベースでGUIを作ってRubyで動的処理を行うフレームワークとかないんかな
ActiveScriptRubyは近いけどWin/IE限定の上にRScriptをインストールする必要があるのがイマイチ
インストール不要で軽量・軽快なのが欲しい
2017/12/17(日) 17:06:02.35ID:F+iLZcQ1
>>371
名前が一致すれば同じメソッドと見做すの?
とんでもないコードクラッシャーになるな
2017/12/17(日) 19:08:51.91ID:Hi83U6qj
結局Rubyでは候補を出すところまでしかできないんだよね
代数的に適用することができない

その変更が正しいかどうかをコード全体を読んで
考えないといけないから、時間がかかってしまう
2017/12/17(日) 19:09:35.99ID:Hi83U6qj
>>367
> メソッド抽出、インライン化、メソッドシグニチャの変更と、
> IDEにある主なリファクタリング機能なんだが

少ないね
376デフォルトの名無しさん
垢版 |
2017/12/17(日) 22:52:07.76ID:X5PuZ6e5
荒らすな
2017/12/18(月) 02:29:22.24ID:YRbzAMDV
ID:Hi83U6qjのレスは矛盾だらけだな
最近の荒らしはこんなに程度が低いの?
2017/12/18(月) 06:38:14.70ID:SUjpjhtq
じゃあその矛盾がどれかを指摘しましょう
2017/12/18(月) 06:48:05.27ID:D7KhQLFT
アンチが出たならアンチスレへ誘導をしろ
そのためのアンチスレなんだから

>>378
Rubyについて(アンチ専用) Part004
https://mevius.5ch.net/test/read.cgi/tech/1249737531/
ほら、アンチスレがあるんだからもう来るなよ
そこなら好きなだけネガキャンしても嘘ついても誰も文句を言わないから
2017/12/18(月) 07:53:27.68ID:SUjpjhtq
矛盾の指摘まだ?
2017/12/18(月) 07:53:50.72ID:SUjpjhtq
喧嘩ふっかけといてアンチスレに逃げるわけないよね?w
382デフォルトの名無しさん
垢版 |
2017/12/18(月) 08:25:44.94ID:9Kb0ajxH
2ch学習法(今なら5chか)って言われてたやつが通じると思ってるんだろうけどな。
2017/12/18(月) 12:55:26.65ID:L2o9nXM3
初心者スレはスレ消費激しいけどアンチスレはぜんぜん流行ってないな
アンチ死んでる?
2017/12/18(月) 14:28:08.01ID:jKkrC/n/
pythonが流行ってるからなあ。本もpythonばっかり
385デフォルトの名無しさん
垢版 |
2017/12/18(月) 15:10:45.19ID:aXpCltYZ
アンチは寂しくて初心者スレに来ちゃうわけか
2017/12/18(月) 15:26:16.95ID:XEro/kye
>>371を参考にしたらリファクタリング機能を組めた
ソース読み込んでS式書き換えてソースに書き戻すって処理だけど俺でも簡単に出来るんだな
2017/12/18(月) 15:56:52.19ID:e/V/7Ip9
selfがどこのどいつなのかが問題なんだがな
2017/12/18(月) 16:10:14.00ID:zBhLgaSa
こっちでは問題にすらなってない
俺ですら出来るレベルだけど、それでも無理ならVMにバイトコード見せてもらったら?
389デフォルトの名無しさん
垢版 |
2017/12/18(月) 16:25:37.10ID:4mfkLjZ7
>>387
そんな事も分からないお前が無能なだけ
もう来なくていいぞ
2017/12/18(月) 16:30:56.90ID:zBhLgaSa
[:var_ref, [:@kw, "self", [2, 0]]]みたいなノードがありそれを上にたどって行くとselfが何か判る
S式は慣れれば読めるし、処理も楽
2017/12/18(月) 17:48:23.09ID:e/V/7Ip9
入れ替えることができちゃうから実際には単純にはいかないってことを言いたかっただけ
2017/12/18(月) 21:23:52.48ID:SUjpjhtq
>>390
問題は、それが分かってもリファクタリングできないってことなんだよね
2017/12/18(月) 21:26:15.43ID:SUjpjhtq
いや、
リファクタリング前のソースコード からS式を作って

そのS式から「リファクタリングされたソースコードを生成して見せる」って
言うのならどうぞwどうぞw って話だけど

可能不可能の話なら可能。だけど大変すぎなのでやらない
それを「リファクタリングできない」っていう表現で>>392は書いた
2017/12/18(月) 21:30:35.88ID:ksjf7Uk6
>>393
いや正確に再現するのは不可能だよ
1+1とかダンプしてみ
2017/12/18(月) 21:33:39.72ID:SUjpjhtq
>>394
俺もS式から(可読性が高い)リファクタリングされた
ソースコードを作り出すのは不可能だと思ってるよw
だからダンプするまでもない

何が言いたいのかって言うと、リファクタリングの話題で
S式、S式、って何が言いたいんだこいつ?ってこと
S式はリファクタリングと何の関係もありません
2017/12/18(月) 21:35:19.46ID:SUjpjhtq
S式から可読性が悪い変なソースコードに変換することはできるだろうが
そりゃリファクタリングと真逆な行為だしな
2017/12/18(月) 21:53:35.09ID:ZBmMrMTz
そうそう
ripperのASTはコード生成には不向きであると言ってるだけで、別にRubyを否定しているわけじゃないのに何を必死に喚いてるんだろうね
コード生成に関しては、単に「文法上の同値の解釈」を一切入れない、より低レベルなパーサを作って正確なASTを得らればいいだけのことだ
動的型だって静的型にはない良さが沢山あるのに、アンチ連呼君はそこを無視して「静的型にできることは全てRubyにもできる」という無茶な主張を続けている
そうやって本質を理解しないまま無理筋で反論するから馬鹿にされるんだといいかげん気付け
2017/12/18(月) 23:16:47.78ID:LVUvAKSO
初心者だからRubyとPythonの違いがわからんのだけど、どう違うんだ?
Rubyがもっと流行ってもいいと思うんだけど
399デフォルトの名無しさん
垢版 |
2017/12/18(月) 23:28:55.91ID:tRPcthrg
おいアンチ、
初心者騙してないでいい加減アンチスレに帰れよ
おまえがリファクタリングできないのは判ったから
2017/12/19(火) 00:03:52.94ID:iE/A7V+0
自分でうまくソースコードに書き戻す処理が書けないのをRubyの所為にしてはダメだろう

どうしてもやりたい場合はRipper2rubyってgemを使え
2017/12/19(火) 00:16:12.52ID:si5W7uAD
可能不可能の話に持っていくから(わざとやってる?)
話がややこしくなるんだよ

構文解析は、静的でも動的でもできる。
その時、どれだけの情報を得られるかっていうのは
型情報を書いてある静的のほうが多いのは明白
(動的のメリットは書かなくて良いことなんだから、動的の方が多くなることはない)

静的のほうがより多くの情報を得られる。
それがリファクタリングをする上での情報の多さにつながり、
リファクタリングを自動化する上での情報にもつながる。

静的のほうが予め書いておく情報が多い分、静的解析でわかることが多い。
動的だとわからない情報は、人がコードを見て推測するしかない
人の作業は遅い、リファクタリングの速度につながってくる

リファクタリングが可能か不可能かの話じゃない
作業する時の速度の話
2017/12/19(火) 00:19:53.94ID:iE/A7V+0
素直にgemのripper2rubyを使え
おまえには無理だから
2017/12/19(火) 00:21:21.03ID:si5W7uAD
もちろんripper2rubyはリファクタリングをするためのgemではない
2017/12/19(火) 00:24:43.81ID:cabpZd/N
rubymineを使ってないの?
リファクタリングは簡単だよ
2017/12/19(火) 00:32:24.61ID:si5W7uAD
俺が言っても信用しないのだろうから、

http://washiiku.hatenablog.com/entry/2014/12/19/054914

> 上に書いたように変数の型をエディタが察してくれるので、
> 対応するメソッドなどにジャンプしたり、逆に使用されている
> 箇所も一覧で表示できます(ただし静的言語ほど正確ではない)

> JetBrains系ではお馴染みですがリファクタリングが便利です。
> スコープ内の変数名の変更が定番ですが、クラス名などグローバルな
> 名前は型情報からプロジェクト全体のリファクタリングをしてくれます。
> (上述したとおり静的言語ほど正確ではないので、大規模な変更は実用的ではない)


この正確でないというのが問題で、結局人が判断する部分が多くなる。
大規模な変更は実用的ではないのは何故かと言うと
大規模=変更箇所が多い=人が判断する場所が多いので
正しいこと判断するのが大変
2017/12/19(火) 00:33:30.38ID:si5W7uAD
https://twitter.com/nagise/status/890031111828414464

RubyMineもかなり頑張ってくれるんですが、それでも原理的に限界があるので、
使った場合、漏れがあったり、あるいは過剰に変換してないか確認が必要だったりしますね(自分の経験上)。
407デフォルトの名無しさん
垢版 |
2017/12/19(火) 00:35:31.16ID:OxL2RNB7
>>406
Rubyについて(アンチ専用) Part004
https://mevius.5ch.net/test/read.cgi/tech/1249737531/
おまえのスレに帰れ
二度と初心者を騙そうとするな
2017/12/19(火) 00:41:45.22ID:cabpZd/N
出来る出来ないの話じゃないって自分で言い出してからまだ30分も経ってないのに、
出来る出来ないの話に戻したな
これでは誰もアンチを信じてくれないわ
2017/12/19(火) 00:46:31.62ID:si5W7uAD
動的言語がなぜリファクタリングに弱いかというと
いつクラスの定義が定まるかを考えてみればわかる

まずリファクタリングというのはソースコードを修正する
そしてクラスの定義はソースコードから生成される

この時、ソースコードからクラスの定義が単純に決まれば良いのだが
動的言語では、実行するまでクラスの定義が決まらない

ならば実行すればいいと思うかもしれないが、何をどう実行すれば
クラスの定義が定まるのかを知る方法がない

つまりクラスをリファクタリングする場合、
クラスの完成形を知ることができないので、
人間が判断するしかなくなってしまい時間がかかる
410デフォルトの名無しさん
垢版 |
2017/12/19(火) 00:47:31.81ID:OxL2RNB7
>>409
長文はいいから自分のスレへ帰れ
ここはおまえの日記帳じゃない
2017/12/19(火) 00:48:21.71ID:si5W7uAD
>>408
> 出来る出来ないの話に戻したな
いつ俺が出来る出来ないの話に戻した?

実際にRubyMineを使っている人が、
出来ないって言ってるって話?
412デフォルトの名無しさん
垢版 |
2017/12/19(火) 00:49:30.71ID:OxL2RNB7
>>411
アンチが初心者スレで暴れるなら
2017/12/19(火) 00:49:36.49ID:si5W7uAD
>>410
> ここはおまえの日記帳じゃない

そりゃ俺の日記帳じゃないよw
みんなの日記帳だよ

便所の落書きなんていい方もされているが
俺はその言い方は好きではない
2017/12/19(火) 00:51:32.45ID:cabpZd/N
https://mevius.5ch.net/test/read.cgi/tech/1249737531/
アンチはアンチ専用スレでやれ
2017/12/19(火) 00:57:25.70ID:UYOJvaLF
単発IDで自演しまくる自治厨騙りの荒らしには構うな
スルーしろ
2017/12/19(火) 00:58:50.33ID:cabpZd/N
自演がばれてんぞ
2017/12/19(火) 00:59:26.95ID:si5W7uAD
単発IDお前やんw
2017/12/19(火) 01:01:02.38ID:cabpZd/N
アンチスレで好きなだけやれ
ここはお前のようなアンチのためのスレではない
2017/12/19(火) 01:02:55.81ID:7WjlvYND
そろそろうざいからアンチはアンチスレへ帰れ
2017/12/19(火) 01:03:46.23ID:si5W7uAD
単発ID、自演ばれてるで?w
2017/12/19(火) 01:05:19.68ID:cabpZd/N
見えない敵と闘っていないでアンチスレへ帰れ
そこなら好きなだけ自演しても誰も文句を言わないから
2017/12/19(火) 01:06:10.31ID:si5W7uAD
はっきり言わないと理解できないのかな?
俺はアンチスレには行きません
何度言われてもね
2017/12/19(火) 01:09:10.98ID:cabpZd/N
アンチやりたいならアンチスレへ行け
ここは初心者のためのスレだ

初心者を騙すためのスレではない
2017/12/19(火) 01:10:01.09ID:si5W7uAD
神様「お前の願いは叶えられることはなかった」
2017/12/19(火) 01:11:14.38ID:7WjlvYND
そもそもなんでアンチは発狂してんの?
顔真っ赤にしてないで落ち着けよ
2017/12/19(火) 01:12:07.22ID:si5W7uAD
発狂はしてないよw
面白いから書き込んでる
2017/12/19(火) 01:12:28.45ID:cabpZd/N
そんなに初心者スレで荒らし行為やアンチをやりたいのか?
2017/12/19(火) 01:14:15.45ID:si5W7uAD
荒らしてないよ?
Rubyでリファクタリングは静的言語よりも
大変だって話をしてる
2017/12/19(火) 01:15:12.45ID:cabpZd/N
初心者スレじゃないと話せないことなのか?
アンチスレでは話せないのか?
2017/12/19(火) 01:17:14.70ID:si5W7uAD
初心者スレ以外でも話せるよ
ただしアンチじゃないからね。Rubyの特徴を言っているだけ
アンチスレ以外のRubyスレどこででも話をする
2017/12/19(火) 01:19:57.23ID:cabpZd/N
お前のやってきたことはアンチ以外の何者でもないんだが

これからも、同じ事を続けていく気か?
2017/12/19(火) 01:22:18.20ID:si5W7uAD
はい
2017/12/19(火) 01:23:17.40ID:cabpZd/N
つまり、他の人にアンチ行為と受止められていると判ってて、
故意に続けるわけだな?
やめる気は無いのか?
2017/12/19(火) 01:23:40.17ID:si5W7uAD
ない
2017/12/19(火) 01:25:41.82ID:cabpZd/N
他の人に故意に不快を与える行為を続けるという事だね
板やレスの利用等を理解しているか?
2017/12/19(火) 01:27:13.66ID:si5W7uAD
うん
2017/12/19(火) 01:29:43.14ID:cabpZd/N
つまり、わかった上でやっているという事だね

それと、いまさらだがruby初心者?
2017/12/19(火) 01:30:38.45ID:si5W7uAD
ウイ
439デフォルトの名無しさん
垢版 |
2017/12/19(火) 01:32:59.85ID:cabpZd/N
つまりRuby初心者だから間違ったことを言っていたという事だね

それはつまり、これからも間違った事を言い続けるって事かな?
2017/12/19(火) 01:33:45.75ID:si5W7uAD
ノー
2017/12/19(火) 01:36:06.55ID:cabpZd/N
その返答は、今後は反省して間違ったことを言わない、って事を意味しているのかな?
2017/12/19(火) 01:39:05.84ID:si5W7uAD
           __
        , ‐' ´   ``‐、             / ̄:三}
.     /,. -─‐- 、.   ヽ        /   ,.=j
 _,.:_'______ヽ、 .!       ./   _,ノ
  `‐、{ へ  '゙⌒ `!~ヽ. !     /{.  /
    `! し゚  ( ゚j `v‐冫   , '::::::::ヽ、/     そんなことより野球しようぜ!
.    {.l   '⌒      ゙ 6',!   / :::::::::::::::/ __
.     〈  < ´ ̄,フ  .ノー'_ , ‐'´::::::::::::::;/ (_ノ)‐-、
.      ヽ.、 ` ‐", ‐´‐:ラ ':::::::::::::::: ;∠.   ヽ_}  ゙ヽ
        ,.r` "´  /:::::::::::::::::::ィ´  `ゝ  !、  /
     /       / :::::::::::::::: ; '´   /´\ /   r'\
.     i      ! ::::::::::::::/ 墨 | .!::::::::/ヽ、.._!ヽ. ヽ、
     {      {:::::::::::;:イ /   ‖i:::::::/:::::::::::::/  \
.      ヽ       ヽ,.ァ‐'´ /ヽ 二 ,/`ヽ、::::::::: /
2017/12/19(火) 01:41:22.11ID:cabpZd/N
君は、いままでアンチを繰り返し多くの人を故意に不快にさせてきたわけだが、
今後も続けるのかい?
2017/12/19(火) 01:42:11.51ID:si5W7uAD
飽きた、>>409まで内容巻き戻すわ

動的言語がなぜリファクタリングに弱いかというと
いつクラスの定義が定まるかを考えてみればわかる

まずリファクタリングというのはソースコードを修正する
そしてクラスの定義はソースコードから生成される

この時、ソースコードからクラスの定義が単純に決まれば良いのだが
動的言語では、実行するまでクラスの定義が決まらない

ならば実行すればいいと思うかもしれないが、何をどう実行すれば
クラスの定義が定まるのかを知る方法がない

つまりクラスをリファクタリングする場合、
クラスの完成形を知ることができないので、
人間が判断するしかなくなってしまい時間がかかる
445デフォルトの名無しさん
垢版 |
2017/12/19(火) 01:43:46.18ID:cabpZd/N
ではもう一度聞こう
今後は反省して間違ったことを言わない、という意思はあるのかな?
2017/12/19(火) 01:45:58.37ID:si5W7uAD
じゃまなので透明あぼーんした
2017/12/19(火) 01:50:12.56ID:7ZIeceXv
そんなことよりJOI2017/2018の話しようぜ
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況