Ruby 初心者スレッド Part 63
■ このスレッドは過去ログ倉庫に格納されています
プログラミング言語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/ frozenになるだけでオブジェクトは別に作られるのかと思ったらこれじゃ本当にSymbolと変わんねえなw
でもSymbolもなんだかんだ好きだけど
ruby --enable=frozen-string-literal -e 'p 1000.times.map{"foo".object_id}.uniq'
#=> [20966820] あもともとfrozenな文字列は使いまわしてたのか
$ ruby --disable=frozen-string-literal -e 'p 1000.times.map{"foo".freeze.object_id}.uniq'
[20983260] >>733
MatzがしれっとSymbolをStringのサブクラスに変更しようとしたの知らんのか
結局互換性の問題でMRIメンバーから大反対されて却下されたけど、
今Rubyを完全に再設計するならまず間違いなくシンボルリテラルは単なる文字列になり、Stringは常に変更不可になる
Railsのパフォーマンス改善のためにRubyに導入されたシンボルGCなんて、
それこそ本来のシンボルの意味からすると全く必要ないはずの馬鹿げた機能だ
もはや誰が見てもSymbolは事実上単なる文字列 最下位bit使って
整数の範囲を減らしてまで
シンボル空間作ったのに
互換性無いですかそうですか >>731
>メタプログラミングのため
後半の内容とは何ら関係しない
覚えたてのメタプログラミングって単語を使いたいだけちゃいますか
>Railsの影響でシンボルをキーにしたHashを引数に渡すということがよく行われるけど、
Railsで最初にRubyに触れた人にとってはそう感じるだろうけど、
ハッシュのキーとしてシンボルを使うのはRails以前から普通だったよ
>>736
>Railsのパフォーマンス改善のためにRubyに導入されたシンボルGCなんて、
シンボルGC導入のきっかけは(ブルートフォース攻撃に対する)セキュリティ対策だよ
パフォーマンス改善のために導入された文字列のfrozenデフォ化とごっちゃにしてる >>736
ヤツはホンマ互換性を軽視する輩やな。。。 Selenium WebDriver, Nokogiri を使って、文字列からHTML を作って、
それをJavaScript で実行して、DOM を更新しているけど、
こういう原始的なやり方で良いのかな?
もっと、ERB とか、Vue.js みたいな、UI コンポーネント指向の書き方はできないのかな?
doc = Nokogiri::HTML(driver.page_source)
content_wrapper = doc.at_css("#content") # 全体の枠
# 画像ノード
img_wrapper_str = <<"EOT"
<div class="img_wrapper"><img></div>
EOT
picture_urls.each do | pict_url | # 画像のURL
img_wrapper = Nokogiri::HTML::DocumentFragment.parse img_wrapper_str
img = img_wrapper.at_css "img"
img.set_attribute('src', pict_url) # 属性
img_wrapper.parent = content_wrapper # 親
end
jsCode = <<"EOT"
var elem = document.getElementById("content");
elem.innerHTML = '#{ content_wrapper.inner_html }';
EOT
driver.execute_script jsCode # JavaScript を実行 すいません、プログラミングの世界に最近初めて入ったんですけど
C++やろうとしたら別のスレでRubyとjava勧められたのでやろうと思ってるのですが
Rubyはプログラム初心者に向いてますか?
それと実行環境はVisualStudioを使えますか?
この2点教えてください >>742
Rubyは開発陣がWindowsアンチばかりでWindowsとRubyは極めて相性が悪い
初心者云々以前に、Macに乗り換える気がないならRubyは論外
WinでスクリプトならPythonにしよう
絶賛落ち目中のRubyよりよほど将来性があるし初心者にもわかりやすいしWinで使いやすいしVisual Studioでもサポートされている アホか初心者が戯れにやる程度ならrubyもpythonも大差ねえよ RubyInstaller for Windows がある。
エディタは、VSCode
ただし、Windowsで、irb を使うと、日本語でバグるから、
irb だけは、Windows10 なら、WSL でLinux(Ubuntu)側から使う
paiza.IO, codepad などのサイトで、ブラウザからプログラミングするのが簡単。
他には、progate という学習サイトもある
環境構築には、数十のLinux コマンドも覚えるべき。
絶対・相対パス、環境変数PATH の仕組みなども知らないと無理
ruby -v
例えばこういう、ruby のようなパス無しのコマンドを入力すると、
どういう仕組み・順序で、PC 内から、そのコマンドの実行ファイルのある場所を探し出すのか?
つまり、こういうOS の知識がないと、
コマンドプロンプト・PowerShell などのシェルを使えない
ほとんどの人は、これらの勉強ができず環境構築ができないから、
環境構築のいらない、Excel エンジニアになるしかない!
つまり、プログラマーにはなれない人! >>742
C++ をやるんだったら Java にすればいいと思います >>743
そうなんですか。Win10使ってるんですけどやめたほうがいいですか...
別スレでC++始めるならまずたのしいRuby 第5版、2016 とスッキリjavaやってからにしとけって言われたので
聞いてみたのですがあまりよろしい選択ではなかったですか。
色々調べてみるとrubyは簡単な言語の上位にランクインしてたので覚えやすいのかなって思ってたんですが
PythonはVisualStudioで出来るんですね。いいこと教えていただきありがとうございます。
>>745
一応VisualStudioでRubyもやれるんですか
LinuXはOS?ですか?あまり良くわからないんですが、かなり敷居は高そうですね……
paiza等もブラウザで出来るみたいなんですが入力とかクラスとかの機能が使えないみたいで
色々不自由しそうで、なるべく実行環境整えたいのですが、今の段階では厳しいですか。
教えていただきありがとうございます。 今の覚えるならpythonの方がいい
悪いことは言わない勝ち馬に乗れ >paiza等もブラウザで出来るみたいなんですが入力とかクラスとかの機能が使えない
そんなことはない普通に使える
実行環境構築に自信がないならブラウザコンソールからJavascriptやっとけ >746
別スレで教えていただきjava環境導入出来ました。ありがとうございます!
せっかくお勧めの入門書2冊教えてもらったので両方の言語やろうかなって思って聞いてました
少しでもC++の理解が簡単になるならやっとこうと思ったんですけど無意味ですかね >>748
そこまで本格的にやる予定ではなくて,
別スレでプログラム0から始める奴がC++からやっても理解できない。
たのしいRuby 第5版、2016 とスッキリ分かるjavaやってからにしろ!って言われて
少し遠回りしてでもやろうと思ってたんですが、今聞いた感じだとあまり入門者がやる言語ではないみたいですかね…
pythonとjavaとりあえずやってみます。ありがとうございました C++やるつもりならなおさらPythonがおすすめだな
Pythonは設計思想が比較的C系に近いからC++やJavaにも馴染みやすいよ
RubyはRubyが最高だと信じて閉じ籠って他の言語やりたがらない人が多い 「たのしいRuby」「スッキリjava」は薦めたのは、俺だよ
Windows のユーザー・システム環境変数の設定画面を使えないと無理。
この画面の環境変数PATH を、穴のあくほど見つめる。
新しく何を追加したのか
絶対・相対パスの違い。
これがわからないと、VSCode で、PowerShell から実行できない
cd, ls などの、基本的な20ぐらいのLinux コマンドも覚えるべき。
PowerShell でも、そのまま使えるから。
例えば「cd ..」これの意味がわからないと、PowerShell を使えない。
コマンドプロンプトはややこしいから、なるべく使わない方が良い
C++ なんて、5年以上先の話。
環境構築できないと無理
paiza.IO, codepad などのサイトで、ブラウザからプログラミングするのを薦める。
progate という学習サイトで学習する人も多い 「たのしいRuby」「みんなのPython」「スッキリjava」の3冊を読めばよい
「たのしい・みんなの」の2冊は双子。
ただし必ず、たのしいから読むこと!
みんなのから読むと、わからないから苦戦する
ただし、みんなのは、AI・機械学習しない人には、無駄が多い。
ウェブ系なら、たのしいRuby
HTML, CSS, JavaScript も必要 今からJavaをするくらいなら、C#をしたほうが一億倍はいいと思うが。
とくにWindowsなら。 >>742
プログラミング言語は道具だ。道具を使って何をしたいか(目的)が重要なのではないのかな
逆に目的が決まれば適したプログラミング言語も自然と絞られてくる
なんとなくならメジャーなのをやっておけとしか・・・ 例えば、C++ のロベールを読むよりも、
「たのしいRuby」「みんなのPython」「スッキリjava」の3冊を3回読む方が、
はるかに速く読めるし、得るものも大きい。
50時間もあれば、全部読める
一方、C++ で50時間使っても、ほとんど何も作れない。
やってみればわかるけど、時間の無駄
C/C++ などポインタがある言語は、すぐにバグるから、すごく時間を損する https://rubyinstaller.org/
Ruby Installer を使うなら、2.4 系を使う。
2.5 系は、まだ新しいから使わないように
irb は日本語でバグるから、使わないように。
使うなら、WSL でLinux(Ubuntu)側で、irb を使う
VSCode もインストールして、Rubyの拡張機能も入れてみれば? 環境変数がわからないのはともかく自分で調べて理解できないレベルなら諦めろ web上では見たことあるけど
出版物上で観るのは初めて感 言語の初心者用の本は、PCの初心者用の本じゃない!
言語の本はあくまで、その言語を知らないだけで、
環境変数とか、絶対・相対パスとか、cd, ls などの基本コマンド、
PowerShell の使い方などは、知っている事が前提
こういうOS の知識を、教えている本はない。
それを書けば、言語を説明するページが減るから、書かない
つまり言語の本は、PCの初心者を対象としていない!
既に、OS の知識はあって、その言語だけを知らない人向け 762 みたいな本を書いている奴は、勉強を何もわかっていない。
なぜ生徒が、プログラミングを嫌うか
言語には、勉強する順番がある。
小学生にいきなり、大学教育をしても無駄。
小中高大学と、個人の成長には、勉強する順番が重要。
知識を下から、積み重ねていかないといけない
1. 動的・軽量言語
Ruby, Python, JavaScript
2. 静的言語
Java, Kotlin, C#
3. ポインターのある言語
C, C++
今の大学教育では、C から教えているから、皆プログラミングはしょーもないってやめる。
これは、Rubyの女神・女優の池澤あやかが言ってる >>768
教養時代に必修科か準必修科目でRubyやったぞ
薬学とか農学部進学予定の奴までやってたのはかわいそうだったけど >>753
つまり、Python信者は他言語スレまで出張してPython推しするほど必死だと >>769
今日日、農学志望の人はRubyくらい使う機会があるかもね。
集計統計とか農業IoTとかで。 ラズパイでは、Python も良いけど
ウェブ系では、Ruby が強い。
Rails から、Vue.js, React も使える >>770
言語なんか複数使えて適宜使い分けられて当然でしょ >>743
つまりPython推しのためであれば、他言語スレでの荒らし行為も正当化されると
いやあPython信者って怖いですね アンカミスを訂正:
X:>>743
O:>>776 俺はPythonよりRubyの方がずっと好きだけど
(Railsプログラマーを目指してるんでもなきゃ)
これから何か始めようって人には断然Pythonを薦めるし
自分のお気に入りだからってむやみにRubyを薦める奴の見識は疑うね CASL II/COMET IIでアセンブラの基本を学んでいるとポインタで死ぬことはなくなる。
序でに基本情報の試験にそのまま使える。
https://www.jitec.ipa.go.jp/1_20casl2/casl2dl_001.html >>780
CASL なんて覚える気になりません、といって、x86 のいい教科書がありませんね
誰か書いてほしい >>779
つまり:
俺はRubyよりPythonの方がずっと好きだけど
(機械学習プログラマーを目指してるんでもなきゃ)
これから何か始めようって人にRubyを薦めることもあるけど
自分のお気に入りだからってむやみにPythonを薦める奴の見識は疑うね
ってことですね
Python信者の皆様、お勤めご苦労様です >>782
そりゃひねくれすぎだろ…お前いったい何と戦ってんの?
ただでさえRubyの評判は落ち目なんだから
狂信者が必要以上に貶めるのはやめにしてほしいわ >>780-781
2人のイリノイ大学生が使った、LLVM に世界が飛びついたけど、
日本では既に情報処理資格に、仮想アセンブラ CASL2 があった
LLVM/Clang 実践活用 ハンドブック、出村成和、2014
詳説 Cポインタ、2013、オライリー・ジャパン
OSのすべての機能を学びたいなら、ムック本の
Linuxエンジニア養成読本、第3版、2016 >>752
プログラミングの基本って、
・変数への代入、関数(メソッド)の使い方
・配列、ハッシュ(連想配列)とかのデータ構造
・値の比較と条件分岐(if文とかswitch文)
・繰り返し処理(do while文とか)
こういうのだけど、これはどの言語にもあるものだから、
一度覚えればほぼそのまま使い回しがきく。
(if文じゃなくてif式、とか若干の違いを言語ごとに覚えるだけ)
あとは「オブジェクト指向」の考え方というか、
概念みたいなのを理解できてれば、
どの言語に移ってもそんなに苦労せず使えるようになる。
で、そういう基本は、C++でもJavaでもRubyでもPythonでもJavaScriptでも、
どれやったって学べるわけだけど、
最近は3DCGのアプリとか、機械学習とかのジャンルで
Pythonが採用されるケースが多いので、
ゼロから始めるなら使い道の多いPython、みたいな意見がどうしても多くなる。
(Rubyは使いやすい言語だけど、Webサイト構築以外での採用例があまりない)
けど、「自分のやりたいこと」がなにかを決めた上で、
「それを最短距離でできる言語はどれか」を
詳しい人に教えてもらって始めるのが一番おすすめ。
(自分のやりたいことがC++でないとできないなら、最初からC++をやるべき)
特にやりたいことがなければ、
本屋で各言語の入門書をいろいろ立ち読みして、
自分が理解できそうな言葉で書いてあるやつを選んで始めれば、と思う。
ちなみにPythonもJavaも、初心者が学ぶ言語としては
悪くない選択肢です。 >>785
Pythonは3DCGでは最近じゃないから
ほとんどの奴がPythonの存在を知らないときから使われてる ツール組み込みのPythonは未だに2だったりするんじゃないの? 組み込みだとLua、mruby、JavaScriptあたりも使われている しれっとmrubyを混ぜるな
mrubyなんか誰も使ってない まぁ古参はC、下手したらアセンブラからの経験者で
トレンドに合わせてステップアップしながら言語を覚えただろうから
初心者が何の言語から勉強するべきかなど分かるはずもないんだよな
シンプルで覚えることが少なく今なお第一線級で活躍している言語なら間違いなくC言語
C言語ほどシンプルで実用性のある言語はない
OSが書かれてる本物の言語ってだけでもモチベーションになる
全ての実用言語の元になってると言えるし、最初にやるには良い言語だ
良くも悪くも
一方で楽しさ優先なら間違いなくC#でポトペタ開発でしょ
めちゃ楽しいが、WPFなどの背景にある仕組みの複雑さに挫折するかも
でも触ってて楽しいだろうなぁ、画面作るだけならマウスだけで出来るし
あぁRubyとかPythonとかは寄り道みたいなものだから最初にしなくてよいよ、ハマるから
動的型のスクリプト言語など色物なのに、最初にやるとか、どうかと
俺は絶対おすすめしないね、プログラミング言語の本流じゃないからね
特にここ10年は静的型が本流ってみんな知ってるだろ、いじわるめが あと、環境設定がどうとか、約一名盛り上がっているようだが
そういう人にはVisualStudioがおすすめだろう
これだけ完成度の高いソフトが無料で使えるのは凄すぎる
トータルで言えば、初心者におすすめなのは
VisualStudioとC#でポトペタ開発って事になるのかな
でもまあ、C#もバージョンがどんどん上がって今やとても複雑な言語だからなぁ
ソフトウェア業界が10年20年かかって常識にしてきたことを
一気に追体験しようというのはなかなか酷だわな
本当はC言語とWin32APIあたりから始めるのがシンプルで理想なんだが
モチベーションがつづくかな、それさえ気にしなければよい選択なんだが
どちらにせよ、RubyやPythonのような本流主流じゃない言語を最初にやるのは止めたほうが良い
筋が悪い、悪かった、というか悪いお手本みたいな言語だから 手続き型言語でプログラム書くなら、どのみちメモリのことは意識しなければならないし
ポインタが分からないって時点でプログラマには向いてないというか何というか
ただ、結局、安全かどうかなんだよ
その点C言語は安全とは言い難いが
意図せずヌルポするのはヌル安全の機能が無い言語ではどれも同じようなものじゃろ
その観点から言うと、単なるタイポすらコンパイル時にチェックしてくれない
動的型言語は初心者に進めるのは止めたほうがよい
初心者ほどタイポするだろうからな
それが言いたかった >>792
> 単なるタイポすらコンパイル時にチェックしてくれない動的型言語
(きっとRubyのdid_you_meanはおろか70年代のLispにすらあったDWIMも知らないんだろうな…) >>796
そのdid_you_meanはコンパイル時(プログラム実行前)に
チェックしてくれるのかい?w とにかく、初心者はプログラムを間違えるものなんだよ
一発で動くことは先ずない
それならコンパイルの時点でよりたくさんのエラーを検出してくれた方が学習が捗るだろ?
初心者にRubyなんか薦めるなって事だ
その人を蹴落としたいなら別だが まず多少なりとも動いてくれたほうが楽しいので学習が捗りました(経験談 >>799
重要なのはプログラム実行前ってことだよ
静的とも言う。
実行した後はいろんな状態があり得るが
実行前というのは状態は一つだ。
つまりいろんな状態にしなければわからないというのは
問題を発見するまでに果てしなく時間がかかるということ
だからなるべく実行前にわかるようにするのが良い いやeval getsするだけで可能性は可算無限でしょ
eval gets
p A
# input
A = 'hoge'
とかどうすんのよ >>797
動的型言語かどうかは関係ない
Smalltalkの“confirm, correct, or cancel”はコンパイル時チェック >>803
Smalltalkのコンパイルっていつやるの? プログラム実行前って言ってるのに理解してなさそうw 何だったらコンパイル時どころか
最近のエディタだったら書いてる途中でリアルタイムで文法チェックするからな
間違ってたら波線とか出る
そういう状況なので、なるたけ多くのことが静的にわかったほうが良いんだよ
実行時にエラーにするなら馬鹿にでもできる!!って思うし
やってみてダメでしたってな、バカっぽいでしょ
事前に分かるから賢い >>804
メソッドを書き終わった後(accept、つまりコンパイル指示を出したとき)だよwwww >>807
その時にSmalltalkは動いているのかどうかって話だ
動いてるだろ このスレって質問者をほっぽりだして変なのがしゃしゃり出てくること度々あるよな >>808
IDEでJavaソースコンパイルするときjavacもIDEも動いてないっての?wwww >>810
いや、自分で書いたコードの話なんだけど?
Smalltalkは自分の書いたコードがすでに動いてないと
そういうエラーはでないでしょ。 >>811
バカなの?コンパイル時って言ってるやん何度も
ともかくスペルミスくらいなら動的型言語でも静的にチェック可能なの
わっかんないやつだなー >>812
>スペルミスくらいなら動的型言語でも静的にチェック可能なの
型宣言がないのに、そんなことが可能なのでしょうか? ローカル変数だけだったりしてねw
近くの情報は周辺を見ればいいだけだから問題はすぐに分かるんですよ。
遠くの情報、例えばインターフェースが一致しているかどうかが
わからないと使い物になりませんね
人間がやると大変なものこそコンピュータにやらせないと なんで静的型の後追いみたいなことで苦労してるんだろうね
初めから静的型言語使えばよいだけなのにね
怠惰を求めて勤勉に行き着くってやつなのかね
動的型全体がそうだよね
処理系書いてる連中も、言語使ってる連中も
楽しようとして最終的に苦労する
なにこれコワイ >>813
構文木にできれば(ローカルに限らず)未宣言の変数だとか未知のメソッド呼び出しだとか程度なら
簡単に分かる
Lispみたいに構文も単純なら構文ミスも指摘して修正候補を提示することも可能(例:InterlispとかのDWIM) >>816
>未宣言の変数だとか
動的型付け言語ってそもそも変数宣言はないのでは? >>817
変数を宣言させるかとそれに型情報が付くかどうかは別の話だよ
変数宣言をさせたら動的型言語じゃなくなるという法はない
宣言を課さない言語でも初回代入を宣言と見なす場合もある >>818
>変数宣言をさせたら動的型言語じゃなくなるという法はない
たしかにそのとおりですが、
でも実際問題、変数宣言をしてかつ動的型付けである言語は存在しますか? そんなの珍しくないよ
JavaScriptとかな
変数宣言には二つの役割があって、一つは型を宣言することだけど
もうひとつスコープを宣言するって役割もある
だから動的型言語でも素直なレキシカルスコープが欲しければ変数宣言があってもよい
一方で変数への最初の代入を変数宣言の代わりにする言語は
だいたいスコープがバグってる
ただの変数への代入か、新たな変数を宣言したのか、区別がつかないからなwww
それでnonlocalだの@だの、ダサいだろ?
ま、そういうわけで、やっぱり変数宣言は有ったほうが良いし
どうせ変数宣言するなら型を書いても良い気がするし
動的型言語が衰退するのは当たり前だったわ
なんせ、ありとあらゆるスジが悪いんだよ >>819
Rubyのメソッドの仮引数やブロック変数は宣言でないと? >>821
def f(xyz)
"Hello, #{abc}!"
end
というメソッド定義があって
本当なら変数として xyz のところを間違えて abc と書いてしまった
というシチュエーションでも、エラーがでないでしょう? >>822
あのさぁ…宣言を課すこととミスを検出できるか(するか)どうかはまた別の話なんだが?
今は「変数宣言をしてかつ動的型付けである言語は存在しうるか?」って話なんじゃないの? >>823
「宣言を課す」というのは「宣言をしていない変数は変数として認識しない」という意味なのでは? ◆QZaw55cn4cは会話が成り立たないからスルーしろ >>824
Rubyはそうしていないというだけで、コンパイル時に
abcが未代入(代入操作で宣言を兼ねるRubyでは未宣言にあたる)である事実や
あるいはメソッドとして未定義である事実をもってxyzとすべき記述のミスでは?との判断を下し
そうであれば修正を促すことは可能だろう?
予め釘を刺しておくけど、ミスの可能性があることとコンパイル可能であることとはまた別の話だからな! >>824
もしかして
Rubyでは無引数(括弧なし)のメソッド呼び出し記述は同名のローカル変数のアクセス記述を遮蔽してしまう
っていう仕様をしらないとかいうオチ?
もしこのルールがなければ>>822はキミの想定通りエラーのはずだよ JavaScript では、var の有無で、皆ハマった。
だから、ES2015(ES6) で、let, const を作って、ブロックスコープも作った
this の挙動もおかしい。
だから、Haxe のthisは、常にインスタンスを指すように変えられた
Python でも、nonlocal とか、頭おかしいw
Ruby では、関数スコープ・ブロックスコープの2つがあるから、バグりにくい
a = 1
def f
puts a # ここで、未定義の変数を参照してエラー
puts a = 2
end
f() >>827
>代入操作で宣言を兼ねる
これは危険ですね
なぜなら、変数が未代入かどうか、正確には、変数が未代入「でないか」どうか、をソースコードのセマンティクスから判断するのは困難だと思うのです >>827
Rubyは、未定義メソッドの呼び出しが可能なんじゃないか?
そのためのフォールバック用メソッドがあったはずだが。 メタプログラミング Ruby 第2版、2015
で紹介している、Module#define_method(), method_missing() とかだろ? picture_url = "https://pbs.twimg.com/media/DlCjEV6V4AUM9Kl.jpg:orig#jpg"
uri = URI.parse picture_url
file_name = File.basename(uri.path) # ファイル名
file_extname = File.extname(file_name) # 拡張子
後ろに「:orig#jpg」が付いていても、ファイル名が正確に抜き出せる!
DlCjEV6V4AUM9Kl.jpg ■ このスレッドは過去ログ倉庫に格納されています