プログラミング言語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
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\
とフォルダ名を変えたけど、ここからどうやってインストールするの?
それとも、これはインストーラーではないのかな?
541デフォルトの名無しさん
2017/12/24(日) 10:02:29.66ID:naA/wMe4 環境を書いてから
何したいかを言え
何したいかを言え
542デフォルトの名無しさん
2017/12/24(日) 10:08:38.24ID:imZP4RC3 なんで素直にexe落とさないの?
543540
2017/12/24(日) 10:48:40.19ID:24EH1p52 圧縮された書庫だから、7-Zip Archives から、Ruby 2.4(x64)をダウンロードしたけど、
これはインストーラーとは違うものなのか?
rubyinstaller-2.4.3-1-x64.7z というファイル名だったけど
7-Zip Archives の上にある、RubyInstallers から、Ruby 2.4(x64)をダウンロードしてみるわ
これはインストーラーとは違うものなのか?
rubyinstaller-2.4.3-1-x64.7z というファイル名だったけど
7-Zip Archives の上にある、RubyInstallers から、Ruby 2.4(x64)をダウンロードしてみるわ
544540
2017/12/24(日) 11:01:29.86ID:24EH1p52 PowerShell で、7-Zip Archives 中の、\bin\ridk.ps1 version を実行してみた
PS C:\Ruby24-x64\bin> .\ridk.ps1 version
---
ruby:
path: C:/Ruby24-x64
version: 2.4.3
platform: x64-mingw32
ruby_installer:
package_version: 2.4.3-1
git_commit: 36aac73
os: Microsoft Windows [Version 10.0.16299.125]
やっぱり、これも、RubyInstaller なのかな?
よくわからない
PS C:\Ruby24-x64\bin> .\ridk.ps1 version
---
ruby:
path: C:/Ruby24-x64
version: 2.4.3
platform: x64-mingw32
ruby_installer:
package_version: 2.4.3-1
git_commit: 36aac73
os: Microsoft Windows [Version 10.0.16299.125]
やっぱり、これも、RubyInstaller なのかな?
よくわからない
545デフォルトの名無しさん
2017/12/24(日) 11:02:00.42ID:A3ERayLu Rubyにパイプラインオペレータってないの?
JavaScriptだと
exclaim(capitalize(doubleSay("hello")));
というカッコの入れ子が
"hello" |> doubleSay |> capitalize |> exclaim;
とシェルスクリプトのパイプのように
流れるような形で記述できるようになるらしいんだけど
JavaScriptだと
exclaim(capitalize(doubleSay("hello")));
というカッコの入れ子が
"hello" |> doubleSay |> capitalize |> exclaim;
とシェルスクリプトのパイプのように
流れるような形で記述できるようになるらしいんだけど
546デフォルトの名無しさん
2017/12/24(日) 11:05:46.33ID:mMj7aGtc547540
2017/12/24(日) 11:08:13.75ID:24EH1p52 7-Zip Archives からダウンロードした、Ruby 2.4(x64)は、
ひょっとして、CUI 版のインストーラーなのかな?
(rubyinstaller-2.4.3-1-x64.7z というファイル名だった)
7-Zip Archives 中の、\bin\ridk.ps1 に引数を付けて、
インストールするのかも知れない
よくわからないけど。
インストーラーじゃないかも知れないし
ひょっとして、CUI 版のインストーラーなのかな?
(rubyinstaller-2.4.3-1-x64.7z というファイル名だった)
7-Zip Archives 中の、\bin\ridk.ps1 に引数を付けて、
インストールするのかも知れない
よくわからないけど。
インストーラーじゃないかも知れないし
548デフォルトの名無しさん
2017/12/24(日) 11:08:41.37ID:2eVeUlKQ549デフォルトの名無しさん
2017/12/24(日) 11:14:59.06ID:24EH1p52550540
2017/12/24(日) 11:29:56.75ID:24EH1p52 7-Zip Archives から、Ruby 2.4(x64)をダウンロードすると、
rubyinstaller-2.4.3-1-x64.7z というファイル名だった。
これを、7-Zip で解凍すると、56MB になった
56MB もあるし、\bin の中には、ruby.exe, rubyw.exe もある。
実行環境が揃っているような気もする
実はポータブル版で、環境変数PATH を通せば、実行できるのかも知れない
よくわからないけど、何か捨てがたいw
rubyinstaller-2.4.3-1-x64.7z というファイル名だった。
これを、7-Zip で解凍すると、56MB になった
56MB もあるし、\bin の中には、ruby.exe, rubyw.exe もある。
実行環境が揃っているような気もする
実はポータブル版で、環境変数PATH を通せば、実行できるのかも知れない
よくわからないけど、何か捨てがたいw
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 外務省局長は無言で厳しい表情…日中の高官協議終了か 高市首相“台湾”発言で中国が強硬対応 発言撤回求めたか… [BFU★]
- 中国国営メディア「沖縄は日本ではない」… ★6 [BFU★]
- 政府、株式の配当など金融所得を高齢者の医療保険料や窓口負担に反映する方針を固めた [バイト歴50年★]
- 中国国営メディア「沖縄は日本ではない」…★7 [BFU★]
- バービー、 台湾有事の発言の波紋で「たまったもんじゃない」「高市さんに真意は聞きたい」「国民に向けて説明してほしい」 [muffin★]
- ナイツ塙が指摘のローソンコーヒーカップ、ロゴ「L」で誤解生みデザイン変更へ 在庫使い切る3か月後にリニューアル [muffin★]
- 日本政府「高市総理の発言は問題ないと伝え、中国総領事のSNS投稿は問題があると中国に伝えました😊」 [931948549]
- 高市早苗、岸田政権(当時)に「台湾有事は日本の有事か」という質問をしていた [175344491]
- 【悲報】中国→日本行きの航空チケット、高市有事の影響で50万人分がキャンセルされる [834922174]
- ケンタッキーの○○○バーガーという予告がアレを想起すると話題に [523957489]
- んなっしょい🍬禁止🈲のお🏡
- 【悲報】早速高市首相のせいで全国の民泊でキャンセルラッシュwwwwwwwwwwww 経営者も嘆き「こんな事は初めてだ…」😲 [871926377]
