Ruby 初心者スレッド Part 63

1デフォルトの名無しさん2018/04/17(火) 17:46:57.87ID:GYuBFjQi
プログラミング言語Rubyについての、初心者向けスレです。質問・要望・雑談などどうぞ。
質問するときは、OSやRubyのバージョン、エラーメッセージを書いたほうがいいお
Ruby on RailsについてはWEBプログラミング板で

前スレ
Ruby 初心者スレッド Part 62
https://mevius.5ch.net/test/read.cgi/tech/1511451329/

るりまサーチ (リファレンス検索)
http://rurema.clear-code.com/

Rubyist Magazine - るびま
http://jp.rubyist.net/magazine/

逆引きRuby
http://www.namaraii.com/rubytips/

169デフォルトの名無しさん2018/06/16(土) 17:46:35.84ID:l74jUjtd
>>164
> C#は、C++から発展し、Javaを反面教師とした印象。
C++から発展なんかしてないよ。

C++といえば、STL(テンプレート)の使用が必須で
メモリ管理はSTLで行う

この一番重要な所がC#はJavaと同じGCを使うために
プログラミングの仕方がぜんぜん違う

JavaとJavaScriptぐらい違う

170 ◆QZaw55cn4c 2018/06/16(土) 18:25:43.96ID:lIlHXhNK
>>164
>C#は、C++から発展し
そんなセールストークを信じちゃだめだよ…

171デフォルトの名無しさん2018/06/16(土) 18:53:35.43ID:yt3dscee
ここはひとつLISPで

172デフォルトの名無しさん2018/06/16(土) 19:40:57.55ID:RB9DVPKb
RubyとC#、最初に学ぶとしたらどっちよ

173デフォルトの名無しさん2018/06/16(土) 19:50:52.31ID:l74jUjtd
JavaScript

174デフォルトの名無しさん2018/06/16(土) 19:52:15.97ID:rAQA3aCK
>>172
どっちもかなり複雑な部類だから初学者にはオススメしないな
今ならPythonが初心者向けの情報多くて入りやすいと思う
C系へステップアップするつもりならRubyよりPythonの方がC系に近いしな

175デフォルトの名無しさん2018/06/16(土) 20:02:01.24ID:V0Z3yofC
>>153-155
Devkit 無しは、MSYS2/MINGW、GNU コンパイラが無いので、
ソースコードからコンパイルできないけど、サイズは2〜3GB 小さい

WebSocket, Rails, VSCode のデバッグ機能などは使えないけど、
Sinatra は使えるので、ツール作りには十分
(WebSocket のバイナリをネットで探したけど、見つからなかった)

ポータブル版なら、C:\Ruby24-x64
に置いて、ユーザー環境変数PATH に、C:\Ruby24-x64\bin
を追加すればよい

Windows のirb は、日本語がバグるので、
WSL Ubuntu にも、Ruby を入れて、そちらを使う

>>42
の、mirrorcommunications の動画も参照

176デフォルトの名無しさん2018/06/16(土) 20:09:17.23ID:V0Z3yofC
たのしいRuby 第5版、2016
みんなのPython 第4版、2017

先に、たのしいを読めば、みんなのも理解できる

C# は、先にこの本で、オブジェクト指向を学ぶ。
スッキリわかる Java入門 第2版、2014

無料のRails チュートリアルをやると、MVC, Ruby, JavaScript などが学べる。
その後、Python, Java, C# と進むのが、レベルに合ってる

Java, C#, Kotlin は静的言語だから、
動的言語よりもはるかに難しいから、後にすべき

177デフォルトの名無しさん2018/06/16(土) 20:11:07.95ID:0zxq2pxf
>>172
>>176の人はこの板の名物AIだから相手にしないように

178デフォルトの名無しさん2018/06/16(土) 20:25:13.10ID:ImW9Yk87
>>172
その二つは何から何まで異なる。
質問が単純すぎて、回答不能。

