プログラミング言語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/
Ruby 初心者スレッド Part 62
■ このスレッドは過去ログ倉庫に格納されています
2017/11/24(金) 00:35:29.31ID:rLZHdQ3Q
440デフォルトの名無しさん
2017/12/19(火) 01:33:45.75ID:si5W7uAD ノー
441デフォルトの名無しさん
2017/12/19(火) 01:36:06.55ID:cabpZd/N その返答は、今後は反省して間違ったことを言わない、って事を意味しているのかな?
442デフォルトの名無しさん
2017/12/19(火) 01:39:05.84ID:si5W7uAD __
, ‐' ´ ``‐、 / ̄:三}
. /,. -─‐- 、. ヽ / ,.=j
_,.:_'______ヽ、 .! ./ _,ノ
`‐、{ へ '゙⌒ `!~ヽ. ! /{. /
`! し゚ ( ゚j `v‐冫 , '::::::::ヽ、/ そんなことより野球しようぜ!
. {.l '⌒ ゙ 6',! / :::::::::::::::/ __
. 〈 < ´ ̄,フ .ノー'_ , ‐'´::::::::::::::;/ (_ノ)‐-、
. ヽ.、 ` ‐", ‐´‐:ラ ':::::::::::::::: ;∠. ヽ_} ゙ヽ
,.r` "´ /:::::::::::::::::::ィ´ `ゝ !、 /
/ / :::::::::::::::: ; '´ /´\ / r'\
. i ! ::::::::::::::/ 墨 | .!::::::::/ヽ、.._!ヽ. ヽ、
{ {:::::::::::;:イ / ‖i:::::::/:::::::::::::/ \
. ヽ ヽ,.ァ‐'´ /ヽ 二 ,/`ヽ、::::::::: /
, ‐' ´ ``‐、 / ̄:三}
. /,. -─‐- 、. ヽ / ,.=j
_,.:_'______ヽ、 .! ./ _,ノ
`‐、{ へ '゙⌒ `!~ヽ. ! /{. /
`! し゚ ( ゚j `v‐冫 , '::::::::ヽ、/ そんなことより野球しようぜ!
. {.l '⌒ ゙ 6',! / :::::::::::::::/ __
. 〈 < ´ ̄,フ .ノー'_ , ‐'´::::::::::::::;/ (_ノ)‐-、
. ヽ.、 ` ‐", ‐´‐:ラ ':::::::::::::::: ;∠. ヽ_} ゙ヽ
,.r` "´ /:::::::::::::::::::ィ´ `ゝ !、 /
/ / :::::::::::::::: ; '´ /´\ / r'\
. i ! ::::::::::::::/ 墨 | .!::::::::/ヽ、.._!ヽ. ヽ、
{ {:::::::::::;:イ / ‖i:::::::/:::::::::::::/ \
. ヽ ヽ,.ァ‐'´ /ヽ 二 ,/`ヽ、::::::::: /
443デフォルトの名無しさん
2017/12/19(火) 01:41:22.11ID:cabpZd/N 君は、いままでアンチを繰り返し多くの人を故意に不快にさせてきたわけだが、
今後も続けるのかい?
今後も続けるのかい?
444デフォルトの名無しさん
2017/12/19(火) 01:42:11.51ID:si5W7uAD 飽きた、>>409まで内容巻き戻すわ
動的言語がなぜリファクタリングに弱いかというと
いつクラスの定義が定まるかを考えてみればわかる
まずリファクタリングというのはソースコードを修正する
そしてクラスの定義はソースコードから生成される
この時、ソースコードからクラスの定義が単純に決まれば良いのだが
動的言語では、実行するまでクラスの定義が決まらない
ならば実行すればいいと思うかもしれないが、何をどう実行すれば
クラスの定義が定まるのかを知る方法がない
つまりクラスをリファクタリングする場合、
クラスの完成形を知ることができないので、
人間が判断するしかなくなってしまい時間がかかる
動的言語がなぜリファクタリングに弱いかというと
いつクラスの定義が定まるかを考えてみればわかる
まずリファクタリングというのはソースコードを修正する
そしてクラスの定義はソースコードから生成される
この時、ソースコードからクラスの定義が単純に決まれば良いのだが
動的言語では、実行するまでクラスの定義が決まらない
ならば実行すればいいと思うかもしれないが、何をどう実行すれば
クラスの定義が定まるのかを知る方法がない
つまりクラスをリファクタリングする場合、
クラスの完成形を知ることができないので、
人間が判断するしかなくなってしまい時間がかかる
445デフォルトの名無しさん
2017/12/19(火) 01:43:46.18ID:cabpZd/N ではもう一度聞こう
今後は反省して間違ったことを言わない、という意思はあるのかな?
今後は反省して間違ったことを言わない、という意思はあるのかな?
446デフォルトの名無しさん
2017/12/19(火) 01:45:58.37ID:si5W7uAD じゃまなので透明あぼーんした
447デフォルトの名無しさん
2017/12/19(火) 01:50:12.56ID:7ZIeceXv そんなことよりJOI2017/2018の話しようぜ
448デフォルトの名無しさん
2017/12/19(火) 01:54:22.14ID:RoMU0mit アンチスレに帰れよアンチ
449デフォルトの名無しさん
2017/12/19(火) 02:06:16.03ID:cabpZd/N Rubyについて知らない事を知ったふりして話してたわけか
道理で
道理で
450デフォルトの名無しさん
2017/12/19(火) 03:08:47.58ID:GcPOv6XA Ripper.sexp_rawからRipper.sexpに戻すと:stmts_add等が削られて微妙にやりにくい
全部rawの方でいい気がするがRipper.sexpってどういう時に使うんだ?
全部rawの方でいい気がするがRipper.sexpってどういう時に使うんだ?
451デフォルトの名無しさん
2017/12/19(火) 04:03:20.54ID:UdKVtF6e あれてんなw
型の次は、リファクタリングかよ
初心者の内容か?
俺の場合GoFなんかで書き直したい病が持病です。
んでrspec漏れてしょうもないバグおこす。
ほどほどに持病と付き合おうw
型の次は、リファクタリングかよ
初心者の内容か?
俺の場合GoFなんかで書き直したい病が持病です。
んでrspec漏れてしょうもないバグおこす。
ほどほどに持病と付き合おうw
452デフォルトの名無しさん
2017/12/19(火) 04:45:08.67ID:cabpZd/N453デフォルトの名無しさん
2017/12/19(火) 05:28:28.56ID:GcPOv6XA やっぱり表示用なんだ
それから出力された配列の操作なんだけど、
配列の中ごろ特定の要素を基に「上の配列に○○が在りかつ後ろの要素に△△があったら××」、
みたいな同定の仕方をしてるんだけど問題ある?
それから出力された配列の操作なんだけど、
配列の中ごろ特定の要素を基に「上の配列に○○が在りかつ後ろの要素に△△があったら××」、
みたいな同定の仕方をしてるんだけど問題ある?
454デフォルトの名無しさん
2017/12/19(火) 06:21:37.16ID:a07C5OyP 配列の操作ってそんなもんだろ
455デフォルトの名無しさん
2017/12/19(火) 07:00:22.12ID:ykexPK2V リファクタリングで香ばしい展開になっててわろた
オレがおっさんになったのが、たまたま住人がアホなのか、2ch民全体のレベルが下がったのか
オレがおっさんになったのが、たまたま住人がアホなのか、2ch民全体のレベルが下がったのか
456デフォルトの名無しさん
2017/12/19(火) 07:28:41.13ID:ZuB1zFT8457デフォルトの名無しさん
2017/12/19(火) 07:38:28.19ID:yvsoeKM9 >>455
Rubyはとっつきやすい分、ニワカとか、簡単だと思って挫折した勘違い君も多いからな。
リファクタリングにしても、用語の定義とか目的知らずに書いてるなあ、ってのばかり。
きちんと理解しようと思ったら、ガウディ本(CTMCP)で計算モデルを理解するのがお勧め。
あと「リファクタリング:Rubyエディション」とかで、以下を把握できる。
・リファクタリングはプログラム改善に使われることが多い。
・数多ある改善基準のうち、リファクタリングは何を対象にしているのか?
・改善手法は、計算モデルと、改善の目的により様々。
Rubyはとっつきやすい分、ニワカとか、簡単だと思って挫折した勘違い君も多いからな。
リファクタリングにしても、用語の定義とか目的知らずに書いてるなあ、ってのばかり。
きちんと理解しようと思ったら、ガウディ本(CTMCP)で計算モデルを理解するのがお勧め。
あと「リファクタリング:Rubyエディション」とかで、以下を把握できる。
・リファクタリングはプログラム改善に使われることが多い。
・数多ある改善基準のうち、リファクタリングは何を対象にしているのか?
・改善手法は、計算モデルと、改善の目的により様々。
458デフォルトの名無しさん
2017/12/19(火) 10:23:42.83ID:si5W7uAD >>457
なんかリファクタリングを理解してないようにみえる。
リファクタリングと計算モデルがどうつながるのか説明してみ
その後、あんたの意見と同等の話をしているサイトを言ってみ
リファクタリングと計算モデルは
ほとんどつながりがないことがわかるからさ
なんかリファクタリングを理解してないようにみえる。
リファクタリングと計算モデルがどうつながるのか説明してみ
その後、あんたの意見と同等の話をしているサイトを言ってみ
リファクタリングと計算モデルは
ほとんどつながりがないことがわかるからさ
459デフォルトの名無しさん
2017/12/19(火) 12:22:26.77ID:B3Kk66cH 結局、荒らしはアンチスレに帰らんかったのか
そりゃアンチスレも落ちぶれるわ
そりゃアンチスレも落ちぶれるわ
460デフォルトの名無しさん
2017/12/19(火) 22:13:01.86ID:5rvtlxA7 >>428
>Rubyでリファクタリングは静的言語よりも
>大変だって話をしてる
いいや、している話は:
「動的型付け言語は静的型付け言語よりも大変だ」
だよ
その主張は(個人的には)認めるけど、それだけでRubyスレに
粘着するのは荒らし行為そのものではないかな?
http://hissi.org/read.php/tech/20171219/c2k1Vzd1QUQ.html
それだけ「動的型付け言語におけるリファクタリング」に関心があるなら、
>>107 で紹介した専用スレへ移動すべきだよ
>Rubyでリファクタリングは静的言語よりも
>大変だって話をしてる
いいや、している話は:
「動的型付け言語は静的型付け言語よりも大変だ」
だよ
その主張は(個人的には)認めるけど、それだけでRubyスレに
粘着するのは荒らし行為そのものではないかな?
http://hissi.org/read.php/tech/20171219/c2k1Vzd1QUQ.html
それだけ「動的型付け言語におけるリファクタリング」に関心があるなら、
>>107 で紹介した専用スレへ移動すべきだよ
461デフォルトの名無しさん
2017/12/20(水) 00:18:03.50ID:n7Ixbq8J >>460
俺はそんなことは言ってないので他人の意見だね
Rubyが大変なのはソースコードを読むときだよ。書くときは比較的楽。
楽の意味がわからないなら、タイプ数が少ないと言い換えても良い
Rubyは書くときは楽で、読むときは大変
静的型付け言語はその逆
理由はまんまだが型という情報が書いてあるから。
情報を多く書かなければいけない静的型付け言語は大変で
でも情報が多く有るから静的型付け言語はわかりやすい
ただし前提として複数のモジュール(クラス等)から成り立ってる場合と
言ったほうが良いかもな。ローカル変数なんかは型が書いて無くても
すぐ近くにコードがあって該当の関数しか見なくていいから型がなくても大丈夫
一番の問題は複数モジュールから成り立っていて、特に別ファイルに分かれている場合
こういうのはドキュメントとして型情報を書いておかないと、わけわからなくなる
だけどドキュメントとして型情報書くなら、タイプ数は静的型付け言語より多くなってしまうので本末転倒
Rubyは書くときは楽(ドキュメントを書かないという前提)で、読むときは大変
ドキュメントを書くなら、それはソースコードに一元化した方がいいよって話になる
俺はそんなことは言ってないので他人の意見だね
Rubyが大変なのはソースコードを読むときだよ。書くときは比較的楽。
楽の意味がわからないなら、タイプ数が少ないと言い換えても良い
Rubyは書くときは楽で、読むときは大変
静的型付け言語はその逆
理由はまんまだが型という情報が書いてあるから。
情報を多く書かなければいけない静的型付け言語は大変で
でも情報が多く有るから静的型付け言語はわかりやすい
ただし前提として複数のモジュール(クラス等)から成り立ってる場合と
言ったほうが良いかもな。ローカル変数なんかは型が書いて無くても
すぐ近くにコードがあって該当の関数しか見なくていいから型がなくても大丈夫
一番の問題は複数モジュールから成り立っていて、特に別ファイルに分かれている場合
こういうのはドキュメントとして型情報を書いておかないと、わけわからなくなる
だけどドキュメントとして型情報書くなら、タイプ数は静的型付け言語より多くなってしまうので本末転倒
Rubyは書くときは楽(ドキュメントを書かないという前提)で、読むときは大変
ドキュメントを書くなら、それはソースコードに一元化した方がいいよって話になる
462デフォルトの名無しさん
2017/12/20(水) 00:50:26.05ID:gjXzJsOL 中身スカスカの長文なんてよく書き込めるな
頭の中もスカスカしてそう
頭の中もスカスカしてそう
463デフォルトの名無しさん
2017/12/20(水) 00:55:47.63ID:4hmeAMNm464デフォルトの名無しさん
2017/12/20(水) 02:10:20.76ID:wlycKVFQ rubyの可読性のよさには感動する
DSLとかすごい
たまーにendだらけになるのは難点w
DSLとかすごい
たまーにendだらけになるのは難点w
465デフォルトの名無しさん
2017/12/20(水) 02:23:39.76ID:Jv20jxkb 動的にリファクタリングさせるコード書いてるけど、
書けないやつはrubymine使えば良くね?
書けないやつはrubymine使えば良くね?
466デフォルトの名無しさん
2017/12/20(水) 02:51:18.20ID:s+zCj7ov 配列の操作そのものが難しいと勘違いしてるんじゃないか?
配列の操作に使うコードって大概は下みたいに10行前後で書けるだろ
class Array
def acces(ary = [])
return self if ary.empty?
colect_int = ary.dup
result = self[colect_int.shift]
return colect_int.empty? ? result : result.acces(colect_int)
end
end
配列の操作に使うコードって大概は下みたいに10行前後で書けるだろ
class Array
def acces(ary = [])
return self if ary.empty?
colect_int = ary.dup
result = self[colect_int.shift]
return colect_int.empty? ? result : result.acces(colect_int)
end
end
467デフォルトの名無しさん
2017/12/20(水) 05:23:54.83ID:Jv20jxkb 配列が苦手とか言われても
パーサから順にイベントを渡されて処理するより明らかに難易度低いだろ
パーサから順にイベントを渡されて処理するより明らかに難易度低いだろ
468デフォルトの名無しさん
2017/12/20(水) 06:54:28.40ID:6Esz8d8C 今のところ、リファクタリングについて誰ひとり説明できてないぞ?
もっとシンプルに表現できるだろw
もっとシンプルに表現できるだろw
469デフォルトの名無しさん
2017/12/20(水) 08:05:26.87ID:DZ3d9p1Y >>468
というお前さんも説明出来ない訳だが。
というお前さんも説明出来ない訳だが。
470デフォルトの名無しさん
2017/12/20(水) 08:07:18.11ID:DZ3d9p1Y >>458
数十レスも書いといて「リファクタリングとはこういうものだ」とすら書けない奴が何か言ってる。
数十レスも書いといて「リファクタリングとはこういうものだ」とすら書けない奴が何か言ってる。
471デフォルトの名無しさん
2017/12/20(水) 08:45:35.24ID:Za3FAu+s おい無職
自演はやめとけ
自演はやめとけ
472デフォルトの名無しさん
2017/12/20(水) 14:31:38.22ID:Za3FAu+s 毎朝7時8時から書き込める荒らしは何の仕事してるんや?
473デフォルトの名無しさん
2017/12/20(水) 18:57:50.54ID:2lbW5JOk RubyVM::InstructionSequence.compile("class Hoge end").eval
のコードを実行したら直後に
p Hoge.new
って問題無く書けるのか
コンテクストが別々だと勘違いしてた
のコードを実行したら直後に
p Hoge.new
って問題無く書けるのか
コンテクストが別々だと勘違いしてた
474デフォルトの名無しさん
2017/12/20(水) 22:34:07.59ID:4hmeAMNm >>470
リファクタリングを理解してませんと認めたってことでOKだね
リファクタリングを理解してませんと認めたってことでOKだね
475デフォルトの名無しさん
2017/12/20(水) 22:35:24.96ID:4hmeAMNm476デフォルトの名無しさん
2017/12/20(水) 22:48:45.50ID:4hmeAMNm >>466
> 配列の操作そのものが難しいと勘違いしてるんじゃないか?
> 配列の操作に使うコードって大概は下みたいに10行前後で書けるだろ
書けてないだろ?
それ何の処理するコードだよ
[1,2,3].acces([])
=> [1, 2, 3]
[1,2,3].acces([1])
=> 2
[1,2,3].acces([1,2])
NoMethodError: undefined method `acces' for 2:Integer
from (irb):6:in `acces'
from (irb):29
from C:/Ruby24-x64/bin/irb.cmd:19:in `<main>'
お前がそれじゃ、配列は難しいという結論にしかならんぞ
> 配列の操作そのものが難しいと勘違いしてるんじゃないか?
> 配列の操作に使うコードって大概は下みたいに10行前後で書けるだろ
書けてないだろ?
それ何の処理するコードだよ
[1,2,3].acces([])
=> [1, 2, 3]
[1,2,3].acces([1])
=> 2
[1,2,3].acces([1,2])
NoMethodError: undefined method `acces' for 2:Integer
from (irb):6:in `acces'
from (irb):29
from C:/Ruby24-x64/bin/irb.cmd:19:in `<main>'
お前がそれじゃ、配列は難しいという結論にしかならんぞ
477デフォルトの名無しさん
2017/12/20(水) 22:56:44.83ID:4hmeAMNm >>468
> 今のところ、リファクタリングについて誰ひとり説明できてないぞ?
> もっとシンプルに表現できるだろw
ソフトウェアの外部的振る舞いを保ちつつ、理解や修正が簡単になるように、内部構造を改善すること
補足を追加するならば、
振る舞いを保てていればいいので、アルゴリズムを変えてもOK
というか、無駄があったりしてわかりにくいアルゴリズムを
理解や修正が簡単になるように書き換えることもリファクタリングの一つ
何が言いたいかというと、リファクタリングはパースした結果が
一致するように書き換えることではないということ
パースできたからといって、リファクタリングができたことにはならない
> 今のところ、リファクタリングについて誰ひとり説明できてないぞ?
> もっとシンプルに表現できるだろw
ソフトウェアの外部的振る舞いを保ちつつ、理解や修正が簡単になるように、内部構造を改善すること
補足を追加するならば、
振る舞いを保てていればいいので、アルゴリズムを変えてもOK
というか、無駄があったりしてわかりにくいアルゴリズムを
理解や修正が簡単になるように書き換えることもリファクタリングの一つ
何が言いたいかというと、リファクタリングはパースした結果が
一致するように書き換えることではないということ
パースできたからといって、リファクタリングができたことにはならない
478デフォルトの名無しさん
2017/12/20(水) 23:30:14.73ID:nhQOfr/3 2.5まで後5日
479デフォルトの名無しさん
2017/12/21(木) 01:18:36.01ID:l5/5gdQz480デフォルトの名無しさん
2017/12/21(木) 01:42:59.97ID:prpojwIY >>479
いい加減学習しよう
422 自分:デフォルトの名無しさん[sage] 投稿日:2017/12/19(火) 01:06:10.31 ID:si5W7uAD [10/23]
はっきり言わないと理解できないのかな?
俺はアンチスレには行きません
何度言われてもね
いい加減学習しよう
422 自分:デフォルトの名無しさん[sage] 投稿日:2017/12/19(火) 01:06:10.31 ID:si5W7uAD [10/23]
はっきり言わないと理解できないのかな?
俺はアンチスレには行きません
何度言われてもね
481デフォルトの名無しさん
2017/12/21(木) 02:12:25.62ID:IcTBGDe8 自演ばれてんぞ
482デフォルトの名無しさん
2017/12/21(木) 02:49:55.63ID:l5/5gdQz483デフォルトの名無しさん
2017/12/21(木) 03:03:06.96ID:h5j2wgPh 例えば、構造やサイズが変わる多次元配列の要素を辿って行く必要がある場合、
添え字だけ集めて一括指定で辿れる様にするのって普通?
添え字だけ集めて一括指定で辿れる様にするのって普通?
484デフォルトの名無しさん
2017/12/21(木) 11:43:09.31ID:XGDp/jet >>477
はい。正解
はい。正解
485デフォルトの名無しさん
2017/12/21(木) 12:10:12.13ID:ow9tew52486デフォルトの名無しさん
2017/12/21(木) 13:37:15.11ID:K/addjJ3487デフォルトの名無しさん
2017/12/21(木) 14:41:34.48ID:nqxJQXq0 Array#dig
488デフォルトの名無しさん
2017/12/21(木) 18:29:48.77ID:ztrEyuDD 文字列に対して
・0〜9の一桁の数であれば頭に0を付け足す(例:00,01
・10以降はそのまま
という処理を行いたいんですが、正規表現でスパッとかけたりするんでしょうか
イメージとしては
text = "9"なら09
text = "10"なら10
として出力(print)がしたいです
gsubで置換できないか試しているのですがうまいこといかず・・・
アドバイス頂けますと幸いです
・0〜9の一桁の数であれば頭に0を付け足す(例:00,01
・10以降はそのまま
という処理を行いたいんですが、正規表現でスパッとかけたりするんでしょうか
イメージとしては
text = "9"なら09
text = "10"なら10
として出力(print)がしたいです
gsubで置換できないか試しているのですがうまいこといかず・・・
アドバイス頂けますと幸いです
489デフォルトの名無しさん
2017/12/21(木) 18:34:23.75ID:2OtOKx8R 正規表現よりも sprintfフォーマットを使おう
puts "%02d, %02d,%02d,%02d" % [1,5,10, 100]
#=> 01, 05,10,100
puts "%02d, %02d,%02d,%02d" % [1,5,10, 100]
#=> 01, 05,10,100
490デフォルトの名無しさん
2017/12/21(木) 18:34:49.31ID:ZdPTZj/x sprintf "%02d" % 9
sprintf "%02d" % 10
sprintf "%02d" % 10
491デフォルトの名無しさん
2017/12/21(木) 18:51:00.27ID:2OtOKx8R ちなみにあえてgsubでやるなら
'1'.gsub(/^(?=\d$)/, '0') #=> "01"
'42'.gsub(/^(?=\d$)/, '0') #=> "42"
'1'.gsub(/^(?=\d$)/, '0') #=> "01"
'42'.gsub(/^(?=\d$)/, '0') #=> "42"
492デフォルトの名無しさん
2017/12/21(木) 18:51:08.76ID:8yE94KQ4 %w(0 1 5 9 11 99 108 1024 16384).each do |x|
p x.sub(/^([0-9])$/) { "0#$1" } # キャプチャを使った例
# p x.sub(/^(?=[0-9]$)/) { "0" } # 先読みを使った例
# p "%02d" % x.to_i # 整数値に変換して書式文字列を使った例
end
"00"
"01"
"05"
"09"
"11"
"99"
"108"
"1024"
"16384"
p x.sub(/^([0-9])$/) { "0#$1" } # キャプチャを使った例
# p x.sub(/^(?=[0-9]$)/) { "0" } # 先読みを使った例
# p "%02d" % x.to_i # 整数値に変換して書式文字列を使った例
end
"00"
"01"
"05"
"09"
"11"
"99"
"108"
"1024"
"16384"
493デフォルトの名無しさん
2017/12/21(木) 19:24:42.40ID:gRGJJy1x ありがとうございます!sprintf、こういう風に使えるのですか。便利ですね・・・
正規表現での場合も教えていただきありがとうございました
勉強になりましたm(_ _)m
正規表現での場合も教えていただきありがとうございました
勉強になりましたm(_ _)m
494デフォルトの名無しさん
2017/12/21(木) 19:26:00.72ID:gRGJJy1x495デフォルトの名無しさん
2017/12/21(木) 19:32:53.88ID:aIK1VRoC 正規表現は後で泣くからなるべく使わないほうがいい。
もし使うのなら
複雑のは避けて
シンプル+シンプルと組み合わせて使うといい。
もし使うのなら
複雑のは避けて
シンプル+シンプルと組み合わせて使うといい。
496デフォルトの名無しさん
2017/12/21(木) 20:20:34.35ID:prpojwIY497デフォルトの名無しさん
2017/12/21(木) 22:24:14.24ID:OUKJWky+ >>461
>俺はそんなことは言ってないので他人の意見だね
いいや、もろに言ってるよ
君のレスに含まれるRubyという単語を改変してみた:
>動的型付け言語が大変なのはソースコードを読むときだよ。書くときは比較的楽。
>楽の意味がわからないなら、タイプ数が少ないと言い換えても良い
:
>理由はまんまだが型という情報が書いてあるから。
>情報を多く書かなければいけない静的型付け言語は大変で
>でも情報が多く有るから静的型付け言語はわかりやすい
なんら違和感もないだろう?あいも変わらずごく当たり前な一般論を語っているだけ
さあ、Rubyに限定されない「動的型付け言語におけるリファクタリング」を
語りたいのなら、このスレに粘着せず、>>107で紹介した専用スレへ移動しなさい
>俺はそんなことは言ってないので他人の意見だね
いいや、もろに言ってるよ
君のレスに含まれるRubyという単語を改変してみた:
>動的型付け言語が大変なのはソースコードを読むときだよ。書くときは比較的楽。
>楽の意味がわからないなら、タイプ数が少ないと言い換えても良い
:
>理由はまんまだが型という情報が書いてあるから。
>情報を多く書かなければいけない静的型付け言語は大変で
>でも情報が多く有るから静的型付け言語はわかりやすい
なんら違和感もないだろう?あいも変わらずごく当たり前な一般論を語っているだけ
さあ、Rubyに限定されない「動的型付け言語におけるリファクタリング」を
語りたいのなら、このスレに粘着せず、>>107で紹介した専用スレへ移動しなさい
498デフォルトの名無しさん
2017/12/21(木) 22:29:08.65ID:prpojwIY499デフォルトの名無しさん
2017/12/22(金) 10:53:32.70ID:zY/Ujd0Y 496から498までの自演を見てると小学生の演劇見せられてる気分になる
って事で晒しage
って事で晒しage
500デフォルトの名無しさん
2017/12/22(金) 15:56:43.92ID:o0zFMz04501デフォルトの名無しさん
2017/12/22(金) 15:57:53.00ID:o0zFMz04 つか、Ruby関係ないかw
502デフォルトの名無しさん
2017/12/22(金) 16:08:37.20ID:OF22/s+V ruby2.5は何が来るかな
503デフォルトの名無しさん
2017/12/22(金) 17:59:37.34ID:2CqGXpCv これでTypeScriptやPython方式の型ヒンティングが来たらコミュニティが大荒れするだろうな
504デフォルトの名無しさん
2017/12/22(金) 18:04:00.26ID:hLTr5w9I Ruby 2.5.0-rc1 リリース (12月14日)
https://www.ruby-lang.org/ja/news/2017/12/14/ruby-2-5-0-rc1-released/
★ 新機能 ★
* バックトレースおよびエラーメッセージが逆順に出力されるようになった (Railsゴリ押し?)
* トップレベルにおける定数検索の削除
* rescue/else/ensure が do/end ブロック内にも直接書けるようになった
* yield_self の追加
★ パフォーマンスの改善 ★
(略...
★ その他の注目すべき 2.4 からの変更点 ★
* Onigmo 6.1.3 の取り組み (実際は Ruby 2.4.1 にて取り込み済み)
* bundler の取り込み
その他略...
詳細は https://github.com/ruby/ruby/blob/v2_5_0_rc1/NEWS に書かれてる
☆彡 ☆彡 ☆彡 ☆彡 ☆彡
第三者の記事:
* サンプルコードでわかる!Ruby 2.5の主な新機能と変更点 https://qiita.com/jnchito/items/f182b6f0093a6a3701a1
https://www.ruby-lang.org/ja/news/2017/12/14/ruby-2-5-0-rc1-released/
★ 新機能 ★
* バックトレースおよびエラーメッセージが逆順に出力されるようになった (Railsゴリ押し?)
* トップレベルにおける定数検索の削除
* rescue/else/ensure が do/end ブロック内にも直接書けるようになった
* yield_self の追加
★ パフォーマンスの改善 ★
(略...
★ その他の注目すべき 2.4 からの変更点 ★
* Onigmo 6.1.3 の取り組み (実際は Ruby 2.4.1 にて取り込み済み)
* bundler の取り込み
その他略...
詳細は https://github.com/ruby/ruby/blob/v2_5_0_rc1/NEWS に書かれてる
☆彡 ☆彡 ☆彡 ☆彡 ☆彡
第三者の記事:
* サンプルコードでわかる!Ruby 2.5の主な新機能と変更点 https://qiita.com/jnchito/items/f182b6f0093a6a3701a1
505デフォルトの名無しさん
2017/12/22(金) 18:20:37.57ID:bOdX3AhV ね
ん
ま
つ
ん
ま
つ
506デフォルトの名無しさん
2017/12/22(金) 21:24:19.52ID:6yk8gXaG >>500
> 単純に静的言語はコンパイルである程度構文エラーを検出できるから楽を、
> リファクタリングが楽だと思ってるんじゃないかな
違うよ。静的型付け言語の場合が簡単なのは、
ソースコード上に型が書いてあるからだよ
コンパイルエラーは関係ない
例えば
class Klass {
> 単純に静的言語はコンパイルである程度構文エラーを検出できるから楽を、
> リファクタリングが楽だと思ってるんじゃないかな
違うよ。静的型付け言語の場合が簡単なのは、
ソースコード上に型が書いてあるからだよ
コンパイルエラーは関係ない
例えば
class Klass {
507デフォルトの名無しさん
2017/12/22(金) 21:28:48.59ID:6yk8gXaG (間違って途中で送信した)
例えば
class Klass {
function foo() { }
}
みたいなクラスがあって、
fooをbarに書き換える時
↓ このように型が書いてあれば、ここのfooもbarに
書き換えなきゃいけないとわかる
function f(Klass k) {
k.foo();
}
↓ でもこの場合は、書き換えれば良いのかわからない
function f(k) {
k.foo();
}
ソースコード全体から、fを呼び出している所をすべて探して
引数にKlassクラス(もしくはそれを継承したクラス)を
渡していることを確認しなければいけない
例えば
class Klass {
function foo() { }
}
みたいなクラスがあって、
fooをbarに書き換える時
↓ このように型が書いてあれば、ここのfooもbarに
書き換えなきゃいけないとわかる
function f(Klass k) {
k.foo();
}
↓ でもこの場合は、書き換えれば良いのかわからない
function f(k) {
k.foo();
}
ソースコード全体から、fを呼び出している所をすべて探して
引数にKlassクラス(もしくはそれを継承したクラス)を
渡していることを確認しなければいけない
508デフォルトの名無しさん
2017/12/22(金) 21:38:46.01ID:6yk8gXaG 今回は一番簡単な例としてメソッド名の変更を例にしたが
例えば、メソッドの引数の数が変わったときも
型がわかれば、メソッドが特定できるので、変えなければいけない場所がわかる
メソッドが消えたこともわかる
クラス名で検索すれば、そのクラスを使ってるモジュールもわかるしね
シグネチャの変更に関わる部分は、静的型付け言語の場合は
すごく簡単に変更すべき場所を特定できる
例えば、メソッドの引数の数が変わったときも
型がわかれば、メソッドが特定できるので、変えなければいけない場所がわかる
メソッドが消えたこともわかる
クラス名で検索すれば、そのクラスを使ってるモジュールもわかるしね
シグネチャの変更に関わる部分は、静的型付け言語の場合は
すごく簡単に変更すべき場所を特定できる
509デフォルトの名無しさん
2017/12/22(金) 21:40:18.92ID:6yk8gXaG ここにリファクタリングの種類が書いてあるが、大部分は
シグネチャ(クラスやメソッドの名前や引数の変更)を伴うものだよ
https://so-zou.jp/software/tech/programming/tech/refactoring/
シグネチャ(クラスやメソッドの名前や引数の変更)を伴うものだよ
https://so-zou.jp/software/tech/programming/tech/refactoring/
510デフォルトの名無しさん
2017/12/22(金) 21:42:20.33ID:2CqGXpCv Rubyの静的解析の難しさに関して言えば、単にソースに型が書いてないというだけではないんだよなあ
Rubyって、静的なクラス定義というのがそもそも存在しないんだよ
動かしてみて、RubyのVMのメモリ上に結果としてクラスオブジェクトができて、そこではじめてクラスが定義されたことになるの
この式のクラスは何か?とか考える以前に、クラスなんてものは動かしてみるまで無いの
Rubyって、静的なクラス定義というのがそもそも存在しないんだよ
動かしてみて、RubyのVMのメモリ上に結果としてクラスオブジェクトができて、そこではじめてクラスが定義されたことになるの
この式のクラスは何か?とか考える以前に、クラスなんてものは動かしてみるまで無いの
511デフォルトの名無しさん
2017/12/22(金) 21:48:13.59ID:6yk8gXaG そう。それもあるね。
動くか、動いてないかの二択じゃないか?って
思うかもしれないがぜんぜん違う。
動いてない状態というのは一つしかないが、
動いている状態というのは無限に近い数ある
「0」と「0以上」の違いと同じ
動いてないという一つの状態なら、全部を調べることも可能だが、
動いているという無限にある状態は、調べ上げることは不可能
動くか、動いてないかの二択じゃないか?って
思うかもしれないがぜんぜん違う。
動いてない状態というのは一つしかないが、
動いている状態というのは無限に近い数ある
「0」と「0以上」の違いと同じ
動いてないという一つの状態なら、全部を調べることも可能だが、
動いているという無限にある状態は、調べ上げることは不可能
512デフォルトの名無しさん
2017/12/22(金) 22:04:35.06ID:5nY8hqH+513デフォルトの名無しさん
2017/12/22(金) 22:17:37.91ID:6yk8gXaG 「クラスなんてものは動かしてみるまで無い」かもしれないが、
「仕様(やりたいこと)は動かしてみなくてもある」
ソースコードは動かさなくても「そのクラスは○○であること」
(○○にはメソッドが有ることとかはいります)を前提に
書いてあるというのに「動かしてみるまで無い」ことに意味があるのだろうか
「仕様(やりたいこと)は動かしてみなくてもある」
ソースコードは動かさなくても「そのクラスは○○であること」
(○○にはメソッドが有ることとかはいります)を前提に
書いてあるというのに「動かしてみるまで無い」ことに意味があるのだろうか
514デフォルトの名無しさん
2017/12/22(金) 22:21:48.38ID:2CqGXpCv >>513がRailsを触ったことがないのはわかった
515デフォルトの名無しさん
2017/12/22(金) 22:25:46.71ID:6yk8gXaG516デフォルトの名無しさん
2017/12/22(金) 22:27:24.55ID:2CqGXpCv517デフォルトの名無しさん
2017/12/22(金) 22:32:17.34ID:6yk8gXaG >>516
DBのスキーマを実行時に変えたりすることなんてまず無いだろ
実行前にスキーマは決まってる。
ならクラスも実行前に生成することは可能なわけだが?
Railsが実行後に決めているからと言って、実行時に決まることにはならない
スキーマは実行前に決まっているし、今話してるソースコードだって
そのフィールドが存在するという前提のソースコードを書いてるだろ
動的に生成してるその情報は、本当は実行前に決まってるんやで?
DBのスキーマを実行時に変えたりすることなんてまず無いだろ
実行前にスキーマは決まってる。
ならクラスも実行前に生成することは可能なわけだが?
Railsが実行後に決めているからと言って、実行時に決まることにはならない
スキーマは実行前に決まっているし、今話してるソースコードだって
そのフィールドが存在するという前提のソースコードを書いてるだろ
動的に生成してるその情報は、本当は実行前に決まってるんやで?
518516
2017/12/22(金) 22:43:01.67ID:2CqGXpCv 可能かどうかとやるかどうかは別問題だろう
それRuby3の型検査の仕様として提案してみろ、このスレどころではなく罵倒と嘲笑の的だぞ
それRuby3の型検査の仕様として提案してみろ、このスレどころではなく罵倒と嘲笑の的だぞ
519デフォルトの名無しさん
2017/12/22(金) 22:44:49.43ID:6yk8gXaG520デフォルトの名無しさん
2017/12/22(金) 22:49:53.16ID:6yk8gXaG 動的言語といっても本当に動的に決まることはほとんどなく
静的に決まってる情報を元に動的に作ってるだけなんだよな。
だから実行するたびに毎回同じものが作られる。
毎回同じものを作るなら、キャッシュするかのように
最初から作っておけば良いわけさ
静的に決まってる情報を元に動的に作ってるだけなんだよな。
だから実行するたびに毎回同じものが作られる。
毎回同じものを作るなら、キャッシュするかのように
最初から作っておけば良いわけさ
521デフォルトの名無しさん
2017/12/22(金) 22:50:08.15ID:2CqGXpCv >>519
DBスキーマまで考慮したメタプログラミング対応の静的解析ツールを作るってこと?
実用的なものができると本気で思うなら作ればいいんじゃね?
みんな喜ぶし、そんな実績があればそれこそMRIの主要メンバーとしてRuby3の仕様決定を主導できるぞ
頑張れよ
DBスキーマまで考慮したメタプログラミング対応の静的解析ツールを作るってこと?
実用的なものができると本気で思うなら作ればいいんじゃね?
みんな喜ぶし、そんな実績があればそれこそMRIの主要メンバーとしてRuby3の仕様決定を主導できるぞ
頑張れよ
522デフォルトの名無しさん
2017/12/22(金) 23:01:34.92ID:6yk8gXaG >>521
だから動的言語の仕様じゃ無理だって話してるじゃんw
ソースコードにクラスという型を書いてあるから多くのリファクタリングが簡単に出来るようになる
静的に決まってるならソースコードに静的に書けるわけで、
静的に書いておけば、リファクタリングが簡単に早くできるって話をしてる
だから動的言語の仕様じゃ無理だって話してるじゃんw
ソースコードにクラスという型を書いてあるから多くのリファクタリングが簡単に出来るようになる
静的に決まってるならソースコードに静的に書けるわけで、
静的に書いておけば、リファクタリングが簡単に早くできるって話をしてる
523デフォルトの名無しさん
2017/12/22(金) 23:36:34.81ID:5nY8hqH+524デフォルトの名無しさん
2017/12/23(土) 00:24:15.46ID:eRzaIxhX 動的メソッドは?(初心者並感)
525デフォルトの名無しさん
2017/12/23(土) 07:12:36.09ID:SJqo2RLv >>522のその論理はもういいよw
食いたくないのに食わされてお腹いっぱいっすわ
食いたくないのに食わされてお腹いっぱいっすわ
526デフォルトの名無しさん
2017/12/23(土) 07:28:35.18ID:SJqo2RLv527デフォルトの名無しさん
2017/12/23(土) 10:11:10.96ID:f0qvO5Sa528デフォルトの名無しさん
2017/12/23(土) 10:11:40.67ID:f0qvO5Sa >>525
食いたくないなら見るな
食いたくないなら見るな
529デフォルトの名無しさん
2017/12/23(土) 10:13:50.17ID:AknL/7GP このスレはいっつも議論してんなぁ
みんな日中は何してる人なの?
みんな日中は何してる人なの?
530デフォルトの名無しさん
2017/12/23(土) 10:18:01.60ID:f0qvO5Sa 普通に仕事してるよ。
だから平日の日中は書き込めない
だから平日の日中は書き込めない
531デフォルトの名無しさん
2017/12/23(土) 10:58:49.51ID:YmDQ4aAw Rspecで下みたいな書き方ってあり?
それとも避けられる?
# def f n
# n + n
# end
context 'fの引数が0から255のとき' do
??256.times do |i|
????it { expect( f(i) ).to eq (2 * i) }
??end
end
それとも避けられる?
# def f n
# n + n
# end
context 'fの引数が0から255のとき' do
??256.times do |i|
????it { expect( f(i) ).to eq (2 * i) }
??end
end
532デフォルトの名無しさん
2017/12/23(土) 11:05:45.83ID:QLWK33W3533デフォルトの名無しさん
2017/12/23(土) 11:10:32.49ID:YmDQ4aAw >>532
じゃあもし0から255まで全部パスするか書きたいときは
it { expect( f(0) ).to eq (0) }
it { expect( f(1) ).to eq (2) }
...
ってズラっと列挙しろってこと?
じゃあもし0から255まで全部パスするか書きたいときは
it { expect( f(0) ).to eq (0) }
it { expect( f(1) ).to eq (2) }
...
ってズラっと列挙しろってこと?
534デフォルトの名無しさん
2017/12/23(土) 11:14:45.72ID:QLWK33W3 あと、「nの2倍を返す」という観点と「入力は0から255まで」という観点がごっちゃになってるのも良くない
この場合、前者を代表値(5とか)でテストして、それに加えて後者の観点で境界値(0と255)を試すくらいでいいと思うよ
代表値は冗長かもしれないけど前者の観点をわかりやすく表現するという意味では価値はある
この場合、前者を代表値(5とか)でテストして、それに加えて後者の観点で境界値(0と255)を試すくらいでいいと思うよ
代表値は冗長かもしれないけど前者の観点をわかりやすく表現するという意味では価値はある
535デフォルトの名無しさん
2017/12/23(土) 11:18:46.43ID:LnjVX11P プロパティテストにしろよ。
536デフォルトの名無しさん
2017/12/23(土) 11:58:54.91ID:YmDQ4aAw537デフォルトの名無しさん
2017/12/23(土) 15:22:55.73ID:f0qvO5Sa テステス
538デフォルトの名無しさん
2017/12/23(土) 15:29:55.01ID:UWK7YGb5 荒らしがハッスるしとる
やっぱアンチも人のいないアンチスレより人の多い本スレに来てしゃべりたいのか
かわいそう
やっぱアンチも人のいないアンチスレより人の多い本スレに来てしゃべりたいのか
かわいそう
539デフォルトの名無しさん
2017/12/23(土) 15:32:00.40ID:f0qvO5Sa あ、いや、いままでとちょっと違うことを書き込もうと思ったけど
ID変わってたかなーって思っただけ
変わってなかったので違う話はしないよw
あと他のスレには行かないと何度もいってる
あきらメロン
ID変わってたかなーって思っただけ
変わってなかったので違う話はしないよw
あと他のスレには行かないと何度もいってる
あきらメロン
540デフォルトの名無しさん
2017/12/24(日) 09:48:03.56ID:24EH1p52 https://rubyinstaller.org/downloads/
Windows10 に、Ruby を入れようと、
上のページの、7-Zip Archives から、Ruby 2.4(x64)をダウンロードすると、
rubyinstaller-2.4.3-1-x64.7z というファイル名だった。
これを、7-Zip で解凍すると、56MB になった
C:\Ruby24-x64\
とフォルダ名を変えたけど、ここからどうやってインストールするの?
それとも、これはインストーラーではないのかな?
Windows10 に、Ruby を入れようと、
上のページの、7-Zip Archives から、Ruby 2.4(x64)をダウンロードすると、
rubyinstaller-2.4.3-1-x64.7z というファイル名だった。
これを、7-Zip で解凍すると、56MB になった
C:\Ruby24-x64\
とフォルダ名を変えたけど、ここからどうやってインストールするの?
それとも、これはインストーラーではないのかな?
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 中国国営メディア「沖縄は日本ではない」… ★6 [BFU★]
- 高市政権にパイプ役不在…日中高まる緊張 公明党の連立離脱影響、自民内にも懸念「自分でまいた種は自分で刈り取ってもらわないと」★2 [ぐれ★]
- 【速報】 日経平均の下落率3%超す、財政懸念で長期金利上昇 [お断り★]
- 【速報】 高市政権、「日本版DOGE」を立ち上げ 米国で歳出削減をした「政府効率化省(DOGE)」になぞらえたもの [お断り★]
- 台湾声明 「台湾は独立した主権国家、中国は台湾を統治したことがなく、中国は口出しする権利ない」 中国が高市首相に抗議で ★7 [お断り★]
- 【こんなの初めて…】民泊には既にキャンセルも 中国の渡航自粛で ★2 [ぐれ★]
- 高市のプライドはエベレストより高い。だから、発言を撤回できない [805596214]
- 台湾政党が高市首相「存立危機事態」発言に感謝の書簡「我々の心を強く奮い立たせるものでした」 [834922174]
- 中国「高市が謝罪撤回しないとこれ全部なくなるけどどうする?」 [931948549]
- 【正論】有識者「高市早苗に合理的配慮をしなかった野党が悪い」 [175344491]
- 日経平均、49000円割れ 国賊高市を許すな ★2 [402859164]
- 【悲報】中国を煽り運転に例えたネトウヨさん、完全に論破されてしまう [268718286]
