プログラミング言語Rubyについての、初心者向けスレです。質問・要望・雑談などどうぞ。
質問するときは、OSやRubyのバージョン、エラーメッセージを書いたほうがいいお
Ruby on RailsについてはWEBプログラミング板で
前スレ
Ruby 初心者スレッド Part 61
https://mevius.5ch.net/test/read.cgi/tech/1503644351/
るりまサーチ (リファレンス検索)
http://rurema.clear-code.com/
Rubyist Magazine - るびま
http://jp.rubyist.net/magazine/
逆引きRuby
http://www.namaraii.com/rubytips/
探検
Ruby 初心者スレッド Part 62
レス数が900を超えています。1000を超えると表示できなくなるよ。
2017/11/24(金) 00:35:29.31ID:rLZHdQ3Q
826デフォルトの名無しさん
2018/03/04(日) 00:30:02.17ID:99M3BGnn >>825
ありがとうございました
ありがとうございました
827デフォルトの名無しさん
2018/03/04(日) 02:42:13.82ID:Oz1ASWrr キーに配列が使えるのか・・・
828デフォルトの名無しさん
2018/03/04(日) 04:12:18.75ID:aAfADGFK オブジェクトはなんでもイケるんじゃなかったっけ?
ハッシュ値さえちゃんと返せば。
ハッシュ値さえちゃんと返せば。
829デフォルトの名無しさん
2018/03/04(日) 11:33:10.30ID:7gUy2hud キーにした配列を変化させた時はrehashしないとキーが一致しなくなる
文字列のキーは変化させても、キーはセットしたときのまま
文字列のキーは変化させても、キーはセットしたときのまま
830デフォルトの名無しさん
2018/03/04(日) 11:34:10.89ID:Oz1ASWrr なるほどね。先入観として[a,b]ってかいたら毎回newされて、
キーとしては未定義値のnil固定か、別オブジェクト扱いで不定になるか、と思えた
キーとしては未定義値のnil固定か、別オブジェクト扱いで不定になるか、と思えた
831デフォルトの名無しさん
2018/03/05(月) 16:37:38.89ID:62GuhFZ7 str = <<'EOT'
str = << 'EOT'
here doc で、下のように、<< の後ろに半角空白があると、文法エラーになる
それと、WSL のUbuntu 側にインストールしたRuby で、
Windows 側にあるCSV ファイルを処理すると、
改行コードが異なるから、不正な形式のファイルと言われる。
改行コードを、LF だけに変えると、正しく処理できる
str = << 'EOT'
here doc で、下のように、<< の後ろに半角空白があると、文法エラーになる
それと、WSL のUbuntu 側にインストールしたRuby で、
Windows 側にあるCSV ファイルを処理すると、
改行コードが異なるから、不正な形式のファイルと言われる。
改行コードを、LF だけに変えると、正しく処理できる
832デフォルトの名無しさん
2018/03/05(月) 17:53:15.03ID:aK37pZ+C mode: 'rt'
で読み込めばいいじゃん
で読み込めばいいじゃん
833831
2018/03/05(月) 19:10:41.11ID:62GuhFZ7 options に行区切りを指定したら、
WSL のUbuntu 側にインストールしたRuby で、
Windows 側にあるCSV ファイルを処理できた
row_sep: "\r\n" では出来たが、
row_sep: :auto では、エラーになる
WSL のUbuntu 側にインストールしたRuby で、
Windows 側にあるCSV ファイルを処理できた
row_sep: "\r\n" では出来たが、
row_sep: :auto では、エラーになる
834デフォルトの名無しさん
2018/03/05(月) 21:53:10.11ID:K/Y9LwEe require ‘pry’
def foo;@a = 1;end
binding.pry
このコードを実行し、出て来たプロンプトで
> cd Object
> instance_methods(false)
=> [:to_yaml, :to_yaml_properties, :pry, :__binding__, :psych_to_yaml]
と出ました。fooメソッドが見つかりません。
トップレベルで定義したfooメソッドはObjectのメソッドに成るのでは?
ちなみにコマンドラインでpryとタイプして
[1] pry(main)> def foo;@a=0;end
=> :foo
[2] pry(main)> cd Object
[3] pry(Object):1> instance_methods(false)
=> [:to_yaml, :to_yaml_properties, :pry, :__binding__, :psych_to_yaml, :foo]
[4] pry(Object):1>
ちゃんとfooが見えます。
def foo;@a = 1;end
binding.pry
このコードを実行し、出て来たプロンプトで
> cd Object
> instance_methods(false)
=> [:to_yaml, :to_yaml_properties, :pry, :__binding__, :psych_to_yaml]
と出ました。fooメソッドが見つかりません。
トップレベルで定義したfooメソッドはObjectのメソッドに成るのでは?
ちなみにコマンドラインでpryとタイプして
[1] pry(main)> def foo;@a=0;end
=> :foo
[2] pry(main)> cd Object
[3] pry(Object):1> instance_methods(false)
=> [:to_yaml, :to_yaml_properties, :pry, :__binding__, :psych_to_yaml, :foo]
[4] pry(Object):1>
ちゃんとfooが見えます。
835デフォルトの名無しさん
2018/03/05(月) 22:05:54.92ID:K/Y9LwEe 自己解決しました。
[1] pry(main)> self.private_methods(false)
とすれば見えました。
[1] pry(main)> self.private_methods(false)
とすれば見えました。
836デフォルトの名無しさん
2018/03/11(日) 14:39:13.23ID:veKfJdlp 1
837デフォルトの名無しさん
2018/03/15(木) 18:29:02.24ID:5enxwtKu RubyからDB扱うときって皆は何のライブラリ使ってるの?
838デフォルトの名無しさん
2018/03/15(木) 19:28:59.60ID:tIXtXy4E RubyでDBを扱う場合、プロダクションで使われているのは世界で唯一ActiveRecordのみ
839デフォルトの名無しさん
2018/03/15(木) 21:18:59.56ID:OYGfq7D7 インターフェースじゃん。
バックでmysqlとか動いてるぞ。
いいからちゃんと勉強しろよ。
バックでmysqlとか動いてるぞ。
いいからちゃんと勉強しろよ。
840デフォルトの名無しさん
2018/03/15(木) 21:31:02.48ID:rmXeLovx >>839
ライブラリで答えてください
ライブラリで答えてください
841デフォルトの名無しさん
2018/03/15(木) 23:24:57.24ID:xG9lbsTH >>837
ActiveRecordが大半なのは間違いない
ORMを求めてるならsequel、rom、hanami等
素のDBライブラリならmysql2, sqlite3-ruby, ruby-pg
ArelでSQLを構築してDBライブラリ使ってSQL実行してもいい
ActiveRecordが大半なのは間違いない
ORMを求めてるならsequel、rom、hanami等
素のDBライブラリならmysql2, sqlite3-ruby, ruby-pg
ArelでSQLを構築してDBライブラリ使ってSQL実行してもいい
842デフォルトの名無しさん
2018/03/16(金) 15:24:05.43ID:3ma6aQHv sqlite3
843デフォルトの名無しさん
2018/03/16(金) 18:23:28.28ID:2Gd98HT2 >>839
Rails屋がSQLすら書けなさそうに見えて腹立つのは分からんでもないけど、今はDBインターフェースの話しかしてないぞ
Rails屋がSQLすら書けなさそうに見えて腹立つのは分からんでもないけど、今はDBインターフェースの話しかしてないぞ
844デフォルトの名無しさん
2018/03/16(金) 23:22:04.16ID:yiSYhWxU 「Node.js超入門、掌田津耶乃、2017」を読んでいるけど、JavaScript の基本は、Ruby
Ruby のSinatra, JS のNode.js を、full scratch で書くと、ほぼ同じ
Rails, JSのExpress + Bookshelf が、ほぼ同じ
Ruby のSinatra, JS のNode.js を、full scratch で書くと、ほぼ同じ
Rails, JSのExpress + Bookshelf が、ほぼ同じ
845デフォルトの名無しさん
2018/03/16(金) 23:24:51.12ID:3NuYtiCt 掌田津耶乃ってダメな本じゃなかったか?
846844
2018/03/17(土) 00:05:48.37ID:nxO/ldT7 プログラミング本では、掌田が第一人者。
Unity, UE4 などのゲームエンジンから、最近は、Python, Node.js にも進出
売れる・成長する分野には、必ず掌田が参入してくる。
業界の風見鶏
「Node.js超入門、掌田津耶乃、2017」
この本で、Sinatra, Rails を学ぶ方が簡単。
20時間ほどで読める
後は、YouTube の動画で、OK
Unity, UE4 などのゲームエンジンから、最近は、Python, Node.js にも進出
売れる・成長する分野には、必ず掌田が参入してくる。
業界の風見鶏
「Node.js超入門、掌田津耶乃、2017」
この本で、Sinatra, Rails を学ぶ方が簡単。
20時間ほどで読める
後は、YouTube の動画で、OK
847デフォルトの名無しさん
2018/03/17(土) 00:10:02.58ID:6ii9LbbD やっぱ掌田津耶乃ってだめな人だった
調べたらわかったよ
調べたらわかったよ
848デフォルトの名無しさん
2018/03/17(土) 00:34:45.99ID:4Xu/HAYS 今の時代、開発速度が速すぎて誰も良い本なんか書けないよ
それを書き終わる頃には時代遅れになってるんだから
それを書き終わる頃には時代遅れになってるんだから
849デフォルトの名無しさん
2018/03/17(土) 00:38:04.22ID:6ii9LbbD いや掌田がとりわけレベル低いだけ
850デフォルトの名無しさん
2018/03/17(土) 01:55:30.84ID:+wQGtQt+ 掌田津耶乃はだめな本
山田 祥寛は良い本
という評価が一般的
掌田津耶乃は何冊か読んでいるけど、
見比べてみるとたしかにダメダメなんだなぁ。
山田 祥寛は良い本
という評価が一般的
掌田津耶乃は何冊か読んでいるけど、
見比べてみるとたしかにダメダメなんだなぁ。
851デフォルトの名無しさん
2018/03/17(土) 02:08:55.36ID:6ii9LbbD 山田 祥寛もダメだろ
852デフォルトの名無しさん
2018/03/17(土) 05:35:09.75ID:77P/HBnW 掌田津耶乃はHyoerTalkなまりのコード
853デフォルトの名無しさん
2018/03/17(土) 09:18:19.49ID:nxO/ldT7 最近は、Python にも、なでしこの作者・クジラ飛行机、
大津真、掌田も、乗り込んできた
この辺は、売れ筋には参入してくる著者
中でも掌田は、ゲームエンジン・言語・Javaのフレームワーク・Node.js など万能
大津真、掌田も、乗り込んできた
この辺は、売れ筋には参入してくる著者
中でも掌田は、ゲームエンジン・言語・Javaのフレームワーク・Node.js など万能
854デフォルトの名無しさん
2018/03/17(土) 12:59:20.73ID:OC0Ef+g3 またあらぶっとるんか糞荒らし
はやくRubyコミュで発言しろよ屑
はやくRubyコミュで発言しろよ屑
855デフォルトの名無しさん
2018/03/17(土) 14:32:15.41ID:+wQGtQt+ 要はね
掌田の出版本を見てみるとわかるが、
初心者を食い物にしている
初心者専用の作者なわけよ、
だからレビューとかで
表面だけかじって書いたかのような本とか
書かれちゃうわけよ。
深く知りもしないであれだけの数の本を書けるわけないよね。
だから掌田はおすすめできないんだわ。
初心者にはいいかもしれないよ?
初心者向けの本ばかり何冊も何年も書き続けているから。
掌田の出版本を見てみるとわかるが、
初心者を食い物にしている
初心者専用の作者なわけよ、
だからレビューとかで
表面だけかじって書いたかのような本とか
書かれちゃうわけよ。
深く知りもしないであれだけの数の本を書けるわけないよね。
だから掌田はおすすめできないんだわ。
初心者にはいいかもしれないよ?
初心者向けの本ばかり何冊も何年も書き続けているから。
856デフォルトの名無しさん
2018/03/17(土) 15:47:30.97ID:uAf5LbgY 商売としては全然アリだね
とっかかりが欲しい初心者いるだろうし
とっかかりが欲しい初心者いるだろうし
857デフォルトの名無しさん
2018/03/17(土) 16:43:12.02ID:cWw1OMJa >>855
ほんそれ
ほんそれ
858844
2018/03/17(土) 19:43:45.96ID:nxO/ldT7 デザインもカラフルで、図解してあるから、すごくわかりやすい。
売れるから、こういう外注予算が大きい
オライリーでは、図解・デザインは無いから、読むのに時間が掛かる。
図解は視覚だから、瞬時に理解できるけど、
言葉の説明だと、それを図に置き換えて、考えないといけないから大変
掌田の本は、ものすごく短時間で理解できるから、効率的。
すごく消化・吸収に良いし、
時間も節約できるから、時給換算すれば大得
漏れには、時間が掛かる・細かい・理解できない、100の知識はいらない。
短時間で、よくわかる、50の基礎知識がさえ有ればよい。
あとは動画を見て、応用するから
「Node.js超入門、掌田津耶乃、2017」
この本で、Sinatra, Rails が分かる
「10日でおぼえる jQuery 入門教室 第2版、山田祥寛(よしひろ)、2013」
この本で、Nokogiri が分かるのと同じ
本が出ていない場合とか、難しい本しかない場合に、非常に役に立つし、速い
売れるから、こういう外注予算が大きい
オライリーでは、図解・デザインは無いから、読むのに時間が掛かる。
図解は視覚だから、瞬時に理解できるけど、
言葉の説明だと、それを図に置き換えて、考えないといけないから大変
掌田の本は、ものすごく短時間で理解できるから、効率的。
すごく消化・吸収に良いし、
時間も節約できるから、時給換算すれば大得
漏れには、時間が掛かる・細かい・理解できない、100の知識はいらない。
短時間で、よくわかる、50の基礎知識がさえ有ればよい。
あとは動画を見て、応用するから
「Node.js超入門、掌田津耶乃、2017」
この本で、Sinatra, Rails が分かる
「10日でおぼえる jQuery 入門教室 第2版、山田祥寛(よしひろ)、2013」
この本で、Nokogiri が分かるのと同じ
本が出ていない場合とか、難しい本しかない場合に、非常に役に立つし、速い
859デフォルトの名無しさん
2018/03/18(日) 09:45:02.22ID:JzaiKxSG860デフォルトの名無しさん
2018/03/18(日) 12:36:10.41ID:Gg1K6bSi >>859
頭使ってる?
掌田津耶乃が何冊初心者用の本を出しているか知っている?
ちょっと考えれば、
英語、ドイツ語、フランス語の言語学習の本を書いたとしたら
その言語のことをどこまで知っていて本を書いているんだろうとか気にならないの?
もし気にならないんだったら、表面的な知識だけで満足しているお前とは合わないのでバイバイ ノシ
Amazon.co.jp: 掌田 津耶乃:作品一覧、著者略歴
https://www.amazon.co.jp/%E6%8E%8C%E7%94%B0-%E6%B4%A5%E8%80%B6%E4%B9%83/e/B004L5AED8/ref=sr_tc_2_0?qid=1521344021&sr=8-2-ent
掌田津耶乃(しょうだつやの)。ほぼ男性。テクニカルライター兼3流プログラマ。
自分でも3流プログラマと認めているのに、まったく信者って奴は・・・
頭使ってる?
掌田津耶乃が何冊初心者用の本を出しているか知っている?
ちょっと考えれば、
英語、ドイツ語、フランス語の言語学習の本を書いたとしたら
その言語のことをどこまで知っていて本を書いているんだろうとか気にならないの?
もし気にならないんだったら、表面的な知識だけで満足しているお前とは合わないのでバイバイ ノシ
Amazon.co.jp: 掌田 津耶乃:作品一覧、著者略歴
https://www.amazon.co.jp/%E6%8E%8C%E7%94%B0-%E6%B4%A5%E8%80%B6%E4%B9%83/e/B004L5AED8/ref=sr_tc_2_0?qid=1521344021&sr=8-2-ent
掌田津耶乃(しょうだつやの)。ほぼ男性。テクニカルライター兼3流プログラマ。
自分でも3流プログラマと認めているのに、まったく信者って奴は・・・
861デフォルトの名無しさん
2018/03/18(日) 12:52:44.19ID:QAeUSVF3862デフォルトの名無しさん
2018/03/18(日) 12:55:57.40ID:QAeUSVF3 基本的に流行ってるものを、ざっと調べてまとめただけなんだろうな
だから初心者レベルのところまでしか書けない
概要を知るところまでで、あれを参考にしてコードを書いてはいけない
だから初心者レベルのところまでしか書けない
概要を知るところまでで、あれを参考にしてコードを書いてはいけない
863デフォルトの名無しさん
2018/03/18(日) 16:36:38.11ID:Aq9RvNC1 HypaerCardの本も出してたから もう30年以上初心者向けの本出してるベテラン
864デフォルトの名無しさん
2018/03/18(日) 19:04:35.10ID:Pu83I0V3 Amazonのレビューでよく思うけど、海外の人は褒めるのが上手。いい面を見てる
日本人は100点じゃなきゃ糞みたいな心の狭い人が多い
初心者向けの本なんかにケチつけなくてもいいだろうに
今は公式サイトのドキュメントが充実してる時代なんだから、ほぼ公式くらいのことしか書かんだろうよ
日本人は100点じゃなきゃ糞みたいな心の狭い人が多い
初心者向けの本なんかにケチつけなくてもいいだろうに
今は公式サイトのドキュメントが充実してる時代なんだから、ほぼ公式くらいのことしか書かんだろうよ
865デフォルトの名無しさん
2018/03/18(日) 19:43:48.34ID:Gg1K6bSi そうだな、ネイティブと喋れない、英検準2級、TOEIC500点ぐらいの人が教えているって感じ。
そんなイメージが掌田津耶乃さん。
そんなイメージが掌田津耶乃さん。
866デフォルトの名無しさん
2018/03/18(日) 20:16:15.41ID:i3culXas867デフォルトの名無しさん
2018/03/18(日) 21:55:23.04ID:JzaiKxSG >>860
いや長文必死にならなくても、お前さんが自分で解説するだけの知力すら無いってのは分かったから。
いや長文必死にならなくても、お前さんが自分で解説するだけの知力すら無いってのは分かったから。
868デフォルトの名無しさん
2018/03/18(日) 21:59:08.72ID:QAeUSVF3 なんで作者本人が自分で三流ですって言ってるのに、
他人が三流であると解説する必要があるんだ?
他人が三流であると解説する必要があるんだ?
869デフォルトの名無しさん
2018/03/18(日) 23:16:11.58ID:Gg1K6bSi >>867
自己紹介乙
自己紹介乙
870デフォルトの名無しさん
2018/03/18(日) 23:24:43.53ID:JFJ3EKTR Java, Ruby のフレームワークを書ける人は、少ない。
山田祥寛(よしひろ)、掌田津耶乃、宮本信二、黒田努など
山田は会社向けの、1日4万円の講座などを開いている
一方、掌田は初心者向け。
Unity, UE4 などのゲームエンジン、
Python などの売れ筋言語、
Spring などのJavaのフレームワーク、
Node.js + Express などのJavaScript のフレームワークなど、万能
山田は会社員、掌田は初心者と、ターゲットが異なる。
もし、同じターゲットなら、両雄並び立たずで、共倒れするから
山田祥寛(よしひろ)、掌田津耶乃、宮本信二、黒田努など
山田は会社向けの、1日4万円の講座などを開いている
一方、掌田は初心者向け。
Unity, UE4 などのゲームエンジン、
Python などの売れ筋言語、
Spring などのJavaのフレームワーク、
Node.js + Express などのJavaScript のフレームワークなど、万能
山田は会社員、掌田は初心者と、ターゲットが異なる。
もし、同じターゲットなら、両雄並び立たずで、共倒れするから
871デフォルトの名無しさん
2018/03/18(日) 23:54:42.62ID:3ZuC3w8U 自演注意
自演注意
自演注意
自演注意
自演注意
872デフォルトの名無しさん
2018/03/19(月) 04:32:11.24ID:csFbH6Mx File.open('test.txt', 'r+') do |io|
text = io.read
io.rewind
io.write 'あ'
p io.pos #=> 3
io.truncate io.pos
end
読み書き両用ファイルの、ファイルサイズを減らして、上書きできた
io.rewind で、ファイルポインタを先頭に巻き戻す。
io.truncate io.pos で、現在のファイルポインタの位置で、ファイルを切り詰める
text = io.read
io.rewind
io.write 'あ'
p io.pos #=> 3
io.truncate io.pos
end
読み書き両用ファイルの、ファイルサイズを減らして、上書きできた
io.rewind で、ファイルポインタを先頭に巻き戻す。
io.truncate io.pos で、現在のファイルポインタの位置で、ファイルを切り詰める
873デフォルトの名無しさん
2018/03/20(火) 23:14:51.84ID:QfE06Qcj >>869
反論すら出来ない奴は、つまらんね。
反論すら出来ない奴は、つまらんね。
874デフォルトの名無しさん
2018/03/21(水) 00:56:42.17ID:p8DsWgGG 変なこと聞くけどさ、rspecでさ、まあ適当にサンプル書くけど
describe "hoge do
before do
・・・
end
context do
let(:a) { 1 }
・・・
it 'hage' do
expect(a).to be 1
end
end
end
コレに限った話じゃなくて、rspecの使い方で内側のブロック(例えばitの中)から
外側のブロック(例えばcontextの中)の状態(例えば変数)を
書き換えるのを禁止にしても何の問題もないよね?もちろん参照するのはOK。
テストはどう有るべきかを考えたら、むしろそうした方が良いぐらいじゃないかって思うんだけどどうかな?
describe "hoge do
before do
・・・
end
context do
let(:a) { 1 }
・・・
it 'hage' do
expect(a).to be 1
end
end
end
コレに限った話じゃなくて、rspecの使い方で内側のブロック(例えばitの中)から
外側のブロック(例えばcontextの中)の状態(例えば変数)を
書き換えるのを禁止にしても何の問題もないよね?もちろん参照するのはOK。
テストはどう有るべきかを考えたら、むしろそうした方が良いぐらいじゃないかって思うんだけどどうかな?
875デフォルトの名無しさん
2018/03/21(水) 01:22:34.72ID:qUqb4QSc ネストしたcontextで
内側のcontextが外側のcontextで設定した状態を
書き換えるような形でテストを書いても別にいいと思うけどな
内側のcontextが外側のcontextで設定した状態を
書き換えるような形でテストを書いても別にいいと思うけどな
876デフォルトの名無しさん
2018/03/21(水) 01:57:04.18ID:p8DsWgGG >>875
でもそうするとテストケース一つとか実行した時におかしくならない?
でもそうするとテストケース一つとか実行した時におかしくならない?
877デフォルトの名無しさん
2018/03/21(水) 04:11:05.87ID:rJLoGwxo >>873
自己紹介乙
自己紹介乙
878デフォルトの名無しさん
2018/03/21(水) 07:02:14.53ID:wxFTzoek 外部への依存が少なければ、個々のテストの独立性が高いから、
バグが減るし、テストを並行実行できる
それが理想だけど、実現するのは難しそう
バグが減るし、テストを並行実行できる
それが理想だけど、実現するのは難しそう
879デフォルトの名無しさん
2018/03/21(水) 16:09:18.41ID:qUqb4QSc880デフォルトの名無しさん
2018/03/21(水) 16:22:28.39ID:p8DsWgGG881デフォルトの名無しさん
2018/03/21(水) 16:24:44.94ID:qUqb4QSc882デフォルトの名無しさん
2018/03/21(水) 16:47:19.64ID:p8DsWgGG >>881
内側のブロックで外側のブロックの変数に値を入れた場合だよ
内側のブロックで外側のブロックの変数に値を入れた場合だよ
883デフォルトの名無しさん
2018/03/30(金) 15:22:33.47ID:87KFZNYL Chrome 65 になったら、selenium webdriver が動かなくなったので、
chrome driver 2.37 を、ダウンロードしてみた
これで動くかどうかは、まだ試してないけど
chrome driver 2.37 を、ダウンロードしてみた
これで動くかどうかは、まだ試してないけど
884883
2018/03/30(金) 20:31:06.53ID:87KFZNYL 新しいバージョンの、chrome driver にしたら動いた
885デフォルトの名無しさん
2018/04/01(日) 16:44:40.27ID:0KaYXtgi すみません、質問があります。
他人様の書いたコードを読んで写経しながら勉強していた所、
begin
#何らかの処理A(特に例外を出しそうな処理ではない)
end until hoge
という記述があったのですが、この書式の意味というか意図がいまいちつかめなくて困っています。
自分でコードを書いて試してみた所、この記述はhogeがtrueでもfalseでも処理Aを実行しており、
特に「until hoge」の部分で何を制御したいのかがわかりません。
(begin
#処理
end) until hoge
例えば、↑の書き方だと単純なuntil文の後置修飾になるので意味がわかるのですが、
上述のような書式で書く理由や、こう書くとどういうメリットがあるかを教えていただけますと嬉しいです。
よろしくお願いいたします。
他人様の書いたコードを読んで写経しながら勉強していた所、
begin
#何らかの処理A(特に例外を出しそうな処理ではない)
end until hoge
という記述があったのですが、この書式の意味というか意図がいまいちつかめなくて困っています。
自分でコードを書いて試してみた所、この記述はhogeがtrueでもfalseでも処理Aを実行しており、
特に「until hoge」の部分で何を制御したいのかがわかりません。
(begin
#処理
end) until hoge
例えば、↑の書き方だと単純なuntil文の後置修飾になるので意味がわかるのですが、
上述のような書式で書く理由や、こう書くとどういうメリットがあるかを教えていただけますと嬉しいです。
よろしくお願いいたします。
886デフォルトの名無しさん
2018/04/01(日) 16:51:30.58ID:1KgD14Zs (と)の二文字省略できる
887デフォルトの名無しさん
2018/04/01(日) 17:15:27.40ID:9myXjpPz >>885
下のAとBは同じことをするんだけど、Aだと1行目と4行目が同じでもやっとするのでBのように書いているのでは
個人的にはbegin〜endをメソッドにしてこうは書かないけど
begin〜end untilのほかにもbegin〜end whileも同様
# A
i = Time.now.sec
until i % 3 == 0
p i
i = Time.now.sec
end
# B
begin
i = Time.now.sec
p i
end until i % 3 == 0
下のAとBは同じことをするんだけど、Aだと1行目と4行目が同じでもやっとするのでBのように書いているのでは
個人的にはbegin〜endをメソッドにしてこうは書かないけど
begin〜end untilのほかにもbegin〜end whileも同様
# A
i = Time.now.sec
until i % 3 == 0
p i
i = Time.now.sec
end
# B
begin
i = Time.now.sec
p i
end until i % 3 == 0
888デフォルトの名無しさん
2018/04/01(日) 17:18:46.83ID:9myXjpPz 訂正
# A
i = Time.now.sec
p i
until i % 3 == 0
i = Time.now.sec
p i
end
# B
begin
i = Time.now.sec
p i
end until i % 3 == 0
# A
i = Time.now.sec
p i
until i % 3 == 0
i = Time.now.sec
p i
end
# B
begin
i = Time.now.sec
p i
end until i % 3 == 0
889デフォルトの名無しさん
2018/04/01(日) 17:32:20.95ID:0KaYXtgi >>887-888
ご回答頂きどうもありがとうございます。
なるほど、この書式だとbegin~end内の処理が1回は必ず実行されて、
その後に条件文で判定されるようになるので、同じ処理(例だと代入処理)を2度書かなくて済むようになるんですね。
とても勉強になりました。
個人的にはコード行数が増えたり同じ処理が連続するよりも、
ひと目で意図する処理が他人に伝わらないのはちょっと嫌なのでこの書き方は真似しないようにします……。
ご回答頂きどうもありがとうございます。
なるほど、この書式だとbegin~end内の処理が1回は必ず実行されて、
その後に条件文で判定されるようになるので、同じ処理(例だと代入処理)を2度書かなくて済むようになるんですね。
とても勉強になりました。
個人的にはコード行数が増えたり同じ処理が連続するよりも、
ひと目で意図する処理が他人に伝わらないのはちょっと嫌なのでこの書き方は真似しないようにします……。
890デフォルトの名無しさん
2018/04/01(日) 17:40:44.12ID:KXX7rc47 いや、それはおかしい。
リトライやリドゥーみたいな処理で、必要であれば、ためらわずそう書くべき。多少わかりにくくても。
いずれ慣れるから。
なんなら、先頭にコメントをつけとけば。
リトライやリドゥーみたいな処理で、必要であれば、ためらわずそう書くべき。多少わかりにくくても。
いずれ慣れるから。
なんなら、先頭にコメントをつけとけば。
891デフォルトの名無しさん
2018/04/01(日) 17:57:12.31ID://EuH1G7 絶対的なルールではないけどこんなものもあるんで参考までに
ruby-style-guide
>後判定ループの場合、begin/end/untilやbegin/end/whileより、
>break付きのKernel#loopを使いましょう。
https://github.com/fortissimo1997/ruby-style-guide/blob/japanese/README.ja.md#user-content-loop-with-break
ruby-style-guide
>後判定ループの場合、begin/end/untilやbegin/end/whileより、
>break付きのKernel#loopを使いましょう。
https://github.com/fortissimo1997/ruby-style-guide/blob/japanese/README.ja.md#user-content-loop-with-break
892デフォルトの名無しさん
2018/04/01(日) 18:00:28.18ID:ZcGM330i (なにかしら).method
do
なにかしら
end メソッド
みたいなもんだからRuby規則に沿っているだろ
do
なにかしら
end メソッド
みたいなもんだからRuby規則に沿っているだろ
893デフォルトの名無しさん
2018/04/01(日) 18:17:17.82ID:A31P7FUz >>891
後判定ループを行うのにbegin-end-while/untilが好ましくない理由を俺に教えて欲しい
後判定ループを行うのにbegin-end-while/untilが好ましくない理由を俺に教えて欲しい
894デフォルトの名無しさん
2018/04/01(日) 18:21:45.55ID:hwmab9Mq895デフォルトの名無しさん
2018/04/01(日) 18:27:29.70ID:Aa3HndXz 英語的な自然さを求めるなら、loopをendのエイリアスということにして loop while/until かな
VBがそんな感じだったはず
まあジャップ製言語だから仕方ないね
VBがそんな感じだったはず
まあジャップ製言語だから仕方ないね
896デフォルトの名無しさん
2018/04/01(日) 18:31:46.49ID://EuH1G7 >>893
beginの中が長いと上から読んでてループするんだかrescueするんだかわかりにくいからじゃない?
ruby-style-guideはコメントを極力書かないで済むようにするのが目的の一つだから
まあ個人的には首肯しかねるルールもいくつかあるけどね
beginの中が長いと上から読んでてループするんだかrescueするんだかわかりにくいからじゃない?
ruby-style-guideはコメントを極力書かないで済むようにするのが目的の一つだから
まあ個人的には首肯しかねるルールもいくつかあるけどね
897デフォルトの名無しさん
2018/04/01(日) 18:43:23.68ID:hwmab9Mq898デフォルトの名無しさん
2018/04/01(日) 21:03:13.03ID:A31P7FUz899デフォルトの名無しさん
2018/04/02(月) 12:57:38.84ID:g/2XFKpH ブロッキング条件なら後に来るの自然に感じる
長過ぎるとってのはどんなブロックでも同じ
長過ぎるとってのはどんなブロックでも同じ
900デフォルトの名無しさん
2018/04/02(月) 13:03:59.66ID:KugB3K+A SV
これは第一文型なんだから
文章.method
SをVするで普通の英語じゃん?
これは第一文型なんだから
文章.method
SをVするで普通の英語じゃん?
901デフォルトの名無しさん
2018/04/02(月) 13:11:22.76ID:6hj+x7xd おいおい…
「を」は対格を作る格助詞だぞ。
記号で書くとV(=verb=動詞)O(=object=目的語)だ。
SVは
S(=subject=主語)V(=verb=動詞)で、
S「が」Vする、だ。
「を」は対格を作る格助詞だぞ。
記号で書くとV(=verb=動詞)O(=object=目的語)だ。
SVは
S(=subject=主語)V(=verb=動詞)で、
S「が」Vする、だ。
902デフォルトの名無しさん
2018/04/02(月) 13:22:58.60ID:g/2XFKpH 自然言語なんて例外だらけなんだからどうでもいい
903デフォルトの名無しさん
2018/04/02(月) 13:41:31.43ID:eDlvSPE1 sendを使う度にモヤモヤした気持ちになる
904デフォルトの名無しさん
2018/04/02(月) 14:10:59.70ID:HZoT/r0A905デフォルトの名無しさん
2018/04/02(月) 18:13:06.38ID:TBzY9DYT そりゃそもそもend書かせる主流言語が少ないし
906デフォルトの名無しさん
2018/04/03(火) 03:47:06.97ID:hZewAlsv907デフォルトの名無しさん
2018/04/03(火) 04:10:23.05ID:8HWTUUN8 Donot
Repeat
Yourself
Repeat
Yourself
908デフォルトの名無しさん
2018/04/03(火) 23:32:43.51ID:q2DveEBR Do
Repaet
Yourself
Repaet
Yourself
909デフォルトの名無しさん
2018/04/04(水) 02:02:25.22ID:h2UR4/YM Reuse
Reduce
Recycle
Ruby
Reduce
Recycle
Ruby
910デフォルトの名無しさん
2018/04/05(木) 14:25:03.13ID:eFdDptlj selenium-webdriver で、Chrome のHeadless mode で、
5ch の投稿者名・書き込み内容を、抜き出してみた
driver.navigate.to "https://mao.5ch.net/test/read.cgi/linux/1479499953/8-9"
elements = driver.find_elements(:css, 'div[data-id]')
elements.each do |elem|
str = elem.attribute('data-id') + ' 投稿者 :'
# CSS では、コンテキストの直下を表現できないので、xpath を使う
# str += elem.find_element(:css, '> div.meta > span.name').text
str += elem.find_element(:xpath => "div[@class='meta']/span[@class='name']").text
puts str
str = '内容 :'
str += elem.find_element(:xpath => "div[@class='message']/span").text
puts str
end
5ch の投稿者名・書き込み内容を、抜き出してみた
driver.navigate.to "https://mao.5ch.net/test/read.cgi/linux/1479499953/8-9"
elements = driver.find_elements(:css, 'div[data-id]')
elements.each do |elem|
str = elem.attribute('data-id') + ' 投稿者 :'
# CSS では、コンテキストの直下を表現できないので、xpath を使う
# str += elem.find_element(:css, '> div.meta > span.name').text
str += elem.find_element(:xpath => "div[@class='meta']/span[@class='name']").text
puts str
str = '内容 :'
str += elem.find_element(:xpath => "div[@class='message']/span").text
puts str
end
911デフォルトの名無しさん
2018/04/07(土) 05:31:34.17ID:Cc4pa2fK 三ヶ月在れば一つのプログラム言語を習得しアプリケーションを作ることが出来るw
https://mevius.5ch.net/test/read.cgi/win/1504394535/9
おいらは習作はしない、他愛ないことはやらないのだ
https://mevius.5ch.net/test/read.cgi/win/1503735829/881-883
C#なんてのはVZの開発環境にないwww
https://mevius.5ch.net/test/read.cgi/win/1520923324/913
ワロタ、ワロタ
https://echo.5ch.net/test/read.cgi/win/1467974448/129-132
https://mevius.5ch.net/test/read.cgi/win/1504394535/9
おいらは習作はしない、他愛ないことはやらないのだ
https://mevius.5ch.net/test/read.cgi/win/1503735829/881-883
C#なんてのはVZの開発環境にないwww
https://mevius.5ch.net/test/read.cgi/win/1520923324/913
ワロタ、ワロタ
https://echo.5ch.net/test/read.cgi/win/1467974448/129-132
912デフォルトの名無しさん
2018/04/08(日) 14:20:42.12ID:JYaIVkeP 10年以上前に学校でスクリプト言語を勉強してたときはPHPが流行ってて
Perlもあったけど少し古いかなって感じ。ただとにかくJAVAが騒がれててJSP+tomcatなんかもやったな。
Rubyはあったけどそんなに話題にならず。
で最近、またスクライピングがやりたくて色々調べたら
もうPHPも下火?でRubyとpythonとかいう言語が主流みたいですね。
Perlもあったけど少し古いかなって感じ。ただとにかくJAVAが騒がれててJSP+tomcatなんかもやったな。
Rubyはあったけどそんなに話題にならず。
で最近、またスクライピングがやりたくて色々調べたら
もうPHPも下火?でRubyとpythonとかいう言語が主流みたいですね。
913デフォルトの名無しさん
2018/04/08(日) 15:16:13.15ID:nkM5b3tX Rubyは主流じゃない
914デフォルトの名無しさん
2018/04/08(日) 16:26:08.93ID:ikNNlzZg PHPが下火でRubyが主流がねーわ。
人気を捏造しないと好きな言語も恥ずかしくて使えないのか軟弱者め。
たとえ世界の全てが使わなくても自分だけはRubyを使い続けるという気概を持てよ情けない奴
人気を捏造しないと好きな言語も恥ずかしくて使えないのか軟弱者め。
たとえ世界の全てが使わなくても自分だけはRubyを使い続けるという気概を持てよ情けない奴
915デフォルトの名無しさん
2018/04/08(日) 17:41:41.41ID:mE+8rAwy 2ch/5chでは、日本人が作ったというだけで、だめ扱いする書き込みがあるから
注意すべし。どこかぞの国から書き込まれている事がある。
注意すべし。どこかぞの国から書き込まれている事がある。
916デフォルトの名無しさん
2018/04/09(月) 11:49:58.15ID:M/BmQ9Z1 以下の半角空白区切りの行から、稼働時間を求めるには、どうやるの?
夜、24:00 以上の数字もあります
2018/09/09 09:45-24:00
2018/10/10 23:00-27:15
夜、24:00 以上の数字もあります
2018/09/09 09:45-24:00
2018/10/10 23:00-27:15
917デフォルトの名無しさん
2018/04/09(月) 12:21:03.03ID:2h6IFanV >>916
date = "2018/09/09 09:45-24:00"
m = date.match(/(\d\d):(\d\d)-(\d\d):(\d\d)/)[1, 4].map(&:to_i)
min = (m[2] - m[0])*60 + m[3] - m[1]
p "%d:%d" % min.divmod(60) # => "14:15"
date = "2018/09/09 09:45-24:00"
m = date.match(/(\d\d):(\d\d)-(\d\d):(\d\d)/)[1, 4].map(&:to_i)
min = (m[2] - m[0])*60 + m[3] - m[1]
p "%d:%d" % min.divmod(60) # => "14:15"
918916
2018/04/09(月) 13:15:44.73ID:M/BmQ9Z1 ありがとう
Date, DateTime, Time などの形で、引算で求められませんか?
Date, DateTime, Time などの形で、引算で求められませんか?
919デフォルトの名無しさん
2018/04/09(月) 13:42:09.51ID:2h6IFanV date = "2018/09/09 09:45-24:00"
m = date.match(%r!\A(?<year>\d{4})/(?<month>\d\d)/(?<day>\d\d) (?<begh>\d\d):(?<begm>\d\d)-(?<finh>\d\d):(?<finm>\d\d)\z!)
beg = Time.new(m[:year], m[:month], m[:day], m[:begh], m[:begm])
fin = Time.new(m[:year], m[:month], m[:day], m[:finh], m[:finm])
min = (fin - beg)/60
p "%d:%d" % min.divmod(60) # => "14:15"
m = date.match(%r!\A(?<year>\d{4})/(?<month>\d\d)/(?<day>\d\d) (?<begh>\d\d):(?<begm>\d\d)-(?<finh>\d\d):(?<finm>\d\d)\z!)
beg = Time.new(m[:year], m[:month], m[:day], m[:begh], m[:begm])
fin = Time.new(m[:year], m[:month], m[:day], m[:finh], m[:finm])
min = (fin - beg)/60
p "%d:%d" % min.divmod(60) # => "14:15"
920916
2018/04/09(月) 14:17:26.06ID:M/BmQ9Z1 ありがとう
24:00 では、Time インスタンスを作れるけど、
27:15 では、エラーで作れなかった
回避策を考えてみます
24:00 では、Time インスタンスを作れるけど、
27:15 では、エラーで作れなかった
回避策を考えてみます
921デフォルトの名無しさん
2018/04/09(月) 14:23:48.18ID:GdkyYm9A pythonスレにマルチするのやめれ
922デフォルトの名無しさん
2018/04/09(月) 14:39:12.15ID:2h6IFanV >>920
date = [
"2018/09/09 09:45-24:00",
"2018/10/10 23:00-27:15"
]
begfin = lambda do |m|
d = Time.new(m[:year], m[:month], m[:day])
[[m[:begh], m[:begm]], [m[:finh], m[:finm]]].map { |hour, min|
3600 * hour.to_i + 60 * min.to_i
}
end
date.each do |d|
m = d.match(%r!\A(?<year>\d{4})/(?<month>\d\d)/(?<day>\d\d) (?<begh>\d\d):(?<begm>\d\d)-(?<finh>\d\d):(?<finm>\d\d)\z!)
beg, fin = begfin[m]
min = (fin - beg)/60
puts "%d:%d" % min.divmod(60) # => "14:15"
end
# =>
14:15
4:15
ってマルチかい
date = [
"2018/09/09 09:45-24:00",
"2018/10/10 23:00-27:15"
]
begfin = lambda do |m|
d = Time.new(m[:year], m[:month], m[:day])
[[m[:begh], m[:begm]], [m[:finh], m[:finm]]].map { |hour, min|
3600 * hour.to_i + 60 * min.to_i
}
end
date.each do |d|
m = d.match(%r!\A(?<year>\d{4})/(?<month>\d\d)/(?<day>\d\d) (?<begh>\d\d):(?<begm>\d\d)-(?<finh>\d\d):(?<finm>\d\d)\z!)
beg, fin = begfin[m]
min = (fin - beg)/60
puts "%d:%d" % min.divmod(60) # => "14:15"
end
# =>
14:15
4:15
ってマルチかい
923916
2018/04/09(月) 15:24:13.18ID:M/BmQ9Z1 python スレの書き込みとは別人。
ID も異なるはず
その書き込みを見て、Ruby ではどうプログラミングするべきか、考えてみたが難しかった
ID も異なるはず
その書き込みを見て、Ruby ではどうプログラミングするべきか、考えてみたが難しかった
924デフォルトの名無しさん
2018/04/09(月) 15:46:38.36ID:aj6Oy7j8925916
2018/04/09(月) 16:17:52.99ID:M/BmQ9Z1 d = Time.new(m[:year], m[:month], m[:day])
d_next = d + 60 * 60 * 24
24時以上の場合は、hour から24を引いて、1日足すけど、これはややこしい
d_next = d + 60 * 60 * 24
24時以上の場合は、hour から24を引いて、1日足すけど、これはややこしい
レス数が900を超えています。1000を超えると表示できなくなるよ。
ニュース
- 外務省局長は無言で厳しい表情…日中の高官協議終了か 高市首相“台湾”発言で中国が強硬対応 発言撤回求めたか… [BFU★]
- 中国国営メディア「沖縄は日本ではない」… ★6 [BFU★]
- 政府、株式の配当など金融所得を高齢者の医療保険料や窓口負担に反映する方針を固めた [バイト歴50年★]
- 中国国営メディア「沖縄は日本ではない」…★7 [BFU★]
- バービー、 台湾有事の発言の波紋で「たまったもんじゃない」「高市さんに真意は聞きたい」「国民に向けて説明してほしい」 [muffin★]
- ナイツ塙が指摘のローソンコーヒーカップ、ロゴ「L」で誤解生みデザイン変更へ 在庫使い切る3か月後にリニューアル [muffin★]
- 日本政府「高市総理の発言は問題ないと伝え、中国総領事のSNS投稿は問題があると中国に伝えました😊」 [931948549]
- 高市早苗、岸田政権(当時)に「台湾有事は日本の有事か」という質問をしていた [175344491]
- 【悲報】高市早苗周辺「支持層が離れるので今更発言を撤回できない」 [935793931]
- 青椒肉絲、牛肉ではなく豚肉を使うのが本物だった
- 【悲報】中国→日本行きの航空チケット、高市有事の影響で50万人分がキャンセルされる [834922174]
- んなっしょい🍬禁止🈲のお🏡