それでも答えるとするなら、どっちでも。
クジでもひけばいい。w

179デフォルトの名無しさん2018/06/16(土) 20:31:21.18ID:ImW9Yk87
>>169
GCを使う一点で、そんな主張をされても。
そうではないことを事前に明確にするために、オブジェクト参照ベースうんぬんと書いたのに。

180デフォルトの名無しさん2018/06/16(土) 20:38:12.74ID:ImW9Yk87
>>170
セールストークかもしれんが、真実でもあると思っている。
実情は、ObjectPascalからの発展だが、そうは言いにくいだろ。w

いずれにしても、Javaは反面教師どまり。

181 ◆QZaw55cn4c 2018/06/16(土) 20:42:57.89ID:lIlHXhNK
>>180
C++ が劇的に変わったのはテンプレート導入から、C++ のテンプレートは Java や C# の総称型とも違う
>>169 にも表出されているように、C++ は GC は自分で入れたいと思った人がインプリメントするものであって、言語の前提ではありえない

いいたかったことは、C# と Java の差なんて、C++ からみるとゴミのようなものだ

182デフォルトの名無しさん2018/06/16(土) 21:08:31.23ID:ImW9Yk87
>>181
あのな。
オレは、C#がJava系列というアホな表現にクレームしているのだ。

> C# と Java の差なんて、C++ からみるとゴミのようなものだ
あたりまえ。

183デフォルトの名無しさん2018/06/16(土) 21:23:01.58ID:+IGrD4aM
Ruby界においては、
主にSIに使われる言語=楽しくない言語=敵性言語
で人括りだから、JavaもC#も違いはないんだよ
実際にはWeb系でもバリバリ使われてるんだけどね

184 ◆QZaw55cn4c 2018/06/16(土) 21:32:45.22ID:lIlHXhNK
>>182
>C#がJava系列というアホな表現にクレームしている

なるほど
じゃあ、私は「C# は C++ から発展した」にクレームをつけましょうか、C# と C++ とは根っこの考え方からすっかり違いますね

185デフォルトの名無しさん2018/06/16(土) 22:00:40.71ID:JGo+xYn1
>>174
確かにその通りだと思う
C# といふ手続き型言語で対比するなら、
純粋手続き型スクリプト言語であるPython を学ぶべき

Ruby(あるいは JavaScrupt) なんて、関数型言語の Lisp をベースとして
手続き型の Perl 風の構文糖で包んだオタク言語でしかない:
 https://peace.5ch.net/test/read.cgi/tech/1409526637/857
 ・Lisp から Ruby への設計ステップ
  https://peace.5ch.net/test/read.cgi/tech/1409526637/857
 ・JavaScript: 世界で最も誤解されたプログラミング言語
  http://web.archive.org/web/20130120204931/http://d.hatena.ne.jp/brazil/20050829/1125321936

186デフォルトの名無しさん2018/06/16(土) 22:33:18.65ID:GZN3o+zY
>>185
Rubyのルーツは様々あるし、Matzも時々語ってるけど、どれがベースというのはないんじゃないかな
Eiffelという話もあるし、Perlを意識したというのもあるし、なんとも言えない
Lispからもいくらか拝借してるだろうけど、Lispとはちょっと似ても似つかない

187デフォルトの名無しさん2018/06/16(土) 22:37:33.00ID:f7QzGptj
>>158
Cが美しい
VBAがPythonよりマシ
って笑えるw

Lispとか関数型
知らないのがバレバレw

188デフォルトの名無しさん2018/06/16(土) 22:54:58.96ID:l74jUjtd
>>179
> GCを使う一点で、そんな主張をされても。

これによってぜんぜん違うものになるぞ
なぜならオブジェクトっていうのはすべからくメモリを使う。
だからメモリの確保と解放はプログラム全体に散りばめられる

