プログラミング言語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
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:DEccgWHW276デフォルトの名無しさん
2017/09/16(土) 11:45:25.97ID:gf/ZkNkm Railsと違ってRuby自体の後方互換性はかなり高いよ。1.8や1.9で作ったコードも今もそのまま問題なく使えてる。使えなくなる機能があっても数バージョン前から警告出るから対応しやすい。
277デフォルトの名無しさん
2017/09/16(土) 11:50:32.56ID:54wKV8j0 rbenvで全ver入れてOK
278デフォルトの名無しさん
2017/09/16(土) 15:03:52.29ID:cRp93fnk >>273
Rubyは最先端ではない。
首相は獣医学科設置に関与してない。
首相は、国有地を森友学園へ売却するよう指示してない。
これらは、証明できない。
ツールを作る時の選択肢にRubyがある。
これらの証明は例を示せば良い。
例:vagrant, chef, SASS
Rubyは最先端ではない。
首相は獣医学科設置に関与してない。
首相は、国有地を森友学園へ売却するよう指示してない。
これらは、証明できない。
ツールを作る時の選択肢にRubyがある。
これらの証明は例を示せば良い。
例:vagrant, chef, SASS
279デフォルトの名無しさん
2017/09/16(土) 16:48:46.12ID:ZCzFTInQ >>270
おまえにrubyは早すぎる
おまえにrubyは早すぎる
280デフォルトの名無しさん
2017/09/16(土) 17:39:16.46ID:ja70x9oy 自分がツールを作る時に、シェルスクリプトは論外だろ。
PowerShell は、補完が効くけど、
クラスを使うような、本格的なプログラミングは出来ない
Kotlin は大掛かりで、厳格なものを作れるけど、
静的チェックが厳しすぎるような気もする
結局、Groovy, Ruby が手軽。
DSL も作りやすい
Haxe も、様々な言語に変換できるから、面白そうだけど
PowerShell は、補完が効くけど、
クラスを使うような、本格的なプログラミングは出来ない
Kotlin は大掛かりで、厳格なものを作れるけど、
静的チェックが厳しすぎるような気もする
結局、Groovy, Ruby が手軽。
DSL も作りやすい
Haxe も、様々な言語に変換できるから、面白そうだけど
281デフォルトの名無しさん
2017/09/16(土) 17:58:02.30ID:3y963gmF PowerShellはクラス作れるぞ?
そんなんだからアンチに馬鹿にされるんだよ
そんなんだからアンチに馬鹿にされるんだよ
282デフォルトの名無しさん
2017/09/16(土) 18:03:45.86ID:3y963gmF あと静的チェックが厳しすぎるというのも意味不明だな
Rubyだって想定してる型を間違えたら落ちるかバグるだろう
型書くのが面倒というならわかるけど、静的チェックが緩いこと自体にメリットはない
Rubyだって想定してる型を間違えたら落ちるかバグるだろう
型書くのが面倒というならわかるけど、静的チェックが緩いこと自体にメリットはない
283デフォルトの名無しさん
2017/09/16(土) 18:08:25.83ID:iZTbrLgf 静的チェックをするということは、Crystal みたいな方向性になるのかな
284デフォルトの名無しさん
2017/09/16(土) 20:35:26.41ID:AcW1bn43285デフォルトの名無しさん
2017/09/16(土) 20:37:44.80ID:AcW1bn43286デフォルトの名無しさん
2017/09/16(土) 20:38:28.09ID:PUFjteak >>282
>静的チェックが緩いこと自体にメリットはない
たとえばC言語が標準ライブラリ関数である printf を
容易に実装できたのは、C言語の「静的チェックが緩い」という
特性がメリットになった実例だろ
>静的チェックが緩いこと自体にメリットはない
たとえばC言語が標準ライブラリ関数である printf を
容易に実装できたのは、C言語の「静的チェックが緩い」という
特性がメリットになった実例だろ
287デフォルトの名無しさん
2017/09/16(土) 20:43:55.95ID:54wKV8j0 アンチはまた自演で誘導しようとしてんのか
ほんと嘘をついて騙すのが好きだな
ほんと嘘をついて騙すのが好きだな
288デフォルトの名無しさん
2017/09/16(土) 21:02:57.30ID:PUFjteak >>280
ためしに「Kotlin dsl」でググって見たら最初にヒットした記事
・KotlinでイケてるDSLを作る
http://qiita.com/kikuchy/items/7c8893c4e7e11dafdb6c
この記事では DSL を作るのに有益な Kotlin の言語機能を
6つ紹介しているけど、先頭の4つは Ruby と共通しているね
・拡張関数
―> 既存のクラスへ後からメソッド定義を追加できる
・引数の最後がラムダ式であれば、メソッド呼び出しの …(略)
―> Ruby の「ブロック付きメソッド呼び出し」
・ラムダ式のreturnは省略可能
―> もちろん Ruby もメソッド/ブロックの最後に書くreturnは省略できる
・thisは省略可能
―> Ruby も同じく
特に3つ目の「ブロック付きメソッド呼び出し」は Apple の新世代言語である
Swift でも「Tailing Closure」という名前で導入されている
・クロージャって何がいいの?
http://mevius.2ch.net/test/read.cgi/tech/1415419907/262
世界は Ruby 良さに気付いている、そして Ruby の良き特性を取り込んだ
新世代言語が次々に登場している(>>283 の Crystal、他には Elixir もある)
ためしに「Kotlin dsl」でググって見たら最初にヒットした記事
・KotlinでイケてるDSLを作る
http://qiita.com/kikuchy/items/7c8893c4e7e11dafdb6c
この記事では DSL を作るのに有益な Kotlin の言語機能を
6つ紹介しているけど、先頭の4つは Ruby と共通しているね
・拡張関数
―> 既存のクラスへ後からメソッド定義を追加できる
・引数の最後がラムダ式であれば、メソッド呼び出しの …(略)
―> Ruby の「ブロック付きメソッド呼び出し」
・ラムダ式のreturnは省略可能
―> もちろん Ruby もメソッド/ブロックの最後に書くreturnは省略できる
・thisは省略可能
―> Ruby も同じく
特に3つ目の「ブロック付きメソッド呼び出し」は Apple の新世代言語である
Swift でも「Tailing Closure」という名前で導入されている
・クロージャって何がいいの?
http://mevius.2ch.net/test/read.cgi/tech/1415419907/262
世界は Ruby 良さに気付いている、そして Ruby の良き特性を取り込んだ
新世代言語が次々に登場している(>>283 の Crystal、他には Elixir もある)
289デフォルトの名無しさん
2017/09/16(土) 23:13:55.67ID:+qyS/XRX 日々アンチっぽいと感じる書き込みがあるかもしれないが
書き込んでいる本人たちは、そんな気は決してない
これは皆さんに末永くRubyを使ってもらおうと思ってしていること
未だなおRubyが好きな人に、何言っても回心しないのは分かり切ってるから
逆に強化していこうって方向なわけ
書き込んでいる本人たちは、そんな気は決してない
これは皆さんに末永くRubyを使ってもらおうと思ってしていること
未だなおRubyが好きな人に、何言っても回心しないのは分かり切ってるから
逆に強化していこうって方向なわけ
290デフォルトの名無しさん
2017/09/16(土) 23:18:50.04ID:+qyS/XRX たとえばシステムにsafeな部分とunsafeな部分があったら
unsafeな部分は一か所にまとめて管理したいって考えるだろう
スラム街みたいなもんだな
別にこの世は俺の管轄するシステムでも何でもないから
どうでも良いっちゃどうでも良いんだが
2chにも隔離スレという文化があるし
似たような感覚ではある
unsafeな部分は一か所にまとめて管理したいって考えるだろう
スラム街みたいなもんだな
別にこの世は俺の管轄するシステムでも何でもないから
どうでも良いっちゃどうでも良いんだが
2chにも隔離スレという文化があるし
似たような感覚ではある
291デフォルトの名無しさん
2017/09/17(日) 03:18:56.25ID:tx3RW6Nz 嘘付いてスレを妨害した荒らしのレスが上の方にあるじゃん
292デフォルトの名無しさん
2017/09/17(日) 05:11:26.55ID:7k/HywsS Rails5.1.4を使用しています
アホしてsendカラムを含んだテーブルをmigrateしたところ、あちこちでエラーが発生するようになりました。
すぐにロールバックし、DBからはカラムが消えたことを確認しましたが、ApplicationRecordを継承したクラスではいまだに生きているようで、症状が改善されません。
ロールバック以外にできることがあれば、教えてください。
アホしてsendカラムを含んだテーブルをmigrateしたところ、あちこちでエラーが発生するようになりました。
すぐにロールバックし、DBからはカラムが消えたことを確認しましたが、ApplicationRecordを継承したクラスではいまだに生きているようで、症状が改善されません。
ロールバック以外にできることがあれば、教えてください。
293デフォルトの名無しさん
2017/09/17(日) 13:22:15.36ID:EJ9y/eYt294デフォルトの名無しさん
2017/09/17(日) 13:27:05.45ID:iyMogwhx エスパーするが
Rubyではメソッド名が同じであれば同じような振る舞いをします
そのことはRubyで保証されているので
プログラマは振る舞いについて何も考えなくてよいです
メソッド名が同じなら、同じような振る舞いをします
なのでそうしてください
そのあと言語仕様から変数宣言を無くして代入で代用してください
一見すると「変数宣言」と「代入」の区別がつかなくなるように思えるかもしれませんが
変数宣言が無くなるので変数のスコープのことを考えなくてよくなります
これらはRubyでサポートされているので、そのようにしてください
Rubyではメソッド名が同じであれば同じような振る舞いをします
そのことはRubyで保証されているので
プログラマは振る舞いについて何も考えなくてよいです
メソッド名が同じなら、同じような振る舞いをします
なのでそうしてください
そのあと言語仕様から変数宣言を無くして代入で代用してください
一見すると「変数宣言」と「代入」の区別がつかなくなるように思えるかもしれませんが
変数宣言が無くなるので変数のスコープのことを考えなくてよくなります
これらはRubyでサポートされているので、そのようにしてください
295デフォルトの名無しさん
2017/09/17(日) 13:46:03.46ID:rqcmn5Um 荒らしのコピペまじウゼー
296デフォルトの名無しさん
2017/09/17(日) 19:33:50.41ID:vAwE04IK >>292
Rails の質問や話題はWebProg板のRailsスレへ:
・【RoR】Ruby on Rails Part20
http://medaka.2ch.net/test/read.cgi/php/1474523013/
Rails の質問や話題はWebProg板のRailsスレへ:
・【RoR】Ruby on Rails Part20
http://medaka.2ch.net/test/read.cgi/php/1474523013/
297デフォルトの名無しさん
2017/09/17(日) 20:54:55.57ID:vAwE04IK >>294
> Pythonではメソッド名が同じであれば同じような振る舞いをします
> そのことはPythonで保証されているので
> プログラマは振る舞いについて何も考えなくてよいです
> メソッド名が同じなら、同じような振る舞いをします
> なのでそうしてください
> そのあと言語仕様から変数宣言を無くして代入で代用してください
> 一見すると「変数宣言」と「代入」の区別がつかなくなるように思えるかもしれませんが
> 変数宣言が無くなるので変数のスコープのことを考えなくてよくなります
> これらはPythonでサポートされているので、そのようにしてください
試しに Ruby を Python に変えて見たけど、何ら違和感が無い
そもそも「オブジェクト指向+動的型付け+手続き型言語」という特性を備えた
あらゆる言語(Python/JavaScript/Perl/PHP..etc)に通じる単純明快な事柄だね
いったいぜんたい >>294 は何を言いたいのだろうか?
あえて >>294 の主旨をエスパーすると:
「私はプログラミングを習い始めたばかりの初心者です、よろしくお願いします」
ってことではなかろうか
> Pythonではメソッド名が同じであれば同じような振る舞いをします
> そのことはPythonで保証されているので
> プログラマは振る舞いについて何も考えなくてよいです
> メソッド名が同じなら、同じような振る舞いをします
> なのでそうしてください
> そのあと言語仕様から変数宣言を無くして代入で代用してください
> 一見すると「変数宣言」と「代入」の区別がつかなくなるように思えるかもしれませんが
> 変数宣言が無くなるので変数のスコープのことを考えなくてよくなります
> これらはPythonでサポートされているので、そのようにしてください
試しに Ruby を Python に変えて見たけど、何ら違和感が無い
そもそも「オブジェクト指向+動的型付け+手続き型言語」という特性を備えた
あらゆる言語(Python/JavaScript/Perl/PHP..etc)に通じる単純明快な事柄だね
いったいぜんたい >>294 は何を言いたいのだろうか?
あえて >>294 の主旨をエスパーすると:
「私はプログラミングを習い始めたばかりの初心者です、よろしくお願いします」
ってことではなかろうか
298デフォルトの名無しさん
2017/09/17(日) 21:59:40.46ID:iyMogwhx >試しに Ruby を Python に変えて見たけど、何ら違和感が無い
それで何が問題?
あと、Pythonは型アノテーションを取り入れてるから
過去の過ちを修正していこうということだろうね
一方Rubyは逆走中
失敗しちゃったから、もういっそ、突き抜けちゃおう、という勢い
それで何が問題?
あと、Pythonは型アノテーションを取り入れてるから
過去の過ちを修正していこうということだろうね
一方Rubyは逆走中
失敗しちゃったから、もういっそ、突き抜けちゃおう、という勢い
299デフォルトの名無しさん
2017/09/17(日) 22:05:37.68ID:G7neoTxj Ruby 以外の動的言語は、関数の外で宣言した変数が、
関数の内側で、使えるよな
つまり、関数スコープが厳格ではない
Rubyで、変数宣言が無いのは、関数スコープが厳格だからかな?
関数の内側で、使えるよな
つまり、関数スコープが厳格ではない
Rubyで、変数宣言が無いのは、関数スコープが厳格だからかな?
300デフォルトの名無しさん
2017/09/17(日) 22:15:19.17ID:5DAGa3Dm >>299
Rubyはオブジェクト指向言語なので
カプセル化するために基本的に
他のオブジェクトの変数をそのまま使わない
使う必要がある場合は引数またはアクセサを通して使う
またグローバル変数も使えるが非推奨
Rubyはオブジェクト指向言語なので
カプセル化するために基本的に
他のオブジェクトの変数をそのまま使わない
使う必要がある場合は引数またはアクセサを通して使う
またグローバル変数も使えるが非推奨
301デフォルトの名無しさん
2017/09/17(日) 22:58:55.88ID:iyMogwhx |x; foo|
↑の foo のような、変素宣言と変わらない素晴らしい存在と出会うことが出来ます
ちなみに python にも nonlocal という素晴らしいお友達が居ます
変数宣言を無くして代入で代用するアイデアは本当にうまく行きます
「@」に出会うことが出来るし
レキシカルスコープについて考えると夜も眠れないほどです
↑の foo のような、変素宣言と変わらない素晴らしい存在と出会うことが出来ます
ちなみに python にも nonlocal という素晴らしいお友達が居ます
変数宣言を無くして代入で代用するアイデアは本当にうまく行きます
「@」に出会うことが出来るし
レキシカルスコープについて考えると夜も眠れないほどです
302デフォルトの名無しさん
2017/09/17(日) 23:06:07.39ID:G7neoTxj Ruby のブロック(クロージャ内の)変数だろ
python のnonlocal は、いらんわ。
親のスコープへ、遡って探しに行く、変数だよね
python のnonlocal は、いらんわ。
親のスコープへ、遡って探しに行く、変数だよね
303デフォルトの名無しさん
2017/09/17(日) 23:20:45.74ID:vAwE04IK >>298
>過去の過ちを修正していこうということだろうね
その Python の過ちがあまりに低レベルな訳だが:
(1) print 機能が文として実装され、ライブラリとして分離されていなかった(>>209)
すでに1970年代に登場したC言語では、
print は標準ライブラリ関数として言語仕様から
分離していたにもかかわらず
(2) 整数の割り算という極めて基礎的な計算仕様が安定していない
・割り算の扱い – Python2からPython3への変更 –
http://www.trusted-design.net/archives/455/
(3) 関数型言語ブームを追って行き当たりばったりで適当に実装したおかげで、
ラムダ式の本体には式しか書けない
改善要望は過去から存在したが、作者のGuid氏はGuido氏は
「複数行のラムダは解けないパズル(unsolvable puzzle)」と匙を投げた(>>234)
(1)と(2)はようやく Python3 で修正を終えたけど、その代償として
「後方互換性の断絶」という事態を招いた
(3) の「解けないパズル」に至っては Python3 でも修正の目処が立たず先送り
おそらく Python4 で修正して「後方互換性の断絶」が再現されることになる
つまり Python における「過去の過ちの修正」の歴史って、こういうこと
繰り返すけど、Python は過ちのレベルがあまりに初歩的すぎるのよ
>過去の過ちを修正していこうということだろうね
その Python の過ちがあまりに低レベルな訳だが:
(1) print 機能が文として実装され、ライブラリとして分離されていなかった(>>209)
すでに1970年代に登場したC言語では、
print は標準ライブラリ関数として言語仕様から
分離していたにもかかわらず
(2) 整数の割り算という極めて基礎的な計算仕様が安定していない
・割り算の扱い – Python2からPython3への変更 –
http://www.trusted-design.net/archives/455/
(3) 関数型言語ブームを追って行き当たりばったりで適当に実装したおかげで、
ラムダ式の本体には式しか書けない
改善要望は過去から存在したが、作者のGuid氏はGuido氏は
「複数行のラムダは解けないパズル(unsolvable puzzle)」と匙を投げた(>>234)
(1)と(2)はようやく Python3 で修正を終えたけど、その代償として
「後方互換性の断絶」という事態を招いた
(3) の「解けないパズル」に至っては Python3 でも修正の目処が立たず先送り
おそらく Python4 で修正して「後方互換性の断絶」が再現されることになる
つまり Python における「過去の過ちの修正」の歴史って、こういうこと
繰り返すけど、Python は過ちのレベルがあまりに初歩的すぎるのよ
304デフォルトの名無しさん
2017/09/17(日) 23:28:50.19ID:vAwE04IK >>299
>Ruby 以外の動的言語は、関数の外で宣言した変数が、
>関数の内側で、使えるよな
いや、そもそも Ruby ではメソッド定義の中で入れ子になった
メソッドは定義できないよ
これは Smalltalk や Java といった最初からオブジェクト指向言語として
設計された仲間に共通する特性
>Rubyで、変数宣言が無いのは、関数スコープが厳格だからかな?
いや、メソッドの入れ子定義を禁止したことで、スコープの定義が簡潔なだけ
というか、Python や JavaScript のような関数の入れ子定義ができる
動的型付け言語でも、関数宣言は必要無いから、何を言いたいのだろうか?
>Ruby 以外の動的言語は、関数の外で宣言した変数が、
>関数の内側で、使えるよな
いや、そもそも Ruby ではメソッド定義の中で入れ子になった
メソッドは定義できないよ
これは Smalltalk や Java といった最初からオブジェクト指向言語として
設計された仲間に共通する特性
>Rubyで、変数宣言が無いのは、関数スコープが厳格だからかな?
いや、メソッドの入れ子定義を禁止したことで、スコープの定義が簡潔なだけ
というか、Python や JavaScript のような関数の入れ子定義ができる
動的型付け言語でも、関数宣言は必要無いから、何を言いたいのだろうか?
305デフォルトの名無しさん
2017/09/17(日) 23:36:32.98ID:vAwE04IK306デフォルトの名無しさん
2017/09/17(日) 23:54:56.42ID:vAwE04IK >>304
>動的型付け言語でも、関数宣言は必要無いから、何を言いたいのだろうか?
最後の文章を自己レスで訂正:
X:関数宣言は必要無いから、
O:変数宣言は必須では無いから、
補足しておくと:
・JavaScript は予約語 var で始まる変数宣言の構文があるけど、
省略すれば暗黙的に宣言される
・Python の型アノーテーションは、その名アノーテーションとあるように
コメント扱いだから変数宣言の意味とは全く異なる存在であるし、
当たり前だけど省略できる
>動的型付け言語でも、関数宣言は必要無いから、何を言いたいのだろうか?
最後の文章を自己レスで訂正:
X:関数宣言は必要無いから、
O:変数宣言は必須では無いから、
補足しておくと:
・JavaScript は予約語 var で始まる変数宣言の構文があるけど、
省略すれば暗黙的に宣言される
・Python の型アノーテーションは、その名アノーテーションとあるように
コメント扱いだから変数宣言の意味とは全く異なる存在であるし、
当たり前だけど省略できる
307デフォルトの名無しさん
2017/09/18(月) 00:24:39.32ID:Rs/BRyvp > Ruby:
> lambda { |foo| …… }
ではなく
Ruby:
lambda { |x; foo| …… }
この仮引数ではない余計な「foo」の事ですよ
明らかに浮いてますね、変ですね
何なんですかね、このfoo
変数宣言を代入で代用するアイデアは本当に素晴らしいですね
>(2) 整数の割り算という極めて基礎的な計算仕様が安定していない
http://postd.cc/sick-of-ruby-dynamic-typing-side-effects-object-oriented-programming/
Ruby: それはstdlibが搭載されているモジュールをrequireすると、
整数割り算の動き方に影響を与えてしまう言語。 @tomdale
> lambda { |foo| …… }
ではなく
Ruby:
lambda { |x; foo| …… }
この仮引数ではない余計な「foo」の事ですよ
明らかに浮いてますね、変ですね
何なんですかね、このfoo
変数宣言を代入で代用するアイデアは本当に素晴らしいですね
>(2) 整数の割り算という極めて基礎的な計算仕様が安定していない
http://postd.cc/sick-of-ruby-dynamic-typing-side-effects-object-oriented-programming/
Ruby: それはstdlibが搭載されているモジュールをrequireすると、
整数割り算の動き方に影響を与えてしまう言語。 @tomdale
308デフォルトの名無しさん
2017/09/18(月) 01:38:17.76ID:+b1AQYPX309デフォルトの名無しさん
2017/09/18(月) 02:48:06.01ID:nAoTSCTK310デフォルトの名無しさん
2017/09/18(月) 04:01:15.69ID:rETRD+xz lambda { |x; foo| …… }
ブロック(クロージャ内の)変数として、使いたい場合、
わざと、foo に代入しない
JavaScript でも、undefined が予約語ではないから、
わざと引数に代入せずに、undefined を作る方法がある
ブロック(クロージャ内の)変数として、使いたい場合、
わざと、foo に代入しない
JavaScript でも、undefined が予約語ではないから、
わざと引数に代入せずに、undefined を作る方法がある
311デフォルトの名無しさん
2017/09/18(月) 08:11:23.91ID:vEKmFrOo 糞自演でスレを荒らすなよ屑
312デフォルトの名無しさん
2017/09/18(月) 09:16:48.21ID:nAoTSCTK >>310
fooに代入するって何?
fooに代入するって何?
313デフォルトの名無しさん
2017/09/18(月) 09:47:51.23ID:rETRD+xz X だけに代入して、foo には何も代入しなければよい
そうすれば、foo は、ブロック内だけのローカルスコープを持つ、
ブロック変数として使える
そうすれば、foo は、ブロック内だけのローカルスコープを持つ、
ブロック変数として使える
314デフォルトの名無しさん
2017/09/18(月) 10:13:22.15ID:Rs/BRyvp fooに代入出来るけどあえてしない場合は
lambda { |x, foo| …… }
って書くんじゃないの?
俺の書いたのは
lambda { |x; foo| …… }
「;」以降の変数って何なんですかね、こんな変な文法
変数宣言してるのと変わらないですよね
変数宣言を代入で代用するアイデアは本当にうまくいってますね
「@」もサイコーですし、python の nonlocal も最高
lambda { |x, foo| …… }
って書くんじゃないの?
俺の書いたのは
lambda { |x; foo| …… }
「;」以降の変数って何なんですかね、こんな変な文法
変数宣言してるのと変わらないですよね
変数宣言を代入で代用するアイデアは本当にうまくいってますね
「@」もサイコーですし、python の nonlocal も最高
315デフォルトの名無しさん
2017/09/18(月) 10:49:09.23ID:vEKmFrOo しつこいぞ荒し
いい加減にしろ
いい加減にしろ
316デフォルトの名無しさん
2017/09/18(月) 11:15:25.67ID:Rs/BRyvp > >>307
> >Ruby: それはstdlibが搭載されているモジュールをrequireすると、
> >整数割り算の動き方に影響を与えてしまう言語。 @tomdale
> それは整数割り算のメソッドをオーバーライド(上書き)したからだよ
> リンク先の文書だとモジュール “mathn” を require で指定しているね
> バージョンによって
> 素の「整数割り算の動き方」が変わってしまうナイスジョーク言語(>>209)と
> 一緒にしないでね!!(棒
これもはっきり言ってPythonのがマシ
問題になるのは2から3への移植の時だけだから
自分で移植しようとしているのは明らかに分かり切っているから
当然注意深くやるし
requireするしないで、割り算の挙動が変わる方が悪質
> >Ruby: それはstdlibが搭載されているモジュールをrequireすると、
> >整数割り算の動き方に影響を与えてしまう言語。 @tomdale
> それは整数割り算のメソッドをオーバーライド(上書き)したからだよ
> リンク先の文書だとモジュール “mathn” を require で指定しているね
> バージョンによって
> 素の「整数割り算の動き方」が変わってしまうナイスジョーク言語(>>209)と
> 一緒にしないでね!!(棒
これもはっきり言ってPythonのがマシ
問題になるのは2から3への移植の時だけだから
自分で移植しようとしているのは明らかに分かり切っているから
当然注意深くやるし
requireするしないで、割り算の挙動が変わる方が悪質
317デフォルトの名無しさん
2017/09/18(月) 11:19:25.70ID:Rs/BRyvp ああ分かりにくい日本語になってしまったな
移植の時だけ気にすればよいPythonと違って
常に気を付けなければならないRubyの方が悪質
requireするしないで、割り算のような基本的な四則演算の
挙動が変わるのはあり得ない
移植の時だけ気にすればよいPythonと違って
常に気を付けなければならないRubyの方が悪質
requireするしないで、割り算のような基本的な四則演算の
挙動が変わるのはあり得ない
318デフォルトの名無しさん
2017/09/18(月) 11:21:09.53ID:RAFTqz6F319デフォルトの名無しさん
2017/09/18(月) 11:34:58.89ID:ePom9dNv320デフォルトの名無しさん
2017/09/18(月) 11:53:48.10ID:VM+b53w3 > requireするしないで、割り算の挙動が変わる方が悪質
何の話かと思ってmathnを検索したら標準クラスをオーバーライド?するのね。
ただやるかやらないかと出来る出来ないは別の話だと思うし
requireする前に説明文読まない人はいないでしょう。
まあ間接的にrequireされてたら憤死ものですが…。
何の話かと思ってmathnを検索したら標準クラスをオーバーライド?するのね。
ただやるかやらないかと出来る出来ないは別の話だと思うし
requireする前に説明文読まない人はいないでしょう。
まあ間接的にrequireされてたら憤死ものですが…。
321デフォルトの名無しさん
2017/09/18(月) 12:06:43.11ID:H26Q6EL5 逆に言うとrequireするだけで、自分のタイミングで置きかえれるのは柔軟
322デフォルトの名無しさん
2017/09/18(月) 12:59:55.26ID:nAoTSCTK いつもの荒らしを相手にしてごめんなさい
私が馬鹿でした
私が馬鹿でした
323デフォルトの名無しさん
2017/09/18(月) 13:19:24.65ID:KVRZIFdh なんかこのアンチ、思い込みが激しくない?
324デフォルトの名無しさん
2017/09/18(月) 14:08:56.09ID:T75MpWNi 確認したらmathnライブラリは非推奨扱いになってる
リファインメントを使う代替ライブラリがあるのかな
mathn自体使った事はないけどさ
リファインメントを使う代替ライブラリがあるのかな
mathn自体使った事はないけどさ
325デフォルトの名無しさん
2017/09/18(月) 14:22:24.92ID:NfLL63dw こういう人の話を聞かないで延々、一人しゃべりしてるやつって気持ち悪い
326デフォルトの名無しさん
2017/09/18(月) 14:50:20.87ID:/S27bRBH おまい2ちゃん初めてか?
327デフォルトの名無しさん
2017/09/18(月) 15:01:07.52ID:KVRZIFdh 現実で話し聞いてくれる相手を見つけなよ
328デフォルトの名無しさん
2017/09/19(火) 00:51:54.54ID:qwtMAuXO 荒らしはまずその嘘をつく癖を直さないと
329デフォルトの名無しさん
2017/09/19(火) 11:48:35.35ID:oRSrnZEU オープンクラス、つまりモンキーパッチは嫌われてる
JS の、prototype.js と同じ。
基本的なAPI を上書きするから、挙動が変わる
だから、嫌われる
JS の、prototype.js と同じ。
基本的なAPI を上書きするから、挙動が変わる
だから、嫌われる
330デフォルトの名無しさん
2017/09/19(火) 11:59:30.04ID:PO17xH6Y なぜそんなものを作ったとなじる前にそんなものじゃない実装をお作りになったらどうでしょうか。
オーバーライドな実装が気に入らない、だから自分でそれをしない実装を作った!というのは別に誰にも否定されませんよ。
出来たそれが多くの人に支持されるかどうか?の話はまた別ですが。
オーバーライドな実装が気に入らない、だから自分でそれをしない実装を作った!というのは別に誰にも否定されませんよ。
出来たそれが多くの人に支持されるかどうか?の話はまた別ですが。
331デフォルトの名無しさん
2017/09/19(火) 12:23:14.37ID:PJTSF08k オープンクラス自体が必ずしも悪いわけではないけど、問題はどこかで一回requireしたら影響がVM全体に波及してしまうことだね。
そのことは重大な問題としてよく認識されていて、
例えばC#の拡張メソッドはそれを含む名前空間を同一ソースファイル内で明示的にインポートしないと使えない。
Rubyも必ず毎回requireしないといけないようにすればよかったんだよ。Matzに言わせれば屈辱かもしれないけど。
そのことは重大な問題としてよく認識されていて、
例えばC#の拡張メソッドはそれを含む名前空間を同一ソースファイル内で明示的にインポートしないと使えない。
Rubyも必ず毎回requireしないといけないようにすればよかったんだよ。Matzに言わせれば屈辱かもしれないけど。
332デフォルトの名無しさん
2017/09/19(火) 12:58:20.02ID:pUrd1x2X refine使えよ
333デフォルトの名無しさん
2017/09/19(火) 14:07:33.30ID:PO17xH6Y それは逆のこともあってグローバルにしたいからそのようにヤルってのもあるでしょう。
それがそのように作成されているのはそのようにする意図があるのだし
影響受けまくりの共同開発のリポジトリで独断なら話は戦争ですが
使う人がいなきゃ肥やしにもならないライブラリにいちいち文句つけるなんて時間の無駄ですよ。
ただそこにあるだけで目障りという話でしたらまったく同じ理由で罵詈雑言の応酬になるのがオチでしょう。
それがそのように作成されているのはそのようにする意図があるのだし
影響受けまくりの共同開発のリポジトリで独断なら話は戦争ですが
使う人がいなきゃ肥やしにもならないライブラリにいちいち文句つけるなんて時間の無駄ですよ。
ただそこにあるだけで目障りという話でしたらまったく同じ理由で罵詈雑言の応酬になるのがオチでしょう。
334デフォルトの名無しさん
2017/09/19(火) 14:12:31.68ID:qwtMAuXO アンチは思い込みの激しい性格だから、まともな社会生活をおくれなくて孤独なんだよ
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 「怒りに震えて涙が出た」 同性婚認めず「合憲」判断に原告が反発 「差別的な判決だ」 ★2 [ぐれ★]
- 中国航空会社、日本行き減便900便超に拡大 関空中心に全体の16% [蚤の市★]
- 住宅ローン金利、大手4行で「最高水準」に…10年固定の基準金利4.40-5.15% [蚤の市★]
- 今後50年間、毎年100万人ずつ人口が減る…「少子化対策」の失敗で日本が迎える「死ぬまで搾取」というヤバい未来 ★7 [ぐれ★]
- 財政膨張、自民党内に異論 麻生副総裁「やりすぎじゃないか」 [蚤の市★]
- 中国外務省「正式な発言撤回なければ受け入れず」 高市首相は台湾有事「存立危機事態」言及せずも「言及しないことと撤回は別問題」★6 [ぐれ★]
- 中学生100m日本記録(10秒70)を樹立した沖縄の少年、突然ゴールキーパーになるとか言い出して陸上を引退してしまう・・・ [329329848]
- 日本政府、ブチギレ「ガソリン暫定税率廃止したぶん、どこ増税すればいいんだよ!!!!」 [329329848]
- 鬱になったことないやつって弱いと思うわ
- 悪魔系人気Vtuberでびでび・でびる様、社畜の尻尾を踏んで炎上→3482万 [903292576]
- 【動画】上海バンダイナムコフェス、ワンピース歌ってる途中に中国政府「日本人の公演全面禁止」発令された瞬間強制終了 怖すぎ★5 [579392623]
- 時かけの千昭って未来に帰っても真琴でオナニーするだけだろ
