プログラミング言語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
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 ってスゲーよなあ(棒
確かに「Rubyはマルチパラダイム言語である」の明確な反証になっているね
ところで、Python の公式文書には以下の記述がある:
https://docs.python.jp/3/howto/functional.html
>> 複数のアプローチに対応した言語もあり、
>> Lisp, C++, Python はそうしたマルチパラダイム言語です
故に、少なくとも Python は標準で論理型をサポートしていないから、
>>163 の主張は「Python はマルチパラダイム言語である」の反証でもある訳だ
たかだか2chの通りすがりのカキコ(>>150)どころか、
Python様の公式文書にすら堂々と反証してしまう >>163 ってスゲーよなあ(棒
204デフォルトの名無しさん
2017/09/11(月) 20:38:54.64ID:I3u+9T/v >>203
君もRubyとRubyコミュニティーに向いてる人材だな
君もRubyとRubyコミュニティーに向いてる人材だな
205デフォルトの名無しさん
2017/09/11(月) 20:43:18.49ID:wRb7h9Km >>200
endを期待してるところでendが無いよってエラーだよ
_erbout.force_encoding(__ENCODING__) は
ERB#set_eoutvar内で呼ばれてる処理だけど
今の理解状況なら気にする必要ない
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倍変わるのは大きなインパクトだった
付け加えると、こうしてバージュンアップを繰り返してもなお
後方互換性を維持し続けてくれているのはありがたい
(もちろん自作ツールでメタプログラミングといった魔術は使っていないが)
自作のRubyで書いたドキュメンテーションツールを日常的に使っているけど、
1.9 で28秒だったのが(ほんの気まぐれで) 2.4 へ変えただけで6秒になった
レスポンスが4倍から5倍変わるのは大きなインパクトだった
付け加えると、こうしてバージュンアップを繰り返してもなお
後方互換性を維持し続けてくれているのはありがたい
(もちろん自作ツールでメタプログラミングといった魔術は使っていないが)
207デフォルトの名無しさん
2017/09/11(月) 20:50:22.49ID:pNAVrMoT >後方互換性を維持し続けてくれているのはありがたい
ナイスジョーク👍
ナイスジョーク👍
208200
2017/09/11(月) 20:55:04.19ID:dKd+OEyf209デフォルトの名無しさん
2017/09/11(月) 21:28:47.33ID:8y57wnUU >>207
>ナイスジョーク👍
確かに世の中にはバージョンアップしただけで、たかだか
Hello world すら動かなくなるナイスジョーク👍な言語も存在する(棒
Rubyの設計上の欠点とは何か?
http://mevius.2ch.net/test/read.cgi/tech/1413113999/126
>ナイスジョーク👍
確かに世の中にはバージョンアップしただけで、たかだか
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>'
>逆に、他の言語で可能だけど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>'
211デフォルトの名無しさん
2017/09/11(月) 22:53:57.56ID:/+/7clo/ ブロックがオブジェクトじゃないのはほんと糞
Rubyは基本的に嫌いじゃないけどこれだけは擁護できないわ
Rubyは基本的に嫌いじゃないけどこれだけは擁護できないわ
212デフォルトの名無しさん
2017/09/11(月) 23:30:33.81ID:503iQjsy いや、ふつう。
必要であればlambdaにすればよし。
必要であればlambdaにすればよし。
213デフォルトの名無しさん
2017/09/11(月) 23:51:41.69ID:dZxzu+uY214163
2017/09/12(火) 00:16:04.48ID:EWvqPynr215デフォルトの名無しさん
2017/09/12(火) 00:26:02.80ID:FDETfUWp メソッド呼び出し時の括弧をオプショナルにしてるから
f = add みたいなのは出来ないよね
でもそういう使い方をするときはメソッドじゃなくProcオブジェクト使う
だからObject#methodを実際のコードで使ったことはない
f = add みたいなのは出来ないよね
でもそういう使い方をするときはメソッドじゃなくProcオブジェクト使う
だからObject#methodを実際のコードで使ったことはない
216デフォルトの名無しさん
2017/09/12(火) 00:37:53.72ID:JOxdLua/ 俺が質問したのは書き方
Rubyは純オブジェクト指向で書けるし、関数言語的な書き方も可能、ワンライナーやダックタイピング、メタプログラミングも書ける
だから逆に他の言語で実用的な書き方を挙げてほしかったんだけど
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, いろいろある
D, pike, いろいろある
220デフォルトの名無しさん
2017/09/12(火) 01:12:37.06ID:K8M+GTE7 >>215
何でそんな言い訳がましい書き方すんの?
defで宣言した関数は変数に代入出来ない。そのような場合はProcを使う必要がある。この行き当たりばったりな仕様は関数を第一級オブジェクトとして扱える言語が流行ってきたため「る、rubyでもできるし!」と言いたいがために適当に実装したためである、ってスパっと言えよ。
何でそんな言い訳がましい書き方すんの?
defで宣言した関数は変数に代入出来ない。そのような場合はProcを使う必要がある。この行き当たりばったりな仕様は関数を第一級オブジェクトとして扱える言語が流行ってきたため「る、rubyでもできるし!」と言いたいがために適当に実装したためである、ってスパっと言えよ。
221デフォルトの名無しさん
2017/09/12(火) 01:15:08.18ID:EWvqPynr222デフォルトの名無しさん
2017/09/12(火) 01:19:06.28ID:TH/zNQOA 思い込みで嘘振りまいてたアンチが発狂しとる
223デフォルトの名無しさん
2017/09/12(火) 02:14:24.98ID:FDETfUWp224デフォルトの名無しさん
2017/09/12(火) 03:23:16.78ID:65BZCqIl http://fatiherikli.github.io/fil/
のローカル版のような2画面エディタないですか
のローカル版のような2画面エディタないですか
225デフォルトの名無しさん
2017/09/12(火) 06:32:54.30ID:Yg2YMH7r226デフォルトの名無しさん
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
Rubyの連中ってのは、「たのしい」だとか、「直感的」とか、「生産性が高い」
とかってよく言う。
けど、メタプログラミング、DSLの辺りで躓く人って多そう。
SinatraのDSLがどう言う実装になっているのか理解するのに相当時間かかった。
特に、こんなコードがキモだとは、長らく気づかんかった。
class A
puts “OK”
end
228デフォルトの名無しさん
2017/09/12(火) 11:06:52.61ID:WW0MtbKa JavaScript でも、関数内の地の文は、実行される
たぶん、Python, Groovy なども同じだろ
たぶん、Python, Groovy なども同じだろ
229デフォルトの名無しさん
2017/09/12(火) 11:11:57.63ID:9jgbEmKh230デフォルトの名無しさん
2017/09/12(火) 11:25:19.54ID:h0iAeYHr > けど、メタプログラミング、DSLの辺りで躓く人って多そう。
その前に自分みたいにオブジェクト指向とか言う暗号が理解できなくてC言語で止まってしまう人もいると思います。
アセンブラからC言語は問題なかったんですけどね…
その前に自分みたいにオブジェクト指向とか言う暗号が理解できなくてC言語で止まってしまう人もいると思います。
アセンブラからC言語は問題なかったんですけどね…
231デフォルトの名無しさん
2017/09/12(火) 11:57:03.55ID:onUD/nnU >>230
オブジェクトのポインタも暗黙の引数として渡される、と割り切ってしまえばとにかく理解はできるはず。
オブジェクト指向だからのこともあるけど、全体像がわかれば、たいして難しいことではないと思う。
オブジェクトのポインタも暗黙の引数として渡される、と割り切ってしまえばとにかく理解はできるはず。
オブジェクト指向だからのこともあるけど、全体像がわかれば、たいして難しいことではないと思う。
232デフォルトの名無しさん
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
スッキリわかる 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を一緒にしないでね!!(棒
>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を一緒にしないでね!!(棒
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 は、いらんわ。
親のスコープへ、遡って探しに行く、変数だよね
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 中国側が首相答弁の撤回要求、日本側拒否★4 [夜のけいちゃん★]
- 中国側が首相答弁の撤回要求、日本側拒否★3 [夜のけいちゃん★]
- 中国の局長は「両手をポケット」で対峙 宣伝戦で国民に示す ★4 [蚤の市★]
- 被爆者は「怒りが腹の底から湧いてくる」高市首相“非核三原則見直し報道”に被爆地で懸念や憤りの声《長崎》 [1ゲットロボ★]
- 債券・円・株「トリプル安」に…長期金利1.755%まで上昇、円は対ユーロで史上最安値 ★2 [蚤の市★]
- 【石破茂前首相】コメ政策転換に皮肉「農政復古の大号令」 [ぐれ★]
- ネトウヨ「中国のものは何もいらない!」 中国人「だったら漢字を使わないでください」 [314039747]
- 【速報】春節の飛行機も欠航ラッシュ 高市早苗終了か [695089791]
- マックって美味しい?
- 【悲報】中国から輸入した物を食べ、輸入した服を着て、輸入したスマホ弄ってる日本人「中国と戦争するぞ!」 [616817505]
- 【悲報】バス停の時刻表、もう誰もよめないと話題に…これが望まれた未来の正しいあり方なのか?狂ってるだろこんなのもはや😡 [339712612]
- 【悲報】高市さん、消える [535650357]