Javaはメモリ(≒オブジェクト)を解放するコードが必要ないわけだが、
C++だと必要ないかもしれなし、必要あるかもしれない。
必要ある場合は、それに応じて解放の書き方が複数あるし、
必要ない場合は、また別のポインタの保持方法が多数存在する。

これによりプログラム全体が大きく違ってくる

189デフォルトの名無しさん2018/06/17(日) 00:15:29.21ID:EBtZFU3q
すべからく

190デフォルトの名無しさん2018/06/17(日) 00:29:17.70ID:wTKR8Tiz
おまえらはデバッグする時ってdebug.rbをつかってる?
それともprintデバッグで済ましてるの?

191デフォルトの名無しさん2018/06/17(日) 03:35:56.68ID:Gbap2Nj9
他言語の話で荒らしてる奴はdebug.rbとか知ってるの?

192デフォルトの名無しさん2018/06/17(日) 13:15:54.99ID:Li/MAiXm
byebug-pry がメインだな

193デフォルトの名無しさん2018/06/17(日) 15:07:18.29ID:NZRREY9d
JS のlodash の、メソッドチェーンを実現するには、
tap・chain などで、コンテナ内を走査できる

Ruby でも同じ。
enum.tap { |item| p item }

Windows では、irb を使うデバッガー・コンソールは、
日本語でバグるから、tap などで確かめるか、

WSL Ubuntu の方で、irb などを使う

194デフォルトの名無しさん2018/06/17(日) 15:23:16.00ID:wTKR8Tiz
それ、pデバッグ

195デフォルトの名無しさん2018/06/17(日) 16:33:06.43ID:YZJ2jt3n
>>184
考え方うんぬんは、言語の発展とは必ずしも関係があるわけではないので、その指摘は的はずれ。

何度も書いたが、オブジェクト参照ベースは、当時からとくに珍しいものではなく、C#がそれを取り入れたからといって、C++から発展したものでないという主張は成立しない。
たとえば、C++で、言語やライブラリの機能を使って、オブジェクト参照ベースの実装や関数的プログラミングを行ったとしても、やはりC++には違いない。

また、C#は、using節やジェネリクスなど、C++の影響ともいえる要素が見受けられる。

蛇足だけど、C#がリリースされてからは、Javaはその後追いをよくしてる印象。
最近にいたってはOracleのやる気もあやしげ。。。

196デフォルトの名無しさん2018/06/17(日) 16:39:33.40ID:YZJ2jt3n
>>188
それは、Javaのみがそうであった場合にできる主張。

197デフォルトの名無しさん2018/06/17(日) 16:40:52.74ID:cRXwZ54c
>>196
Java意外にC#が似てる言語ってあるの?

198デフォルトの名無しさん2018/06/17(日) 17:00:14.29ID:MTrYKi4d
C# は J++ の影響を受けたのであって Java の影響を受けたのではない!
という展開を期待。

199デフォルトの名無しさん2018/06/17(日) 17:01:08.44ID:wTKR8Tiz
やっぱpデバッグが一番手っ取り早くて楽だよな
debug.rbでステップ毎にコマンド入れて値を見るのも便利だけど

200 ◆QZaw55cn4c 2018/06/17(日) 18:13:10.48ID:mtjEdwIk
>>195
>考え方うんぬんは、言語の発展とは必ずしも関係があるわけではないので、その指摘は的はずれ

まあ「言語の発展」について、なにかしら定義があるわけでもないですし

でも、「Java と C# は同系」といわれて反発したり
「C# と C++ は同系」といわれて疑問を呈したり
することからみると、なんらかの感覚は存在するわけで、それをなんとか定義づけることにまで持っていければおもしろいかも、とは考えています

役に立つかどうかは疑問ですが

201 ◆QZaw55cn4c 2018/06/17(日) 18:13:42.96ID:mtjEdwIk
>>196
どうしてそう考えたのですか?

