[過去ログ] Ruby 初心者スレッド Part 60 [無断転載禁止]©2ch.net (1002レス)
1-

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
953: デフォルトの名無しさん [] 2017/08/24(木)12:32 ID:5a7RKQDl(1)
>>952
意味不
954
(1): デフォルトの名無しさん [sage] 2017/08/24(木)14:28 ID:gfjynZsV(1/8)
>>948
静的型とか動的型とか全く関係ない

>>945
マニュアルくらい読もうぜ
Array#+ は self + other -> Array
https://docs.ruby-lang.org/ja/2.4.0/method/Array/i/=2b.html

pryでshow-doc, show-sourceすればすぐ分かる内容
show-source Array#+

>>951
言いたいことはわかるがArrayを派生したい場合だってある
Rubyはそういうことを制限しない言語
そのかわりに相応の力量が求められる
955: デフォルトの名無しさん [sage] 2017/08/24(木)14:56 ID:gfjynZsV(2/8)
Arrayから直接派生させるよりも、
EnumerableやForwardable使うほうが普通だとは思うけどね
956
(1): デフォルトの名無しさん [sage] 2017/08/24(木)15:12 ID:+u51O4Tc(1)
結果収束的には「可能ではあるが極力行わないようになる」こと自体は間違いはない
なんでもかんでもメソッドチェーンにしないのと似たような感覚
ただし(古い表現だが)足元を弾痕穴だらけにしないとわからない感覚なので、未経験者に最初から指示するようなものでもないな
それはそれで「本当は何もできないやらないわかっていない」机上の人だろう
957: デフォルトの名無しさん [sage] 2017/08/24(木)15:38 ID:NrLz+nwx(2/2)
DSLに何言ってんだか
Rubyの書きやすさ書き換えやすさは他の言語にない重要なポイントのひとつだろ
958: デフォルトの名無しさん [sage] 2017/08/24(木)16:33 ID:gfjynZsV(3/8)
>>956
Arrayを継承したいと考えた理由次第だろ

モンキーパッチ、リファインメント、継承、コンポジション
それぞれメリットデメリットあるんだから初心者であっても
そのトレードオフが理解して自分で判断できるようにならないとダメだよね?

基本クラスであってもどういう方式を選ぶのがいいのかは状況次第だから
背景理由を無視して、一つの選択肢を採用したほうがいいっていうのはちょっとっ極端に感じるよ
959: デフォルトの名無しさん [] 2017/08/24(木)20:44 ID:tqCPVr7b0(1)
🐒
960
(1): デフォルトの名無しさん [sage] 2017/08/24(木)20:49 ID:tqCPVr7b(2/9)
>>954
仮にArrayを継承させたとして
何かのメソッドで思っていた型と違う型が返ってきたとして
静的型ならコンパイルエラーになって即気づける可能性が高いよね
せっかく>>945がRubyが動的型のせいで
> 長い間気づかずどつぼにハマッてたのを思いだした
って告白してくれてるのに

あるメソッドが、どのような仕様になってるかなんて
そんなものはどのような仕様にでも実装できてしまうわけで
(そう書けばそう動く、というだけ)
大事なのは、勘違いしたとき、間違ったときに、直ぐに気づけるかどうか

だからArrayを継承すべきじゃないとかってのは話の本質じゃなくて
長い間気づかずドツボにハマってたのは何故かって部分なんだよ
961: デフォルトの名無しさん [sage] 2017/08/24(木)20:50 ID:tqCPVr7b(3/9)
俺みたいなののほうがマトモなこと言ってるのがもう不思議なぐらいだろ?
962: デフォルトの名無しさん [sage] 2017/08/24(木)20:50 ID:tqCPVr7b(4/9)
それぐらいダメってことなんだよ、言語もコミュニティーも
963: デフォルトの名無しさん [sage] 2017/08/24(木)21:04 ID:sQWhHmgZ(1)
はいはいNGNG
964: デフォルトの名無しさん [sage] 2017/08/24(木)21:37 ID:gfjynZsV(4/8)
>>960
言語を使う側の能力の問題を
全部言語のせいにしちゃだめだよ

