Ruby 初心者スレッド Part 61 [無断転載禁止]©2ch.net

■ このスレッドは過去ログ倉庫に格納されています
2017/08/25(金) 15:59:11.22ID:HsL9LVKJ
プログラミング言語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/
170デフォルトの名無しさん
垢版 |
2017/09/11(月) 10:05:04.24ID:9tUjHIzk
>>168
みてるのは、『メタプログラミングRuby」第一版。
171デフォルトの名無しさん
垢版 |
2017/09/11(月) 10:08:48.21ID:9tUjHIzk
あと見ているのは、Ruby 2.0.0 Reference Manual。macOS SierraにはRuby2.0が最初から入っているから、ちょいと古いRubyを使ってる。

Ruby2.2あたりでGCの改良があって、その関係でSecurity重視のWebアプリ作る場合は、2.0はNGらしい。

誤解してる?
2017/09/11(月) 10:10:47.61ID:OodeiMD8
そういう問題じゃなくて、Webアプリ作るなら実行環境と開発環境をなるべく同じにするのは当たり前。
特にRubyみたいに互換性のいい加減なものを使うなら尚更のこと。
173デフォルトの名無しさん
垢版 |
2017/09/11(月) 10:15:39.57ID:hxvjUFQQ
webサーバやDSLの主流言語の一つって時点で他の主要言語を繋げて扱える上に手軽だから
使える人が増える事はあっても、減ることは無い
そしてRuby恐怖症患者が恐れているのはこの部分だと思う
174デフォルトの名無しさん
垢版 |
2017/09/11(月) 10:17:31.55ID:9tUjHIzk
俺的ざっくり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)とか、細かな仕様変更があるが、俺への影響は無いな。
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バリバリで、これはまずいと感じて、「メタプログラミング」の本読んでます。
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はコミュニティに受け入れられるのか?
2017/09/11(月) 10:30:38.59ID:R+JnAI3g
反省している
2017/09/11(月) 10:31:18.51ID:AukiEDF0
>>178
はい
2017/09/11(月) 10:36:20.19ID:ggzNTq4z
>>165
クラス自体を処理の対象にできる。
.NETでも、Typeクラスがあったりする。
C++などではできないこと。
181デフォルトの名無しさん
垢版 |
2017/09/11(月) 10:42:25.66ID:9tUjHIzk
>>180
クラス自体を処理の対象にする場面って?
一つ見つけたけど、他にある?

見つけた一つ!
1. クラスメソッドを提議
2017/09/11(月) 10:43:38.99ID:OodeiMD8
>>180
それは違う
Rubyのクラスはそれ自体が本当にオブジェクトだけど、
.NETのTypeオブジェクトやJavaのClassオブジェクトはリフレクションのためのハンドルに過ぎず、オブジェクトとは明確に異なる
183デフォルトの名無しさん
垢版 |
2017/09/11(月) 10:48:45.33ID:9tUjHIzk
クラス自体を処理の対象にする、ってのは例えばStringクラスのsizeメソッドの仕様が気に食わん。

だったら、俺が好きな仕様に変えてやる!(モンキーパッチング)

って事ができるのは、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
こんな事しなくても良くなる。
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
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だから呼べまシェーン。
2017/09/11(月) 12:03:38.85ID:ggzNTq4z
>>182
違わない。用途を限定しすぎ。
型を引数にできたり、型のリストが作れたり、型自体の基底クラスが存在するから可能になることがいくつもある。
2017/09/11(月) 14:19:18.95ID:VvF2iP9D
>>165
>クラスはClassクラスのインスタンス
>こんな仕様が一体、何の役に立つんだ?
メタプログラミング
189デフォルトの名無しさん
垢版 |
2017/09/11(月) 15:26:04.86ID:4atU11H8
うわ、まだこんな言語やってるやついたんだ
endとかきめえ
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
192デフォルトの名無しさん
垢版 |
2017/09/11(月) 15:53:04.47ID:9tUjHIzk
class Bar
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でグローバル変数だよねぇ。
195デフォルトの名無しさん
垢版 |
2017/09/11(月) 16:15:12.72ID:I3u+9T/v
ID:9tUjHIzkこそ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と文字リテラルは違うはず。
2017/09/11(月) 17:27:22.55ID:ggzNTq4z
>>196
カンマ
2017/09/11(月) 17:28:46.19ID:VvF2iP9D
>>194
>グローバル関数ってのは無いのか?
ない