202デフォルトの名無しさん2018/06/17(日) 18:25:18.06ID:wTKR8Tiz
故意にdebug.rbの話を避けて自演を継続中か

debug.rbって中身見たらメソッドをフックしたり、お手本になりそうなコードが多いよ
一度読んでみな

203デフォルトの名無しさん2018/06/17(日) 19:11:15.83ID:uFFOhx/7
これからRubyKaigiの動画全部見るお

204デフォルトの名無しさん2018/06/17(日) 20:25:29.92ID:aO0/uw+a
「巨人の肩の上に立つ」を知らないのだろうか

205デフォルトの名無しさん2018/06/17(日) 20:38:59.91ID:cRXwZ54c
肩から巨人の弱点狙い撃ちだな

206デフォルトの名無しさん2018/06/17(日) 23:02:43.39ID:YZJ2jt3n
>>200
もう一度書くが、「C#がJava系列」は違うと言ったのであって、「C#とJavaは同類」くらいなら否定しない。

これで通じないのなら、言語の認識か日本語の感覚が異なるのだろう。
もう疲れたので、そろそろおわり。

207デフォルトの名無しさん2018/06/17(日) 23:07:46.86ID:fWXMJUJM
>>187
LISP(笑) あれはコンピュータにとって美しい言語だろ。人間にとっては奇怪な呪文の
羅列でしかなく、アセンブラの方がまだ親しみやすい。PostScriptみたいで、人間が
直接書くためのものじゃないね。計算機科学者が作った実験的言語で、実用性は低い。
同じ1950年代生まれの言語では、数式通りの記法が売りのFortranが実用として
支持された。後続の主流言語BASIC、Pascal、CもFortran系列。

1960年代生まれのBASICは、当時のFotranでは.gt.だった比較演算子を数式通りの
>にしたし、文字列処理を簡潔で分かりやすく記述可能にしたから、高級言語の
発達史の中で評価されて良い。構造化されないうちに普及してしまったので、色々
叩かれることになってしまった。VBAは構造化されているし、オブジェクト指向も
取り入れ、Microsoft Officeの大きく複雑なデータ構造を分かりやすく扱える。
昔のBASICから引きずったおかしな部分も残っているが、総合的に評価すればそんなに
駄目な言語ではない。

大前提として、変数の宣言と型づけができない言語は駄目だね。だから、Rubyも
Pythonも評価は低い。VBAは昔のBASICとは違ってDim i As Integerにように
宣言できるし、Option Explicitと書けば宣言を強制できる。プログラミングに限らず、
自然科学でも変数は定義してから使うものだし、人文・社会科学でも例えば法律では
用語を定義してから使う。定義を与えてから論を進めるのは科学的思考の基本で、
それができないRubyやPythonは俺様脳内的プログラミングでしかなく、教育上有害。

プログラミング教育ではC系かPascalを学ばせ、「aって何? お前の脳内なんか
知らないよ」とか「型が違う変数にそのままでは代入できないぞ。ボヤボヤするな」
とかコンパイラに叱られながら、正しいプログラミング作法を身に着けさせるのが
良い。プログラミングが嫌いになる子が出てくるかも知れないが、そういう子には
適性がないので、ちょうど良い篩い落としになる。

RubyやPythonはちょっと高機能な関数電卓や、ちょっと高機能なバッチファイルとして
利用するものであって、C系やPascalのようなちゃんとしたプログラミング言語と同列に
扱ってはいけない。

208デフォルトの名無しさん2018/06/17(日) 23:09:10.75ID:YZJ2jt3n
>>205
反面教師だな。

209 ◆QZaw55cn4c 2018/06/18(月) 01:00:38.78ID:OiAJbwiy
>>206
うふふ、細かい人だねえ…

210 ◆QZaw55cn4c 2018/06/18(月) 01:04:27.72ID:OiAJbwiy
>>207
>定義を与えてから論を進めるのは科学的思考の基本
無定義語というのもありますが
「線」「点」はユークリッドも定義していません