var result = myArray1 + myArray2

↑みたいに型推論使ってたら似たような事起きるだろ
それは型推論自体がダメだからなのか? 型推論使用禁止にする?
使う道具のメリットデメリットをちゃんと理解して使いこなせてないからだろ

静的型にメリットがあるのはわかるが結局それはトレードオフなんだよ
何を選択するかの問題
965
(1): デフォルトの名無しさん [sage] 2017/08/24(木)21:46 ID:tqCPVr7b(5/9)
その場合でもresultをどこかに渡したり
継承で拡張したメソッドを使ったり
実用的なことをしようとした瞬間にコンパイルエラーになる
お前はそのresultを何も使わずにそのまま捨てるのか?
結局、現実的な部分が全くないんだよね
机上の空論、それがRuby
966: デフォルトの名無しさん [sage] 2017/08/24(木)21:51 ID:tqCPVr7b(6/9)
しかも俺は
>気づける可能性が高いよね
とも書いてるわけで
現実的にはどこかの段階でコンパイルエラーになる可能性が高い、と
967
(2): デフォルトの名無しさん [] 2017/08/24(木)21:55 ID:Z79NM4TL(1/4)
スレッドの進行を妨害するのは止めてください
みんなが迷惑を被っています
968: デフォルトの名無しさん [sage] 2017/08/24(木)21:56 ID:yIhxd10m(1/2)
コンパイルが通ってもその後テストを走らせることになるけどな
969
(1): デフォルトの名無しさん [sage] 2017/08/24(木)22:02 ID:gfjynZsV(5/8)
>>965
オーバーライドしたメソッド呼び出してもコンパイルエラーにならないだろ
静的型でも同じこと十分起こりえるよ

運良くコンパイルエラーで拾えるケースだけ上げて
静的型使うべきなんていう主張はナンセンス

力量が低いやつは静的型選んだほうがいいよっていうアドバイスなら
まだ理解できるけどね
970
(1): デフォルトの名無しさん [] 2017/08/24(木)22:05 ID:Z79NM4TL(2/4)
再三にわたり伝えましたが、もう一度
スレッドの進行を妨害するのは止めてください
みんなが迷惑を被っています
971
(1): デフォルトの名無しさん [sage] 2017/08/24(木)22:10 ID:tqCPVr7b(7/9)
起こりえるが、可能性は低いわけだ
運良くコンパイルエラーで拾える、というより
運悪くコンパイルエラーで拾えないケースもありうる、ということ

運が良くないとコンパイルエラーで拾えないんなら
静的型言語はこんなに普及してないし、もてはやされてもない
現実が全く見えていないんだね
972: デフォルトの名無しさん [sage] 2017/08/24(木)22:10 ID:kEm5qs8H(1)
>>967
LLスレで相手にされなくなったからな
隔離スレの自覚持って欲しいもんだ
973
(1): デフォルトの名無しさん [sage] 2017/08/24(木)22:13 ID:gfjynZsV(6/8)
>>970
「だから動的型はダメなんだ」とか思っちゃう初心者が出ないように
きちんと反論しとくことは重要じゃねーの?

