2ちゃんねる スマホ用 ■掲示板に戻る■ 全部 1- 最新50    

■ このスレッドは過去ログ倉庫に格納されています

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 ★