ただトップレベルのメソッドを
実質的にグローバル関数として利用するのは可能
2017/09/11(月) 18:25:05.46ID:VnfANrEr
ネガキャンはとうとう嘘まで付いちゃったか
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__) ^
って何でしょうか?
2017/09/11(月) 19:35:28.63ID:503iQjsy
文法エラーだろ。
まずそれを修正すれば。
202デフォルトの名無しさん
垢版 |
2017/09/11(月) 20:12:04.40ID:Se8bNuoM
>>200
erbがエラー吐いてんじゃね?
template engineだから、*.html.erbに問題あるんちゃうか?
203デフォルトの名無しさん
垢版 |
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 ってスゲーよなあ(棒
2017/09/11(月) 20:38:54.64ID:I3u+9T/v
>>203
君もRubyとRubyコミュニティーに向いてる人材だな
2017/09/11(月) 20:43:18.49ID:wRb7h9Km
>>200
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倍変わるのは大きなインパクトだった

付け加えると、こうしてバージュンアップを繰り返してもなお
後方互換性を維持し続けてくれているのはありがたい
(もちろん自作ツールでメタプログラミングといった魔術は使っていないが)
2017/09/11(月) 20:50:22.49ID:pNAVrMoT
>後方互換性を維持し続けてくれているのはありがたい
ナイスジョーク👍
208200
垢版 |
2017/09/11(月) 20:55:04.19ID:dKd+OEyf
>>201-202 >>205
助言くださった皆様、どうもありがとうございます。
とりあえずendを閉じ忘れていないかチェックしてみます。
209デフォルトの名無しさん
垢版 |
2017/09/11(月) 21:28:47.33ID:8y57wnUU
>>207
>ナイスジョーク👍

確かに世の中にはバージョンアップしただけで、たかだか
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>'
2017/09/11(月) 22:53:57.56ID:/+/7clo/
ブロックがオブジェクトじゃないのはほんと糞
Rubyは基本的に嫌いじゃないけどこれだけは擁護できないわ
2017/09/11(月) 23:30:33.81ID:503iQjsy
いや、ふつう。
必要であればlambdaにすればよし。
2017/09/11(月) 23:51:41.69ID:dZxzu+uY
>>210
f = method :add
p f[1,2] # => 3
214163
垢版 |
2017/09/12(火) 00:16:04.48ID:EWvqPynr
>>203
「マルチパラダイム」への反証じゃなくて
「どんな書き方でも可能」への反証
「他の言語で可能だけどRubyじゃできない書き方」の例証でもある
2017/09/12(火) 00:26:02.80ID:FDETfUWp
メソッド呼び出し時の括弧をオプショナルにしてるから
f = add みたいなのは出来ないよね
でもそういう使い方をするときはメソッドじゃなくProcオブジェクト使う
だからObject#methodを実際のコードで使ったことはない
2017/09/12(火) 00:37:53.72ID:JOxdLua/
俺が質問したのは書き方
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, いろいろある
2017/09/12(火) 01:12:37.06ID:K8M+GTE7
>>215
何でそんな言い訳がましい書き方すんの?
defで宣言した関数は変数に代入出来ない。そのような場合はProcを使う必要がある。この行き当たりばったりな仕様は関数を第一級オブジェクトとして扱える言語が流行ってきたため「る、rubyでもできるし!」と言いたいがために適当に実装したためである、ってスパっと言えよ。
2017/09/12(火) 01:15:08.18ID:EWvqPynr
>>216
それは「書き方」の定義が曖昧だから

でもまあもう少し小さな区分で言うと
動的型付けの関係でJavaができるような
メソッドのオーバーロードは標準のRubyではできない
2017/09/12(火) 01:19:06.28ID:TH/zNQOA
思い込みで嘘振りまいてたアンチが発狂しとる
2017/09/12(火) 02:14:24.98ID:FDETfUWp
>>220
嘘で印象操作はいかんよ
そのうちRubyも韓国起源説を唱えそうだな
2017/09/12(火) 03:23:16.78ID:65BZCqIl
http://fatiherikli.github.io/fil/
のローカル版のような2画面エディタないですか
2017/09/12(火) 06:32:54.30ID:Yg2YMH7r
>>224
今プログラミングエディタで一番勢いがあるのはVSCode
見た目はだいたいこんな感じ
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
2017/09/12(火) 11:06:52.61ID:WW0MtbKa
JavaScript でも、関数内の地の文は、実行される

たぶん、Python, Groovy なども同じだろ
229デフォルトの名無しさん
垢版 |
2017/09/12(火) 11:11:57.63ID:9jgbEmKh
>>228
THX
JavaScriptでも同じなのね。class定義内の地の文が実行されるの。
2017/09/12(火) 11:25:19.54ID:h0iAeYHr
> けど、メタプログラミング、DSLの辺りで躓く人って多そう。

その前に自分みたいにオブジェクト指向とか言う暗号が理解できなくてC言語で止まってしまう人もいると思います。
アセンブラからC言語は問題なかったんですけどね…
2017/09/12(火) 11:57:03.55ID:onUD/nnU
>>230
オブジェクトのポインタも暗黙の引数として渡される、と割り切ってしまえばとにかく理解はできるはず。
オブジェクト指向だからのこともあるけど、全体像がわかれば、たいして難しいことではないと思う。
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
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を一緒にしないでね!!(棒
2017/09/13(水) 00:11:46.24ID:ZSgQvDIS
>>234
>defで宣言できるのはメソッドであって関数ではない
この難癖は頭おかしい。
トップレベルで定義したメソッドを関数と呼ぶのは便利な方便じゃないか。
そんなこと言ったらいちいち演算子もメソッドと言わなければならないのか?
たしかまつもと著の初期の書籍でも
関数を定義してみましょう→実はRubyでは関数はメソッドとして〜という流れだったはず。たしか。たぶん。
2017/09/13(水) 00:40:14.46ID:S8v0D06m
そしたらブロックローカル変数という
糞ダサいものは何故必要になったのですか?
やっぱり変数宣言は必要だったのですか?
2017/09/13(水) 00:43:26.25ID:n1InxPaY
>>235
少しRubyやったことある人なら「defで宣言した関数」なんて理解の仕方をしないからさ
>>234の言い回しはともかく>>220はRubyのメソッドを理解してないって指摘でしょ

演算子はメソッドの一部をさす言葉なんだから演算子って呼んでもおかしくないよ
でもRubyの場合メソッドは関数じゃないから「defで宣言した関数」とは言わない
2017/09/13(水) 04:43:32.45ID:OIAQviv2
>>236
うん、変数宣言は必要だった。
まちがいない。
239デフォルトの名無しさん
垢版 |
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のキモは、差分プログラミング。
2017/09/14(木) 05:49:47.26ID:CERdfB5z
オブジェクト指向の初期に言われてた
(継承による)差分プログラミングは
今はOOの主流でない
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”
と書き始める事ができるが!

これは、差分プログラミングでは無いのか?
2017/09/14(木) 11:25:35.14ID:mzgiopKB
構ってほしいなら他スレいけ
2017/09/14(木) 13:23:53.04ID:hmZWacm7
今のオブジェクト指向って差分は嫌われてんのか。
しらんかった。
2017/09/14(木) 13:45:04.43ID:emC4w7HW
差分プログラミングは継承元のクラスの細かな仕様
特に処理の流れのようなものまでしっかり把握してないと
破綻するからな
複雑な動きをするクラスの一部だけ上書きして破綻なく動かすのは難しい
2017/09/14(木) 13:58:16.02ID:hmZWacm7
オブジェクト指向って継承とか差分とかをなくしたら
それって関数型プログラミングじゃないのか?
2017/09/14(木) 14:04:35.89ID:QnR6ews3
差分と増分は違う。
一般的に差分プログラミングというと、243の例のように元あるものに足するだけではなく
上書きして元あったものを「引く」ことを伴うやり方を指す。
これは大抵の場合、論理的なis-A関係を無視した実装継承になる。
2017/09/14(木) 14:32:09.28ID:8Cslzo3n
何がどうダメでどうするのがより良いことなのか書いてくれ
250デフォルトの名無しさん
垢版 |
2017/09/14(木) 14:44:12.14ID:RGoLM/1P
>>242
何が、「だよね」だよ。
変なやつ。
たんなる、知ったかだわぁ、こいつ。
251デフォルトの名無しさん
垢版 |
2017/09/14(木) 18:45:33.64ID:MKohVal2
>>246
そうでもない
2017/09/14(木) 19:46:31.21ID:QnR6ews3
>>249
簡単な話だよ
クラスを継承するとき、スーパークラスの実装を潰してはいけない
常に増分の形になるようにする
たとえばクラスAのメソッドaの動作を変更したいとき、サブクラスBでaをオーバーライドして置換えてしまうのが継承による差分プログラミング
そういう場合、AとBを共通のスーパークラスCを継承するようにして、Cのaは空にしておき、A, Bそれぞれでaを実装するのが一つの正解
2017/09/14(木) 20:29:04.75ID:emC4w7HW
多分意味が無いと思う
物分かりが良い人だったら今時Rubyなど触ってるわけないし
そのなかでも特別アレな人がここに集まっているわけだし
こういう人に何言ったって、なぁ・・・
そりゃ、聞く気があって向上心があるならRubyなんか触ってないって

差分プログラミングがあまり良くないって話は随分昔からあって
他スレッドだと、それを言っても、何今更当言ってるんだ?
となるだけなんだが、こんなことに食って掛かるやつがいるってのがね
さすがのRubyなんだわ

冗談みたいな話だけど、マジで
Rubyは今の流行りと全く反対の方向に全速力な言語だから
こういう言語を好む人に常識を解いても無駄なんだわ
2017/09/14(木) 20:33:41.31ID:TqGAiQtg
はいはいNGNG
2017/09/14(木) 20:36:29.79ID:DHSnOET6
まあ既存のクラスのメソッドを置き換えたりする醜悪なモンキーパッチをクールだと有難がってる連中が沢山いるくらいだから、
継承を使った差分プログラミングなんて可愛いもんだ
2017/09/14(木) 20:50:14.91ID:i72uwPMW
>>253
> そりゃ、聞く気があって向上心があるならRubyなんか触ってないって
つまりお前は聞く気がなくて向上心がない、という自己紹介?
2017/09/14(木) 20:56:24.98ID:DHSnOET6
念のためイメージしやすいように具体例を出しておこう。
何らかの処理結果をHTTPで出力するHTTPPublisherクラスがあったとしよう。
これをHTTPではなくFTPで出力したくなったが、最終的に送信するところ以外は実装は全て同一だ。
そこで、HTTPPublisherクラスを継承して最終的な送信のところだけをオーバーライドしたFTPPublisherクラスを作った。
その結果、FTPPublisher is HTTPPublisherという継承関係になった。
これが継承による差分プログラミングだ。何がおかしいか考えてみよう。
2017/09/14(木) 20:57:42.86ID:i72uwPMW
つまり、ダックタイピング最高、ということか
2017/09/14(木) 21:08:29.85ID:emC4w7HW
>>256
俺はRuby触ってないし
失敗した発明に興味があるだけ
2017/09/14(木) 22:12:26.20ID:i72uwPMW
>>259
> 失敗した発明に興味があるだけ
嘘はいけない
お前は単に叩いてスッキリしたいだけだよ
そのためには捏造も辞さない、半島系メンタリズムなんだよ
恨の文化ってやつだ
そこを自覚しよう
261デフォルトの名無しさん
垢版 |
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で作るサイトに上を実行してくれるボタンを作ることって出来ますか?
263デフォルトの名無しさん
垢版 |
2017/09/15(金) 00:06:02.35ID:pcdb6BZK
>>259
あらま!
見る目が無いのね
2017/09/15(金) 01:13:28.42ID:HyLcEmwG
>>262
よくわからんけど、Ruby内からバッククォート文で実行させれば良いんじゃない?
265デフォルトの名無しさん
垢版 |
2017/09/15(金) 02:50:07.52ID:NqjvejJe
>>264
ありがとうございました!感謝感激雨あられっす
2017/09/15(金) 05:52:12.67ID:gy747Xnp
差分問題は継承より委譲、で終わり
2017/09/15(金) 13:17:19.48ID:M6zHVajf
>そりゃ、聞く気があって向上心があるならRubyなんか触ってないって

今年一番説得力あるレスだった
2017/09/15(金) 21:25:27.63ID:gy747Xnp
まあRubyは使いやすくて楽だからな
Lispみたいな言語だと
向上心や忍耐力が必要とされる
269デフォルトの名無しさん
垢版 |
2017/09/16(土) 00:44:23.41ID:54wKV8j0
手軽だし、便利だし、どこにでも手が届くわりに、細部まで言語として背景や地盤が整備されてる
確かに、使える人が増える事はあっても減る事は無い言語だ
270デフォルトの名無しさん
垢版 |
2017/09/16(土) 03:15:44.04ID:cRp93fnk
>>269
俺、その背景や地盤ってのを理解するのに、めっちゃ時間かかった。
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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