>再三にわたり伝えましたが、
って>>967の1回だけじゃんww
974
(1): デフォルトの名無しさん [sage] 2017/08/24(木)22:18 ID:lIOBscyk(1/2)
>>973
私たちにとってはなんら重要ではありません
お帰りください
975: デフォルトの名無しさん [sage] 2017/08/24(木)22:19 ID:gfjynZsV(7/8)
>>971
型推論禁止すれば運悪くコンパイルエラーで拾えないケースも潰せるね
976
(1): デフォルトの名無しさん [sage] 2017/08/24(木)22:20 ID:gfjynZsV(8/8)
>>974
なんでお前が勝手に決めてんの?
977: デフォルトの名無しさん [sage] 2017/08/24(木)22:23 ID:lIOBscyk(2/2)
>>976
あなたにはもうそれを判断できるだけの客観的知性が残っていないからです
978: デフォルトの名無しさん [sage] 2017/08/24(木)22:26 ID:yIhxd10m(2/2)
>>969
力量が低いだけに留まらず、現実逃避する頭の悪い知ったかぶりのお馬鹿さんなら
あなたが話しかけてるそこにいますよ
979: デフォルトの名無しさん [sage] 2017/08/24(木)22:39 ID:tqCPVr7b(8/9)
俺が言うのもなんだけど
ID:Z79NM4TLID:lIOBscykのが正解だと思うよ
「そんなことは初めから分かってて承知の上で使っているのだから
 放っておいてくれ」
って所でしょ
欠点を認められずに使ってる方が異常
980: デフォルトの名無しさん [] 2017/08/24(木)23:09 ID:Z79NM4TL(3/4)
スレッドの進行を妨害するのは止めてください
みんなが迷惑を被っています
スレッドの趣旨が分からないなら1を読んで下さい
これ以上妨害を続ける場合は、過去の妨害行為時のログを元に弁護士との相談の上、
措置を取ります
981
(1): デフォルトの名無しさん [sage] 2017/08/24(木)23:11 ID:h4EzWrOx(1)
自分が何をしてるか全く理解できないんだろうな
レスがつくことそのものに興奮してここがどこかも判断できていない

貴方達そのものを我々は必要としていない
貴方達が書き込んだそのものを私たちは歓迎しない
我々私たちの望みはひとつだけ、二度とここに来るな
982: デフォルトの名無しさん [sage] 2017/08/24(木)23:27 ID:tqCPVr7b(9/9)
何か映画とかで、スラム街とか田舎町の住人に言われそうなセリフ
983: デフォルトの名無しさん [] 2017/08/24(木)23:38 ID:Z79NM4TL(4/4)
スレッドの進行を妨害するのは止めてください
みんなが迷惑を被っています
スレッドの趣旨が分からないなら1を読んで下さい
これ以上妨害を続ける場合は、過去の妨害行為時のログを元に弁護士との相談の上、
措置を取ります
984: デフォルトの名無しさん [] 2017/08/24(木)23:39 ID:c/yv4qcw(1)
過去のgem配布サイト復活しないかな
985
(4): デフォルトの名無しさん [sage] 2017/08/25(金)05:58 ID:ZShOFEd5(1/4)
「Effective Ruby」項目21にも書いてある

コアクラスを継承するな。委譲・包含(Forwardable)を使え。
is-a よりも、has-a を使え

たいていの言語では、String型なども継承できない。
final 指定されてる

初心者は、コレクションを継承したがるが、アンチパターン。
継承すれば、バグるだけ

たいていの「Effective 何々」とか、デザインパターンの本にも、書いてある
986: デフォルトの名無しさん [sage] 2017/08/25(金)06:40 ID:aRYPlL4U(1)
>>981
例の人は自分が来るせいで誰も居なくなったんだってわかってないからな
コミュニティは衰退したのではなく特定の人物の書き込みにより破壊されたのだ
987: デフォルトの名無しさん [sage] 2017/08/25(金)07:08 ID:w/d6Mddl(1/2)
Arrayのような多くの人が慣れ親しんだインタフェースを提供したいと考えてるんだが、
それ自体が慣れで運用してしまうから問題、ということなのか?
極端な話myaddとかにした方がいいのか
988: デフォルトの名無しさん [sage] 2017/08/25(金)07:24 ID:w/d6Mddl(2/2)
>>985
アンチパターン名は?
989: デフォルトの名無しさん [sage] 2017/08/25(金)10:40 ID:ZShOFEd5(2/4)
JavaScript の、prototype.js なども、コアクラスを上書きして、挙動が変わるから、
皆から、うっとうしがられてる

