プログラミング言語Rubyについての、初心者向けスレです。質問・要望・雑談などどうぞ。
質問するときは、OSやRubyのバージョン、エラーメッセージを書いたほうがいいお
Ruby on RailsについてはWEBプログラミング板で
前スレ
Ruby 初心者スレッド Part 60
https://mevius.2ch.net/test/read.cgi/tech/1493398918/
るりまサーチ (リファレンス検索)
http://rurema.clear-code.com/
Rubyist Magazine - るびま
http://jp.rubyist.net/magazine/
逆引きRuby
http://www.namaraii.com/rubytips/
探検
Ruby 初心者スレッド Part 61 [無断転載禁止]©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
2017/08/25(金) 15:59:11.22ID:HsL9LVKJ
175デフォルトの名無しさん
2017/09/11(月) 10:21:25.75ID:9tUjHIzk 俺:昔Ruby1.8 - 1.9.2の頃、WebスクレイピングをRubyでやってた。Mechanizeとか便利だぁ。。。とか言いながら。その頃DSLなんてあまり気にしなかった。
しばらくXcodeばかりいじって居て、Rubyに戻ってきたら2.4になってた。SinatraとかRailsとか触ってみたら、DSLバリバリで、これはまずいと感じて、「メタプログラミング」の本読んでます。
しばらくXcodeばかりいじって居て、Rubyに戻ってきたら2.4になってた。SinatraとかRailsとか触ってみたら、DSLバリバリで、これはまずいと感じて、「メタプログラミング」の本読んでます。
176デフォルトの名無しさん
2017/09/11(月) 10:23:03.39ID:9tUjHIzk Rubyの歴史については、en.wikipediaのRuby(programing language)のpageがよく纏まっている。
177デフォルトの名無しさん
2017/09/11(月) 10:29:24.77ID:9tUjHIzk 今後、Ruby2.5, Ruby3.0が予定されているが、3.0の仕様は流動的みたいだ。
1. 並列処理
2. 静的型付け
1は技術的に難しそうだし、2はコミュニティに受け入れられるのか?
1. 並列処理
2. 静的型付け
1は技術的に難しそうだし、2はコミュニティに受け入れられるのか?
178デフォルトの名無しさん
2017/09/11(月) 10:30:38.59ID:R+JnAI3g 反省している
179デフォルトの名無しさん
2017/09/11(月) 10:31:18.51ID:AukiEDF0 >>178
はい
はい
180デフォルトの名無しさん
2017/09/11(月) 10:36:20.19ID:ggzNTq4z181デフォルトの名無しさん
2017/09/11(月) 10:42:25.66ID:9tUjHIzk182デフォルトの名無しさん
2017/09/11(月) 10:43:38.99ID:OodeiMD8 >>180
それは違う
Rubyのクラスはそれ自体が本当にオブジェクトだけど、
.NETのTypeオブジェクトやJavaのClassオブジェクトはリフレクションのためのハンドルに過ぎず、オブジェクトとは明確に異なる
それは違う
Rubyのクラスはそれ自体が本当にオブジェクトだけど、
.NETのTypeオブジェクトやJavaのClassオブジェクトはリフレクションのためのハンドルに過ぎず、オブジェクトとは明確に異なる
183デフォルトの名無しさん
2017/09/11(月) 10:48:45.33ID:9tUjHIzk クラス自体を処理の対象にする、ってのは例えばStringクラスのsizeメソッドの仕様が気に食わん。
だったら、俺が好きな仕様に変えてやる!(モンキーパッチング)
って事ができるのは、StringクラスがClassクラスのインスタンスだから出来るってことなのかも。
だったら、俺が好きな仕様に変えてやる!(モンキーパッチング)
って事ができるのは、StringクラスがClassクラスのインスタンスだから出来るってことなのかも。
184デフォルトの名無しさん
2017/09/11(月) 10:56:59.59ID:9tUjHIzk クラス拡張、オブジェクト拡張は
class << self; end
class << obj; end
って感じで行うが、extendメソッドを使ってもできる。
こいつがクラス拡張、オブジェクト拡張のショートカットみたいだ。
class MyClass
extend MyModule
end
こんな感じ。
class MyClass
class << self
include MyModule
end
end
こんな事しなくても良くなる。
class << self; end
class << obj; end
って感じで行うが、extendメソッドを使ってもできる。
こいつがクラス拡張、オブジェクト拡張のショートカットみたいだ。
class MyClass
extend MyModule
end
こんな感じ。
class MyClass
class << self
include MyModule
end
end
こんな事しなくても良くなる。
185デフォルトの名無しさん
2017/09/11(月) 11:14:01.54ID:9tUjHIzk 俺の備忘録、スレ汚しスマソ
aliasを使うとメソッドの再定義ができる。
String#lengthメソッドを再定義して、再定義前の実装をreal_lengthで呼び出せる様に退避させる様にする例。
class String
alias :real_length :length
def length
# anaother implementation
end
end
aliasを使うとメソッドの再定義ができる。
String#lengthメソッドを再定義して、再定義前の実装をreal_lengthで呼び出せる様に退避させる様にする例。
class String
alias :real_length :length
def length
# anaother implementation
end
end
186デフォルトの名無しさん
2017/09/11(月) 11:21:39.37ID:9tUjHIzk 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だから呼べまシェーン。
class C
def x; “OK”; end
alias :y :x
private :x
end
obj = C.new
obj.y # => “OK”
obj.x # => private methodだから呼べまシェーン。
187デフォルトの名無しさん
2017/09/11(月) 12:03:38.85ID:ggzNTq4z188デフォルトの名無しさん
2017/09/11(月) 14:19:18.95ID:VvF2iP9D189デフォルトの名無しさん
2017/09/11(月) 15:26:04.86ID:4atU11H8 うわ、まだこんな言語やってるやついたんだ
endとかきめえ
endとかきめえ
190デフォルトの名無しさん
2017/09/11(月) 15:46:37.43ID:y9RYm9ja 自分が使ってない言語の出来なんかどうでもいいだろ
関係ないんだよ、君には
関係ないんだよ、君には
191デフォルトの名無しさん
2017/09/11(月) 15:51:37.08ID:9tUjHIzk 中かっこで、一行で治るblockを記述し、
do end, class endで複数行に渡るblockを記述する。
class endもblockらしい。
例:
class Foo
puts ‘OK’ # => OK、なんと実行されちゃう!
end
do end, class endで複数行に渡るblockを記述する。
class endもblockらしい。
例:
class Foo
puts ‘OK’ # => OK、なんと実行されちゃう!
end
192デフォルトの名無しさん
2017/09/11(月) 15:53:04.47ID:9tUjHIzk class Bar
attr_accessor :a
end
これもModule#attr_accessorメソッドの呼び出し(引数:a)だって。
attr_accessor :a
end
これもModule#attr_accessorメソッドの呼び出し(引数:a)だって。
193デフォルトの名無しさん
2017/09/11(月) 15:53:50.74ID:9tUjHIzk putsはKernel#putsで定義されている。
194デフォルトの名無しさん
2017/09/11(月) 15:55:48.32ID:9tUjHIzk putsってグローバル関数だと思ってた。Rubyにはグローバル関数ってのは無いのか?
たしか、$fooでグローバル変数だよねぇ。
たしか、$fooでグローバル変数だよねぇ。
195デフォルトの名無しさん
2017/09/11(月) 16:15:12.72ID:I3u+9T/v ID:9tUjHIzkこそRubyを使うのに相応しい人材だ
Rubyはこうでなくてはダメだ
Rubyはこうでなくてはダメだ
196デフォルトの名無しさん
2017/09/11(月) 16:24:37.91ID:9tUjHIzk 試しにやってみた。
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と文字リテラルは違うはず。
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と文字リテラルは違うはず。
197デフォルトの名無しさん
2017/09/11(月) 17:27:22.55ID:ggzNTq4z >>196
カンマ
カンマ
198デフォルトの名無しさん
2017/09/11(月) 17:28:46.19ID:VvF2iP9D199デフォルトの名無しさん
2017/09/11(月) 18:25:05.46ID:VnfANrEr ネガキャンはとうとう嘘まで付いちゃったか
200デフォルトの名無しさん
2017/09/11(月) 19:01:04.46ID:dKd+OEyf 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__) ^
って何でしょうか?
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__) ^
って何でしょうか?
201デフォルトの名無しさん
2017/09/11(月) 19:35:28.63ID:503iQjsy 文法エラーだろ。
まずそれを修正すれば。
まずそれを修正すれば。
202デフォルトの名無しさん
2017/09/11(月) 20:12:04.40ID:Se8bNuoM203デフォルトの名無しさん
2017/09/11(月) 20:31:42.69ID:8y57wnUU >>163
確かに「Rubyはマルチパラダイム言語である」の明確な反証になっているね
ところで、Python の公式文書には以下の記述がある:
https://docs.python.jp/3/howto/functional.html
>> 複数のアプローチに対応した言語もあり、
>> Lisp, C++, Python はそうしたマルチパラダイム言語です
故に、少なくとも Python は標準で論理型をサポートしていないから、
>>163 の主張は「Python はマルチパラダイム言語である」の反証でもある訳だ
たかだか2chの通りすがりのカキコ(>>150)どころか、
Python様の公式文書にすら堂々と反証してしまう >>163 ってスゲーよなあ(棒
確かに「Rubyはマルチパラダイム言語である」の明確な反証になっているね
ところで、Python の公式文書には以下の記述がある:
https://docs.python.jp/3/howto/functional.html
>> 複数のアプローチに対応した言語もあり、
>> Lisp, C++, Python はそうしたマルチパラダイム言語です
故に、少なくとも Python は標準で論理型をサポートしていないから、
>>163 の主張は「Python はマルチパラダイム言語である」の反証でもある訳だ
たかだか2chの通りすがりのカキコ(>>150)どころか、
Python様の公式文書にすら堂々と反証してしまう >>163 ってスゲーよなあ(棒
204デフォルトの名無しさん
2017/09/11(月) 20:38:54.64ID:I3u+9T/v >>203
君もRubyとRubyコミュニティーに向いてる人材だな
君もRubyとRubyコミュニティーに向いてる人材だな
205デフォルトの名無しさん
2017/09/11(月) 20:43:18.49ID:wRb7h9Km >>200
endを期待してるところでendが無いよってエラーだよ
_erbout.force_encoding(__ENCODING__) は
ERB#set_eoutvar内で呼ばれてる処理だけど
今の理解状況なら気にする必要ない
endを期待してるところでendが無いよってエラーだよ
_erbout.force_encoding(__ENCODING__) は
ERB#set_eoutvar内で呼ばれてる処理だけど
今の理解状況なら気にする必要ない
206デフォルトの名無しさん
2017/09/11(月) 20:47:01.81ID:8y57wnUU >>174
自作のRubyで書いたドキュメンテーションツールを日常的に使っているけど、
1.9 で28秒だったのが(ほんの気まぐれで) 2.4 へ変えただけで6秒になった
レスポンスが4倍から5倍変わるのは大きなインパクトだった
付け加えると、こうしてバージュンアップを繰り返してもなお
後方互換性を維持し続けてくれているのはありがたい
(もちろん自作ツールでメタプログラミングといった魔術は使っていないが)
自作のRubyで書いたドキュメンテーションツールを日常的に使っているけど、
1.9 で28秒だったのが(ほんの気まぐれで) 2.4 へ変えただけで6秒になった
レスポンスが4倍から5倍変わるのは大きなインパクトだった
付け加えると、こうしてバージュンアップを繰り返してもなお
後方互換性を維持し続けてくれているのはありがたい
(もちろん自作ツールでメタプログラミングといった魔術は使っていないが)
207デフォルトの名無しさん
2017/09/11(月) 20:50:22.49ID:pNAVrMoT >後方互換性を維持し続けてくれているのはありがたい
ナイスジョーク👍
ナイスジョーク👍
208200
2017/09/11(月) 20:55:04.19ID:dKd+OEyf209デフォルトの名無しさん
2017/09/11(月) 21:28:47.33ID:8y57wnUU >>207
>ナイスジョーク👍
確かに世の中にはバージョンアップしただけで、たかだか
Hello world すら動かなくなるナイスジョーク👍な言語も存在する(棒
Rubyの設計上の欠点とは何か?
http://mevius.2ch.net/test/read.cgi/tech/1413113999/126
>ナイスジョーク👍
確かに世の中にはバージョンアップしただけで、たかだか
Hello world すら動かなくなるナイスジョーク👍な言語も存在する(棒
Rubyの設計上の欠点とは何か?
http://mevius.2ch.net/test/read.cgi/tech/1413113999/126
210デフォルトの名無しさん
2017/09/11(月) 22:10:48.79ID:8y57wnUU >>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>'
>逆に、他の言語で可能だけど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>'
211デフォルトの名無しさん
2017/09/11(月) 22:53:57.56ID:/+/7clo/ ブロックがオブジェクトじゃないのはほんと糞
Rubyは基本的に嫌いじゃないけどこれだけは擁護できないわ
Rubyは基本的に嫌いじゃないけどこれだけは擁護できないわ
212デフォルトの名無しさん
2017/09/11(月) 23:30:33.81ID:503iQjsy いや、ふつう。
必要であればlambdaにすればよし。
必要であればlambdaにすればよし。
213デフォルトの名無しさん
2017/09/11(月) 23:51:41.69ID:dZxzu+uY214163
2017/09/12(火) 00:16:04.48ID:EWvqPynr215デフォルトの名無しさん
2017/09/12(火) 00:26:02.80ID:FDETfUWp メソッド呼び出し時の括弧をオプショナルにしてるから
f = add みたいなのは出来ないよね
でもそういう使い方をするときはメソッドじゃなくProcオブジェクト使う
だからObject#methodを実際のコードで使ったことはない
f = add みたいなのは出来ないよね
でもそういう使い方をするときはメソッドじゃなくProcオブジェクト使う
だからObject#methodを実際のコードで使ったことはない
216デフォルトの名無しさん
2017/09/12(火) 00:37:53.72ID:JOxdLua/ 俺が質問したのは書き方
Rubyは純オブジェクト指向で書けるし、関数言語的な書き方も可能、ワンライナーやダックタイピング、メタプログラミングも書ける
だから逆に他の言語で実用的な書き方を挙げてほしかったんだけど
Rubyは純オブジェクト指向で書けるし、関数言語的な書き方も可能、ワンライナーやダックタイピング、メタプログラミングも書ける
だから逆に他の言語で実用的な書き方を挙げてほしかったんだけど
217デフォルトの名無しさん
2017/09/12(火) 01:09:50.45ID:HQWpPXKt n++
218デフォルトの名無しさん
2017/09/12(火) 01:10:31.53ID:HQWpPXKt rubyの連中は、初心者、日本人をバカにするからきらいだ
219デフォルトの名無しさん
2017/09/12(火) 01:11:34.30ID:HQWpPXKt マルチパラダイムの言語をしらべればいいだろ
D, pike, いろいろある
D, pike, いろいろある
220デフォルトの名無しさん
2017/09/12(火) 01:12:37.06ID:K8M+GTE7 >>215
何でそんな言い訳がましい書き方すんの?
defで宣言した関数は変数に代入出来ない。そのような場合はProcを使う必要がある。この行き当たりばったりな仕様は関数を第一級オブジェクトとして扱える言語が流行ってきたため「る、rubyでもできるし!」と言いたいがために適当に実装したためである、ってスパっと言えよ。
何でそんな言い訳がましい書き方すんの?
defで宣言した関数は変数に代入出来ない。そのような場合はProcを使う必要がある。この行き当たりばったりな仕様は関数を第一級オブジェクトとして扱える言語が流行ってきたため「る、rubyでもできるし!」と言いたいがために適当に実装したためである、ってスパっと言えよ。
221デフォルトの名無しさん
2017/09/12(火) 01:15:08.18ID:EWvqPynr222デフォルトの名無しさん
2017/09/12(火) 01:19:06.28ID:TH/zNQOA 思い込みで嘘振りまいてたアンチが発狂しとる
223デフォルトの名無しさん
2017/09/12(火) 02:14:24.98ID:FDETfUWp224デフォルトの名無しさん
2017/09/12(火) 03:23:16.78ID:65BZCqIl http://fatiherikli.github.io/fil/
のローカル版のような2画面エディタないですか
のローカル版のような2画面エディタないですか
225デフォルトの名無しさん
2017/09/12(火) 06:32:54.30ID:Yg2YMH7r226デフォルトの名無しさん
2017/09/12(火) 07:48:04.25ID:xdcKpwUc Emacsじゃあかんの
227デフォルトの名無しさん
2017/09/12(火) 10:04:19.58ID:9jgbEmKh >>218
Rubyの連中ってのは、「たのしい」だとか、「直感的」とか、「生産性が高い」
とかってよく言う。
けど、メタプログラミング、DSLの辺りで躓く人って多そう。
SinatraのDSLがどう言う実装になっているのか理解するのに相当時間かかった。
特に、こんなコードがキモだとは、長らく気づかんかった。
class A
puts “OK”
end
Rubyの連中ってのは、「たのしい」だとか、「直感的」とか、「生産性が高い」
とかってよく言う。
けど、メタプログラミング、DSLの辺りで躓く人って多そう。
SinatraのDSLがどう言う実装になっているのか理解するのに相当時間かかった。
特に、こんなコードがキモだとは、長らく気づかんかった。
class A
puts “OK”
end
228デフォルトの名無しさん
2017/09/12(火) 11:06:52.61ID:WW0MtbKa JavaScript でも、関数内の地の文は、実行される
たぶん、Python, Groovy なども同じだろ
たぶん、Python, Groovy なども同じだろ
229デフォルトの名無しさん
2017/09/12(火) 11:11:57.63ID:9jgbEmKh230デフォルトの名無しさん
2017/09/12(火) 11:25:19.54ID:h0iAeYHr > けど、メタプログラミング、DSLの辺りで躓く人って多そう。
その前に自分みたいにオブジェクト指向とか言う暗号が理解できなくてC言語で止まってしまう人もいると思います。
アセンブラからC言語は問題なかったんですけどね…
その前に自分みたいにオブジェクト指向とか言う暗号が理解できなくてC言語で止まってしまう人もいると思います。
アセンブラからC言語は問題なかったんですけどね…
231デフォルトの名無しさん
2017/09/12(火) 11:57:03.55ID:onUD/nnU >>230
オブジェクトのポインタも暗黙の引数として渡される、と割り切ってしまえばとにかく理解はできるはず。
オブジェクト指向だからのこともあるけど、全体像がわかれば、たいして難しいことではないと思う。
オブジェクトのポインタも暗黙の引数として渡される、と割り切ってしまえばとにかく理解はできるはず。
オブジェクト指向だからのこともあるけど、全体像がわかれば、たいして難しいことではないと思う。
232デフォルトの名無しさん
2017/09/12(火) 12:04:12.58ID:WW0MtbKa まずこの本で、オブジェクト指向を学ぶ
スッキリわかる Java入門 第2版、2014
その後、この2冊を順に読む
たのしいRuby 第5版、2016
みんなのPython 第4版、2017
だから、勉強する順番が、この順になる
この後に、4つの道に分かれる。
1. Groovy, Kotlin
2. C#
3. C++
4. JavaScript
スッキリわかる Java入門 第2版、2014
その後、この2冊を順に読む
たのしいRuby 第5版、2016
みんなのPython 第4版、2017
だから、勉強する順番が、この順になる
この後に、4つの道に分かれる。
1. Groovy, Kotlin
2. C#
3. C++
4. JavaScript
233デフォルトの名無しさん
2017/09/12(火) 18:53:46.13ID:JOxdLua/ リファクタリング:Rubyエディションを読んだ方がもっと直接的にオブジェクト指向を学べる
リファクタリングと名が付いてるけどオブジェクト指向が何のためにあるのか、源流から把握できるよ
リファクタリングと名が付いてるけどオブジェクト指向が何のためにあるのか、源流から把握できるよ
234210
2017/09/12(火) 23:44:30.69ID:hhSY9FWw >>220
>defで宣言した関数は変数に代入出来ない
defで宣言できるのはメソッドであって関数ではない
またRubyには(関数型言語における)関数は存在しない
基本に立ち返って、計算モデルという視点でメソッドと関数との違いを
学習したほうがいいと思われる
また関数型言語の流行を見て適当な実装したのはナイスジョーク言語(>>209)だよ
・クロージャって何がいいの?
http://mevius.2ch.net/test/read.cgi/tech/1415419907/197
このカキコをまとめると、君の文章スタイルを真似れば:
lambda式の本体には式しか書けない。文を書きたい場合はdefで名前付きの関数を
宣言する必要がある。この行き当たりばったりな仕様は関数型プログラミングを
扱える言語が流行ってきたため「ば、pythonでもできるし!」と言いたいがために
適当に実装したためである、
ってスパっと言えるね
少なくとも、Rubyはその誕生の時からすでにオブジェクト指向と関数型を融合した
マルチパラダイム言語として設計された
・推薦図書/必読書のためのスレッド 74
http://peace.2ch.net/test/read.cgi/tech/1409526637/857
手続き型言語として誕生し後から流行を追ってオブジェクト指向と関数型を
行き当たりばったりで適当に実装したナイスジョーク言語とRubyを一緒にしないでね!!(棒
>defで宣言した関数は変数に代入出来ない
defで宣言できるのはメソッドであって関数ではない
またRubyには(関数型言語における)関数は存在しない
基本に立ち返って、計算モデルという視点でメソッドと関数との違いを
学習したほうがいいと思われる
また関数型言語の流行を見て適当な実装したのはナイスジョーク言語(>>209)だよ
・クロージャって何がいいの?
http://mevius.2ch.net/test/read.cgi/tech/1415419907/197
このカキコをまとめると、君の文章スタイルを真似れば:
lambda式の本体には式しか書けない。文を書きたい場合はdefで名前付きの関数を
宣言する必要がある。この行き当たりばったりな仕様は関数型プログラミングを
扱える言語が流行ってきたため「ば、pythonでもできるし!」と言いたいがために
適当に実装したためである、
ってスパっと言えるね
少なくとも、Rubyはその誕生の時からすでにオブジェクト指向と関数型を融合した
マルチパラダイム言語として設計された
・推薦図書/必読書のためのスレッド 74
http://peace.2ch.net/test/read.cgi/tech/1409526637/857
手続き型言語として誕生し後から流行を追ってオブジェクト指向と関数型を
行き当たりばったりで適当に実装したナイスジョーク言語とRubyを一緒にしないでね!!(棒
235デフォルトの名無しさん
2017/09/13(水) 00:11:46.24ID:ZSgQvDIS >>234
>defで宣言できるのはメソッドであって関数ではない
この難癖は頭おかしい。
トップレベルで定義したメソッドを関数と呼ぶのは便利な方便じゃないか。
そんなこと言ったらいちいち演算子もメソッドと言わなければならないのか?
たしかまつもと著の初期の書籍でも
関数を定義してみましょう→実はRubyでは関数はメソッドとして〜という流れだったはず。たしか。たぶん。
>defで宣言できるのはメソッドであって関数ではない
この難癖は頭おかしい。
トップレベルで定義したメソッドを関数と呼ぶのは便利な方便じゃないか。
そんなこと言ったらいちいち演算子もメソッドと言わなければならないのか?
たしかまつもと著の初期の書籍でも
関数を定義してみましょう→実はRubyでは関数はメソッドとして〜という流れだったはず。たしか。たぶん。
236デフォルトの名無しさん
2017/09/13(水) 00:40:14.46ID:S8v0D06m そしたらブロックローカル変数という
糞ダサいものは何故必要になったのですか?
やっぱり変数宣言は必要だったのですか?
糞ダサいものは何故必要になったのですか?
やっぱり変数宣言は必要だったのですか?
237デフォルトの名無しさん
2017/09/13(水) 00:43:26.25ID:n1InxPaY238デフォルトの名無しさん
2017/09/13(水) 04:43:32.45ID:OIAQviv2239デフォルトの名無しさん
2017/09/13(水) 06:57:22.00ID:QnpmdH9u 鏡の自分と話していないでいい加減リアルで話し相手を見つけろ
いつまでごっご遊びする気だ?
いつまでごっご遊びする気だ?
240デフォルトの名無しさん
2017/09/14(木) 05:43:14.25ID:MKn91q5M >>232
スッキリわかる Java入門 第2版
658ページ
すごいなぁ。
俺が良かったのは、Java流オブジェクト志向入門、この薄い本でOOPに合点が言った。
それから、Master Mind of Programming.
OOPのキモは、差分プログラミング。
スッキリわかる Java入門 第2版
658ページ
すごいなぁ。
俺が良かったのは、Java流オブジェクト志向入門、この薄い本でOOPに合点が言った。
それから、Master Mind of Programming.
OOPのキモは、差分プログラミング。
241デフォルトの名無しさん
2017/09/14(木) 05:49:47.26ID:CERdfB5z オブジェクト指向の初期に言われてた
(継承による)差分プログラミングは
今はOOの主流でない
(継承による)差分プログラミングは
今はOOの主流でない
242デフォルトの名無しさん
2017/09/14(木) 06:39:33.22ID:DHSnOET6 主流ではないどころか現代では継承による差分プログラミングはクラスの典型的な間違った使い方であるというのが一般的な認識だよね
あまりにも時代錯誤が過ぎる
あまりにも時代錯誤が過ぎる
243デフォルトの名無しさん
2017/09/14(木) 09:15:38.86ID:RGoLM/1P class Product < ApplicationRecord
end
この継承だけで、
p = Product.new
p.name = “Some Book”
と書き始める事ができるが!
これは、差分プログラミングでは無いのか?
end
この継承だけで、
p = Product.new
p.name = “Some Book”
と書き始める事ができるが!
これは、差分プログラミングでは無いのか?
244デフォルトの名無しさん
2017/09/14(木) 11:25:35.14ID:mzgiopKB 構ってほしいなら他スレいけ
245デフォルトの名無しさん
2017/09/14(木) 13:23:53.04ID:hmZWacm7 今のオブジェクト指向って差分は嫌われてんのか。
しらんかった。
しらんかった。
246デフォルトの名無しさん
2017/09/14(木) 13:45:04.43ID:emC4w7HW 差分プログラミングは継承元のクラスの細かな仕様
特に処理の流れのようなものまでしっかり把握してないと
破綻するからな
複雑な動きをするクラスの一部だけ上書きして破綻なく動かすのは難しい
特に処理の流れのようなものまでしっかり把握してないと
破綻するからな
複雑な動きをするクラスの一部だけ上書きして破綻なく動かすのは難しい
247デフォルトの名無しさん
2017/09/14(木) 13:58:16.02ID:hmZWacm7 オブジェクト指向って継承とか差分とかをなくしたら
それって関数型プログラミングじゃないのか?
それって関数型プログラミングじゃないのか?
248デフォルトの名無しさん
2017/09/14(木) 14:04:35.89ID:QnR6ews3 差分と増分は違う。
一般的に差分プログラミングというと、243の例のように元あるものに足するだけではなく
上書きして元あったものを「引く」ことを伴うやり方を指す。
これは大抵の場合、論理的なis-A関係を無視した実装継承になる。
一般的に差分プログラミングというと、243の例のように元あるものに足するだけではなく
上書きして元あったものを「引く」ことを伴うやり方を指す。
これは大抵の場合、論理的なis-A関係を無視した実装継承になる。
249デフォルトの名無しさん
2017/09/14(木) 14:32:09.28ID:8Cslzo3n 何がどうダメでどうするのがより良いことなのか書いてくれ
250デフォルトの名無しさん
2017/09/14(木) 14:44:12.14ID:RGoLM/1P251デフォルトの名無しさん
2017/09/14(木) 18:45:33.64ID:MKohVal2 >>246
そうでもない
そうでもない
252デフォルトの名無しさん
2017/09/14(木) 19:46:31.21ID:QnR6ews3 >>249
簡単な話だよ
クラスを継承するとき、スーパークラスの実装を潰してはいけない
常に増分の形になるようにする
たとえばクラスAのメソッドaの動作を変更したいとき、サブクラスBでaをオーバーライドして置換えてしまうのが継承による差分プログラミング
そういう場合、AとBを共通のスーパークラスCを継承するようにして、Cのaは空にしておき、A, Bそれぞれでaを実装するのが一つの正解
簡単な話だよ
クラスを継承するとき、スーパークラスの実装を潰してはいけない
常に増分の形になるようにする
たとえばクラスAのメソッドaの動作を変更したいとき、サブクラスBでaをオーバーライドして置換えてしまうのが継承による差分プログラミング
そういう場合、AとBを共通のスーパークラスCを継承するようにして、Cのaは空にしておき、A, Bそれぞれでaを実装するのが一つの正解
253デフォルトの名無しさん
2017/09/14(木) 20:29:04.75ID:emC4w7HW 多分意味が無いと思う
物分かりが良い人だったら今時Rubyなど触ってるわけないし
そのなかでも特別アレな人がここに集まっているわけだし
こういう人に何言ったって、なぁ・・・
そりゃ、聞く気があって向上心があるならRubyなんか触ってないって
差分プログラミングがあまり良くないって話は随分昔からあって
他スレッドだと、それを言っても、何今更当言ってるんだ?
となるだけなんだが、こんなことに食って掛かるやつがいるってのがね
さすがのRubyなんだわ
冗談みたいな話だけど、マジで
Rubyは今の流行りと全く反対の方向に全速力な言語だから
こういう言語を好む人に常識を解いても無駄なんだわ
物分かりが良い人だったら今時Rubyなど触ってるわけないし
そのなかでも特別アレな人がここに集まっているわけだし
こういう人に何言ったって、なぁ・・・
そりゃ、聞く気があって向上心があるならRubyなんか触ってないって
差分プログラミングがあまり良くないって話は随分昔からあって
他スレッドだと、それを言っても、何今更当言ってるんだ?
となるだけなんだが、こんなことに食って掛かるやつがいるってのがね
さすがのRubyなんだわ
冗談みたいな話だけど、マジで
Rubyは今の流行りと全く反対の方向に全速力な言語だから
こういう言語を好む人に常識を解いても無駄なんだわ
254デフォルトの名無しさん
2017/09/14(木) 20:33:41.31ID:TqGAiQtg はいはいNGNG
255デフォルトの名無しさん
2017/09/14(木) 20:36:29.79ID:DHSnOET6 まあ既存のクラスのメソッドを置き換えたりする醜悪なモンキーパッチをクールだと有難がってる連中が沢山いるくらいだから、
継承を使った差分プログラミングなんて可愛いもんだ
継承を使った差分プログラミングなんて可愛いもんだ
256デフォルトの名無しさん
2017/09/14(木) 20:50:14.91ID:i72uwPMW257デフォルトの名無しさん
2017/09/14(木) 20:56:24.98ID:DHSnOET6 念のためイメージしやすいように具体例を出しておこう。
何らかの処理結果をHTTPで出力するHTTPPublisherクラスがあったとしよう。
これをHTTPではなくFTPで出力したくなったが、最終的に送信するところ以外は実装は全て同一だ。
そこで、HTTPPublisherクラスを継承して最終的な送信のところだけをオーバーライドしたFTPPublisherクラスを作った。
その結果、FTPPublisher is HTTPPublisherという継承関係になった。
これが継承による差分プログラミングだ。何がおかしいか考えてみよう。
何らかの処理結果をHTTPで出力するHTTPPublisherクラスがあったとしよう。
これをHTTPではなくFTPで出力したくなったが、最終的に送信するところ以外は実装は全て同一だ。
そこで、HTTPPublisherクラスを継承して最終的な送信のところだけをオーバーライドしたFTPPublisherクラスを作った。
その結果、FTPPublisher is HTTPPublisherという継承関係になった。
これが継承による差分プログラミングだ。何がおかしいか考えてみよう。
258デフォルトの名無しさん
2017/09/14(木) 20:57:42.86ID:i72uwPMW つまり、ダックタイピング最高、ということか
259デフォルトの名無しさん
2017/09/14(木) 21:08:29.85ID:emC4w7HW260デフォルトの名無しさん
2017/09/14(木) 22:12:26.20ID:i72uwPMW261デフォルトの名無しさん
2017/09/14(木) 22:17:27.79ID:mzgiopKB 荒らしはまーた嘘ついちゃったのか
262デフォルトの名無しさん
2017/09/14(木) 23:07:38.38ID:z8360qWk ガチ初心者で申し訳ないっす。
rake db:migrate:reset
rake db:seed
railsで作るサイトに上を実行してくれるボタンを作ることって出来ますか?
rake db:migrate:reset
rake db:seed
railsで作るサイトに上を実行してくれるボタンを作ることって出来ますか?
263デフォルトの名無しさん
2017/09/15(金) 00:06:02.35ID:pcdb6BZK264デフォルトの名無しさん
2017/09/15(金) 01:13:28.42ID:HyLcEmwG >>262
よくわからんけど、Ruby内からバッククォート文で実行させれば良いんじゃない?
よくわからんけど、Ruby内からバッククォート文で実行させれば良いんじゃない?
265デフォルトの名無しさん
2017/09/15(金) 02:50:07.52ID:NqjvejJe >>264
ありがとうございました!感謝感激雨あられっす
ありがとうございました!感謝感激雨あられっす
266デフォルトの名無しさん
2017/09/15(金) 05:52:12.67ID:gy747Xnp 差分問題は継承より委譲、で終わり
267デフォルトの名無しさん
2017/09/15(金) 13:17:19.48ID:M6zHVajf >そりゃ、聞く気があって向上心があるならRubyなんか触ってないって
今年一番説得力あるレスだった
今年一番説得力あるレスだった
268デフォルトの名無しさん
2017/09/15(金) 21:25:27.63ID:gy747Xnp まあRubyは使いやすくて楽だからな
Lispみたいな言語だと
向上心や忍耐力が必要とされる
Lispみたいな言語だと
向上心や忍耐力が必要とされる
269デフォルトの名無しさん
2017/09/16(土) 00:44:23.41ID:54wKV8j0 手軽だし、便利だし、どこにでも手が届くわりに、細部まで言語として背景や地盤が整備されてる
確かに、使える人が増える事はあっても減る事は無い言語だ
確かに、使える人が増える事はあっても減る事は無い言語だ
270デフォルトの名無しさん
2017/09/16(土) 03:15:44.04ID:cRp93fnk >>269
俺、その背景や地盤ってのを理解するのに、めっちゃ時間かかった。
俺、その背景や地盤ってのを理解するのに、めっちゃ時間かかった。
271デフォルトの名無しさん
2017/09/16(土) 07:19:19.83ID:ja70x9oy Gradle は、Groovy だけど、
vagrant, chef, SASS とか、ツールを作る時は、真っ先に、Ruby が選ばれる。
他の言語は、Rubyよりも、2年ぐらい遅れる
この2つは、DSL も作りやすい。
さらに、Groovyには、JavaVM が必要だけど、Rubyには必要ない
おまけに、シェルスクリプトの代わりにもなるし、
PowerShell よりも、プログラミングしやすい
vagrant, chef, SASS とか、ツールを作る時は、真っ先に、Ruby が選ばれる。
他の言語は、Rubyよりも、2年ぐらい遅れる
この2つは、DSL も作りやすい。
さらに、Groovyには、JavaVM が必要だけど、Rubyには必要ない
おまけに、シェルスクリプトの代わりにもなるし、
PowerShell よりも、プログラミングしやすい
272デフォルトの名無しさん
2017/09/16(土) 07:28:00.02ID:AcW1bn43 >>271
>ツールを作る時は、真っ先に、Ruby が選ばれる
おっそうだな
静的サイトジェネレータならJekillとか
Rubyはプロトタイプを早く作るのに向いてるから
新ジャンルを開拓するのにふさわしい
>ツールを作る時は、真っ先に、Ruby が選ばれる
おっそうだな
静的サイトジェネレータならJekillとか
Rubyはプロトタイプを早く作るのに向いてるから
新ジャンルを開拓するのにふさわしい
273デフォルトの名無しさん
2017/09/16(土) 09:14:50.48ID:dauRpkAs そう感じるのは君がRuby村の中から見える世界しか見てないからだ
少なくとも今はRubyが最先端とはとてもじゃないが言えないよ
少なくとも今はRubyが最先端とはとてもじゃないが言えないよ
274デフォルトの名無しさん
2017/09/16(土) 11:26:43.15ID:54wKV8j0 アンチって平然と人を騙そうとするよな
275デフォルトの名無しさん
2017/09/16(土) 11:33:09.75ID:DEccgWHW■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【調査】クレジットカード、1人何枚持つのが「平均的」? [ひぃぃ★]
- 「『ETC』←なんて読んでますか?」 公募で決めたのに全然呼ばれなかった“幻の愛称”とは [七波羅探題★]
- 首都圏の通勤ラッシュがどんどんひどくなっている JR埼京線は混雑率163%!コロナ前に戻ったわけ [首都圏の虎★]
- 宮崎あおい「電子レンジ持ってない」“丁寧な暮らし”を告白「ごはんを温め直すときも蒸し器」に「凄すぎ」の声 [muffin★]
- 【競馬】ジャパンカップ カランダガンが優勝! [久太郎★]
- 「督促状が集中…」立花孝志氏逮捕のウラでNHKが10倍“狙い撃ち”するN国党を信じた人たちの悲劇 [ぐれ★]
- 【悲報】ネトウヨ、ビジウヨの偽動画に騙されまくって思想を操作されるも全く気づかず今日もイイネ!を付ける。なぜ日本人はこんな馬鹿に [219241683]
- 【悲報】日本人、今度はこの時期に中国でパフォーマンスする歌手を「売国奴」として叩く時代に突入… 時に身を任せるだけ [452836546]
- 【実況】博衣こよりのえちえちゼルダの伝説 ムジュラの仮面🧪★9
- 【高市 終了】 フランス ドイツ イギリス「やっぱり中国とは仲良くしなくちゃね🤗」 首脳が続々と中国を訪問へ…… [485983549]
- ガチのマジでニート経験ある奴にしか分からないこと [977261419]
- 米ホワイトハウス、大統領に批判的なメディアを名指しし、政権側の反論を載せるウェブページを開設 [706581883]
