■ このスレッドは過去ログ倉庫に格納されています
Ruby 初心者スレッド Part 60
- 1 :デフォルトの名無しさん:2017/04/29(土) 02:01:58.34 ID:urVXnFrH.net
- プログラミング言語Rubyについての、初心者向けスレです。質問・要望・雑談などどうぞ。
質問するときは、OSやRubyのバージョン、エラーメッセージを書いたほうがいいお
Ruby on RailsについてはWEBプログラミング板で
前スレ
Ruby 初心者スレッド Part 59
http://echo.2ch.net/test/read.cgi/tech/1475394638/
るりまサーチ (リファレンス検索)
http://rurema.clear-code.com/
Rubyist Magazine - るびま
http://jp.rubyist.net/magazine/
逆引きRuby
http://www.namaraii.com/rubytips/
- 953 :デフォルトの名無しさん:2017/08/24(木) 12:21:31.80 ID:NrLz+nwx.net
- DSLに何言ってんだか
Rubyの書きやすさ書き換えやすさは他の言語にない重要なポイントのひとつだろ
- 954 :デフォルトの名無しさん:2017/08/24(木) 12:32:10.15 ID:5a7RKQDl.net
- >>953
意味不
- 955 :デフォルトの名無しさん:2017/08/24(木) 14:28:41.04 ID:gfjynZsV.net
- >>949
静的型とか動的型とか全く関係ない
>>946
マニュアルくらい読もうぜ
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#+
>>952
言いたいことはわかるがArrayを派生したい場合だってある
Rubyはそういうことを制限しない言語
そのかわりに相応の力量が求められる
- 956 :デフォルトの名無しさん:2017/08/24(木) 14:56:19.91 ID:gfjynZsV.net
- Arrayから直接派生させるよりも、
EnumerableやForwardable使うほうが普通だとは思うけどね
- 957 :デフォルトの名無しさん:2017/08/24(木) 15:12:33.89 ID:+u51O4Tc.net
- 結果収束的には「可能ではあるが極力行わないようになる」こと自体は間違いはない
なんでもかんでもメソッドチェーンにしないのと似たような感覚
ただし(古い表現だが)足元を弾痕穴だらけにしないとわからない感覚なので、未経験者に最初から指示するようなものでもないな
それはそれで「本当は何もできないやらないわかっていない」机上の人だろう
- 958 :デフォルトの名無しさん:2017/08/24(木) 15:38:18.44 ID:NrLz+nwx.net
- DSLに何言ってんだか
Rubyの書きやすさ書き換えやすさは他の言語にない重要なポイントのひとつだろ
- 959 :デフォルトの名無しさん:2017/08/24(木) 16:33:57.27 ID:gfjynZsV.net
- >>957
Arrayを継承したいと考えた理由次第だろ
モンキーパッチ、リファインメント、継承、コンポジション
それぞれメリットデメリットあるんだから初心者であっても
そのトレードオフが理解して自分で判断できるようにならないとダメだよね?
基本クラスであってもどういう方式を選ぶのがいいのかは状況次第だから
背景理由を無視して、一つの選択肢を採用したほうがいいっていうのはちょっとっ極端に感じるよ
- 960 :デフォルトの名無しさん:2017/08/24(木) 20:44:43.22 ID:tqCPVr7b0.net
- 🐒
- 961 :デフォルトの名無しさん:2017/08/24(木) 20:49:02.11 ID:tqCPVr7b.net
- >>955
仮にArrayを継承させたとして
何かのメソッドで思っていた型と違う型が返ってきたとして
静的型ならコンパイルエラーになって即気づける可能性が高いよね
せっかく>>946がRubyが動的型のせいで
> 長い間気づかずどつぼにハマッてたのを思いだした
って告白してくれてるのに
あるメソッドが、どのような仕様になってるかなんて
そんなものはどのような仕様にでも実装できてしまうわけで
(そう書けばそう動く、というだけ)
大事なのは、勘違いしたとき、間違ったときに、直ぐに気づけるかどうか
だからArrayを継承すべきじゃないとかってのは話の本質じゃなくて
長い間気づかずドツボにハマってたのは何故かって部分なんだよ
- 962 :デフォルトの名無しさん:2017/08/24(木) 20:50:35.58 ID:tqCPVr7b.net
- 俺みたいなののほうがマトモなこと言ってるのがもう不思議なぐらいだろ?
- 963 :デフォルトの名無しさん:2017/08/24(木) 20:50:57.98 ID:tqCPVr7b.net
- それぐらいダメってことなんだよ、言語もコミュニティーも
- 964 :デフォルトの名無しさん:2017/08/24(木) 21:04:10.31 ID:sQWhHmgZ.net
- はいはいNGNG
- 965 :デフォルトの名無しさん:2017/08/24(木) 21:37:49.84 ID:gfjynZsV.net
- >>961
言語を使う側の能力の問題を
全部言語のせいにしちゃだめだよ
var result = myArray1 + myArray2
↑みたいに型推論使ってたら似たような事起きるだろ
それは型推論自体がダメだからなのか? 型推論使用禁止にする?
使う道具のメリットデメリットをちゃんと理解して使いこなせてないからだろ
静的型にメリットがあるのはわかるが結局それはトレードオフなんだよ
何を選択するかの問題
- 966 :デフォルトの名無しさん:2017/08/24(木) 21:46:32.32 ID:tqCPVr7b.net
- その場合でもresultをどこかに渡したり
継承で拡張したメソッドを使ったり
実用的なことをしようとした瞬間にコンパイルエラーになる
お前はそのresultを何も使わずにそのまま捨てるのか?
結局、現実的な部分が全くないんだよね
机上の空論、それがRuby
- 967 :デフォルトの名無しさん:2017/08/24(木) 21:51:04.51 ID:tqCPVr7b.net
- しかも俺は
>気づける可能性が高いよね
とも書いてるわけで
現実的にはどこかの段階でコンパイルエラーになる可能性が高い、と
- 968 :デフォルトの名無しさん:2017/08/24(木) 21:55:21.82 ID:Z79NM4TL.net
- スレッドの進行を妨害するのは止めてください
みんなが迷惑を被っています
- 969 :デフォルトの名無しさん:2017/08/24(木) 21:56:03.09 ID:yIhxd10m.net
- コンパイルが通ってもその後テストを走らせることになるけどな
- 970 :デフォルトの名無しさん:2017/08/24(木) 22:02:02.88 ID:gfjynZsV.net
- >>966
オーバーライドしたメソッド呼び出してもコンパイルエラーにならないだろ
静的型でも同じこと十分起こりえるよ
運良くコンパイルエラーで拾えるケースだけ上げて
静的型使うべきなんていう主張はナンセンス
力量が低いやつは静的型選んだほうがいいよっていうアドバイスなら
まだ理解できるけどね
- 971 :デフォルトの名無しさん:2017/08/24(木) 22:05:10.57 ID:Z79NM4TL.net
- 再三にわたり伝えましたが、もう一度
スレッドの進行を妨害するのは止めてください
みんなが迷惑を被っています
- 972 :デフォルトの名無しさん:2017/08/24(木) 22:10:19.62 ID:tqCPVr7b.net
- 起こりえるが、可能性は低いわけだ
運良くコンパイルエラーで拾える、というより
運悪くコンパイルエラーで拾えないケースもありうる、ということ
運が良くないとコンパイルエラーで拾えないんなら
静的型言語はこんなに普及してないし、もてはやされてもない
現実が全く見えていないんだね
- 973 :デフォルトの名無しさん:2017/08/24(木) 22:10:38.73 ID:kEm5qs8H.net
- >>968
LLスレで相手にされなくなったからな
隔離スレの自覚持って欲しいもんだ
- 974 :デフォルトの名無しさん:2017/08/24(木) 22:13:45.33 ID:gfjynZsV.net
- >>971
「だから動的型はダメなんだ」とか思っちゃう初心者が出ないように
きちんと反論しとくことは重要じゃねーの?
>再三にわたり伝えましたが、
って>>968の1回だけじゃんww
- 975 :デフォルトの名無しさん:2017/08/24(木) 22:18:05.33 ID:lIOBscyk.net
- >>974
私たちにとってはなんら重要ではありません
お帰りください
- 976 :デフォルトの名無しさん:2017/08/24(木) 22:19:22.21 ID:gfjynZsV.net
- >>972
型推論禁止すれば運悪くコンパイルエラーで拾えないケースも潰せるね
- 977 :デフォルトの名無しさん:2017/08/24(木) 22:20:59.16 ID:gfjynZsV.net
- >>975
なんでお前が勝手に決めてんの?
- 978 :デフォルトの名無しさん:2017/08/24(木) 22:23:28.89 ID:lIOBscyk.net
- >>977
あなたにはもうそれを判断できるだけの客観的知性が残っていないからです
- 979 :デフォルトの名無しさん:2017/08/24(木) 22:26:09.58 ID:yIhxd10m.net
- >>970
力量が低いだけに留まらず、現実逃避する頭の悪い知ったかぶりのお馬鹿さんなら
あなたが話しかけてるそこにいますよ
- 980 :デフォルトの名無しさん:2017/08/24(木) 22:39:55.72 ID:tqCPVr7b.net
- 俺が言うのもなんだけど
ID:Z79NM4TLやID:lIOBscykのが正解だと思うよ
「そんなことは初めから分かってて承知の上で使っているのだから
放っておいてくれ」
って所でしょ
欠点を認められずに使ってる方が異常
- 981 :デフォルトの名無しさん:2017/08/24(木) 23:09:32.94 ID:Z79NM4TL.net
- スレッドの進行を妨害するのは止めてください
みんなが迷惑を被っています
スレッドの趣旨が分からないなら1を読んで下さい
これ以上妨害を続ける場合は、過去の妨害行為時のログを元に弁護士との相談の上、
措置を取ります
- 982 :デフォルトの名無しさん:2017/08/24(木) 23:11:07.39 ID:h4EzWrOx.net
- 自分が何をしてるか全く理解できないんだろうな
レスがつくことそのものに興奮してここがどこかも判断できていない
貴方達そのものを我々は必要としていない
貴方達が書き込んだそのものを私たちは歓迎しない
我々私たちの望みはひとつだけ、二度とここに来るな
- 983 :デフォルトの名無しさん:2017/08/24(木) 23:27:57.47 ID:tqCPVr7b.net
- 何か映画とかで、スラム街とか田舎町の住人に言われそうなセリフ
- 984 :デフォルトの名無しさん:2017/08/24(木) 23:38:06.01 ID:Z79NM4TL.net
- スレッドの進行を妨害するのは止めてください
みんなが迷惑を被っています
スレッドの趣旨が分からないなら1を読んで下さい
これ以上妨害を続ける場合は、過去の妨害行為時のログを元に弁護士との相談の上、
措置を取ります
- 985 :デフォルトの名無しさん:2017/08/24(木) 23:39:36.79 ID:c/yv4qcw.net
- 過去のgem配布サイト復活しないかな
- 986 :デフォルトの名無しさん:2017/08/25(金) 05:58:03.30 ID:ZShOFEd5.net
- 「Effective Ruby」項目21にも書いてある
コアクラスを継承するな。委譲・包含(Forwardable)を使え。
is-a よりも、has-a を使え
たいていの言語では、String型なども継承できない。
final 指定されてる
初心者は、コレクションを継承したがるが、アンチパターン。
継承すれば、バグるだけ
たいていの「Effective 何々」とか、デザインパターンの本にも、書いてある
- 987 :デフォルトの名無しさん:2017/08/25(金) 06:40:42.06 ID:aRYPlL4U.net
- >>982
例の人は自分が来るせいで誰も居なくなったんだってわかってないからな
コミュニティは衰退したのではなく特定の人物の書き込みにより破壊されたのだ
- 988 :デフォルトの名無しさん:2017/08/25(金) 07:08:25.93 ID:w/d6Mddl.net
- Arrayのような多くの人が慣れ親しんだインタフェースを提供したいと考えてるんだが、
それ自体が慣れで運用してしまうから問題、ということなのか?
極端な話myaddとかにした方がいいのか
- 989 :デフォルトの名無しさん:2017/08/25(金) 07:24:38.55 ID:w/d6Mddl.net
- >>986
アンチパターン名は?
- 990 :デフォルトの名無しさん:2017/08/25(金) 10:40:58.89 ID:ZShOFEd5.net
- JavaScript の、prototype.js なども、コアクラスを上書きして、挙動が変わるから、
皆から、うっとうしがられてる
とにかく、バグるから、個人で、コアクラスを修正してはいけない
やってもいいのは、Date クラスに、便利な関数を追加したり、
Rails とか、使用説明書・メンテナンスもしっかりしている、
有名なフレームワークだけ
- 991 :デフォルトの名無しさん:2017/08/25(金) 11:07:17.19 ID:8cxOpMBd.net
- ↑こいつはRuby畑の人間じゃないな
- 992 :デフォルトの名無しさん:2017/08/25(金) 11:27:54.95 ID:BwHFndLq.net
- >>986
項目21の根拠はなんでしょう?
1. 継承を使うとなるとSuper Classの詳細を知る必要がある。
2. 移譲なら使いたい機能をつまみ食いすれば良いので楽。
こう言う事でしょうかねぇ?
- 993 :985:2017/08/25(金) 12:26:40.27 ID:ZShOFEd5.net
- 例えば、親のArray から、子のDerivedArray を派生させて、
reverse を呼んでも、子クラスを返さず、親クラスを返してしまう
全メソッドを、派生クラスに対応させるのが、無理だから
委譲で、Forwardable モジュールの、def_delegators で、
使うメソッドだけ、宣言する方が簡単
漏れも、10言語以上、数十冊の本を読んでるけど、
配列など、コアクラスを継承した、ソースコードは見た事がないし、
たいていの言語で、継承よりも委譲を使うように書いてある
そういう論文も多い
- 994 :デフォルトの名無しさん:2017/08/25(金) 12:36:03.24 ID:BwHFndLq.net
- >>993
ところで、論文はどのJournalから?
- 995 :985:2017/08/25(金) 13:01:27.87 ID:ZShOFEd5.net
- 「c++ 継承 委譲」で検索!
ほとんどの論文が、継承よりも委譲
- 996 :デフォルトの名無しさん:2017/08/25(金) 15:26:58.12 ID:W3qddKKH.net
- クロージャーつかおう
- 997 :デフォルトの名無しさん:2017/08/25(金) 15:28:23.63 ID:sLUvaIRs.net
- 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の配列を作り出すにはどの様にしたらいいでしょう?
- 998 :デフォルトの名無しさん:2017/08/25(金) 15:32:56.84 ID:BwHFndLq.net
- >>997
>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]]
を作る。
- 999 :デフォルトの名無しさん:2017/08/25(金) 15:36:12.98 ID:BwHFndLq.net
- ar = []
a.each do |e|
if !e.instance_of?(Array) then
ar << [e, e]
else
ar << e
end
まずはこんな感じ!
- 1000 :デフォルトの名無しさん:2017/08/25(金) 15:50:59.00 ID:4MOWRfGQ.net
- >>997
b = a.each_with_object([[],[]]) {|(x, y), acc| acc[0] << x; acc[1] << (y || x) }
- 1001 :デフォルトの名無しさん:2017/08/25(金) 16:00:09.35 ID:HsL9LVKJ.net
- 次スレ
Ruby 初心者スレッド Part 61
https://mevius.2ch.net/test/read.cgi/tech/1503644351/
- 1002 :2ch.net投稿限界:Over 1000 Thread
- 2ch.netからのレス数が1000に到達しました。
総レス数 1002
308 KB
掲示板に戻る
全部
前100
次100
最新50
read.cgi ver 2014.07.20.01.SC 2014/07/20 D ★