とにかく、バグるから、個人で、コアクラスを修正してはいけない

やってもいいのは、Date クラスに、便利な関数を追加したり、
Rails とか、使用説明書・メンテナンスもしっかりしている、
有名なフレームワークだけ
990: デフォルトの名無しさん [sage] 2017/08/25(金)11:07 ID:8cxOpMBd(1)
↑こいつはRuby畑の人間じゃないな
991: デフォルトの名無しさん [] 2017/08/25(金)11:27 ID:BwHFndLq(1/4)
>>985
項目21の根拠はなんでしょう?

1. 継承を使うとなるとSuper Classの詳細を知る必要がある。
2. 移譲なら使いたい機能をつまみ食いすれば良いので楽。

こう言う事でしょうかねぇ?
992
(1): 985 [sage] 2017/08/25(金)12:26 ID:ZShOFEd5(3/4)
例えば、親のArray から、子のDerivedArray を派生させて、
reverse を呼んでも、子クラスを返さず、親クラスを返してしまう

全メソッドを、派生クラスに対応させるのが、無理だから

委譲で、Forwardable モジュールの、def_delegators で、
使うメソッドだけ、宣言する方が簡単

漏れも、10言語以上、数十冊の本を読んでるけど、
配列など、コアクラスを継承した、ソースコードは見た事がないし、
たいていの言語で、継承よりも委譲を使うように書いてある

そういう論文も多い
993: デフォルトの名無しさん [] 2017/08/25(金)12:36 ID:BwHFndLq(2/4)
>>992
ところで、論文はどのJournalから?
994: 985 [sage] 2017/08/25(金)13:01 ID:ZShOFEd5(4/4)
「c++ 継承 委譲」で検索!

ほとんどの論文が、継承よりも委譲
995: デフォルトの名無しさん [sage] 2017/08/25(金)15:26 ID:W3qddKKH(1)
クロージャーつかおう
996
(2): デフォルトの名無しさん [] 2017/08/25(金)15:28 ID:sLUvaIRs(1)
a=[[1,2],3,4,5,[6,7],8,[9,10],[11,12],[13,14]]
b=[[1,3,4,5,6,8,9,11,13],[2,3,4,5,7,8,10,12,14]]
aの配列からbの配列を作り出すにはどの様にしたらいいでしょう?
997: デフォルトの名無しさん [] 2017/08/25(金)15:32 ID:BwHFndLq(3/4)
>>996
>a=[[1,2],3,4,5,[6,7],8,[9,10],[11,12],[13,14]]
まずは、
a=[[1,2],[3, 3],[4,4],[5,5],[6,7],8,[9,10],[11,12],[13,14]]
を作る。
998: デフォルトの名無しさん [] 2017/08/25(金)15:36 ID:BwHFndLq(4/4)
ar = []
a.each do |e|
if !e.instance_of?(Array) then
ar << [e, e]
else
ar << e
end

まずはこんな感じ!
999: デフォルトの名無しさん [sage] 2017/08/25(金)15:50 ID:4MOWRfGQ(1)
>>996
b = a.each_with_object([[],[]]) {|(x, y), acc| acc[0] << x; acc[1] << (y || x) }
1000: デフォルトの名無しさん [] 2017/08/25(金)16:00 ID:HsL9LVKJ(1)
次スレ
Ruby 初心者スレッド Part 61
2chスレ:tech
1001
(1): 1001 [] Over 1000 Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
life time: 118日 13時間 58分 11秒
1002
(1): 1002 [] Over 1000 Thread
2ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。

───────────────────
《プレミアム会員の主な特典》
★ 2ちゃんねる専用ブラウザからの広告除去
★ 2ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────

会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。

▼ プレミアム会員登録はこちら ▼
https://premium.2ch.net/

▼ 浪人ログインはこちら ▼
https://login.2ch.net/login.php
1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.222s*