>RubyもPythonも評価は低い。
「あなたの」評価が低いだけなのでは?

211デフォルトの名無しさん2018/06/18(月) 01:05:11.72ID:N12QMbNB
>>207
長文の割りに中身が少ないな

>コンピュータにとって美しい言語
>アセンブラの方がまだ親しみやすい
LISPは高水準言語だから逆だよ

大多数にとって読み書きしにくいのはそうだろうが
関数型言語の元祖なんだから
コンピュータのための記法ではない
人間のための記法だよ

逆にC/C++のポインタなんかは
アセンブラの低水準の仕組みが残ってる


>大前提として、変数の宣言と型づけができない言語は駄目
それはたんなる趣味

型推論の時代だから動的/静的型付けに
そんなにこだわる意味も薄れてきてる

212デフォルトの名無しさん2018/06/18(月) 01:35:50.81ID:lKL9CcqM
>>211
Lispが人間のための記法というのは違和感があるな。

213デフォルトの名無しさん2018/06/18(月) 06:51:31.69ID:Jei0+sA2
この荒らしは自演がへたくそだな

214デフォルトの名無しさん2018/06/18(月) 22:30:18.55ID:wpApFxp0
>>211
処理が高水準か低水準かと、記法が人間にとって親しみやすいかとは別物。
アセンブラの名残りと言えば、CだけでなくRubyもPythonも配列の添字が
0から始まる点でそうだろ。日常生活や数学の感覚では1から始まるのが自然。
Pascalは任意の整数、BASICは0か1かを選択できる。

C#では型推論が導入されたが、プログラマの判断で場面に応じて使うことも
できるだけで、従来の型がなくなったわけではないし、従来の型の方が頻繁に使われる。
何でも丸呑みしかできないうわばみとは違う。

Pythonは構造化に関しても不完全というか履き違えたオフサイド・ルールが駄目だね。
HTMLやLaTeXなどの文書マークアップ言語の基本は、構造と書式を混同しないこと。
文書の構成要素に対して書式を直接指定するのではなく、構造を指定し構造に書式を
割り当てるのが作法。プログラミング言語の構造化も同様で、タブやスペースによる
インデントは表層的な書式に過ぎず、本質的な構造は{と}やbeginとendで囲むことにより
明示すべきもの。

Pythonによる構造と書式の混同は、不作法なだけでなく実地上の問題も生む。
例えば、5ちゃんねるにソースコードをコピペで書き込むと、タブと半角スペースが
除去されてしまい、ifなどの制御ブロックがどこまでなのか全く分からなくなってしまう。
C系やPascalならば書式が失われても構造は残るので、プログラムの動作は変わらないし、
標準的な書式を復元することもできる。

この点では、endを使うRubyはPythonと違ってまともだな。

215デフォルトの名無しさん2018/06/18(月) 23:01:02.55ID:c5Ieze8t
じゃあ常にセミコロンつけた方がいいんだね

216 ◆QZaw55cn4c 2018/06/18(月) 23:08:00.86ID:OiAJbwiy
>>214
>数学の感覚では1から始まるのが自然
日常の感覚はともかく、数学では自然数が必ず 1 から始まるとは限らない、これは一々確認しないといけないもの

217デフォルトの名無しさん2018/06/19(火) 00:17:32.77ID:J6msDqJ7
西暦100年の200年前は
紀元前101年だって言うのだから困るわ
自然に感じない

218デフォルトの名無しさん2018/06/19(火) 02:30:49.14ID:zx5ttZfc
>>214
うっかり混同したんじゃなくて故意にそう設計してるんだから混同じゃなく同一視と言うべき。

219デフォルトの名無しさん2018/06/19(火) 09:03:02.03ID:9hRUW1Ne
LISPが複雑怪奇で読みにくいってコイツマジで言ってんのかよ
あれだけ直観的な表記なのに

新着レスの表示
レスを投稿する