Ruby 初心者スレッド Part 63
レス数が900を超えています。1000を超えると表示できなくなるよ。
プログラミング言語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/ >>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 >>831
そうそう。だからRubyじゃコンパイル時にわからないんだよ。
例えば以下のように、一行目にexitしてしまえば
その下にいくら変なコードがってもコンパイル時にチェックなんかできない
exit
aaa = 1312
class Hoge
def hoge
end
end
h = Hoge.new
h.hage
i = IIII.new
言い換えると、動的言語ではファイル単位でしかコードを見てないので
少なくともファイル外にある情報はわからない
検出できるのは文法エラーぐらいだよ
残念なことにね。それが現実。 だからさぁRubyが駄目ってとこを動的型言語の限界だと一般化しないでくれ
話がまったく噛み合わない >>831
だからミスの可能性がある(そしてその指摘や修正の提案が可能である)ことと
コンパイル可能な(つまり状況が整えば実行可能になる)コードであることとは
また別の話だって釘を刺してるだろうに… >>830
Ruby限定の欠陥の話がしたいのか動的型言語一般の限界の話をしたいのかをまず表明してくれ
>>813からの流れは動的型言語一般の話ってわけじゃなかったのか? まああれだ、Smalltakerさんがちゃんとコードで説明してくれればいい
ここでオンラインでSmalltalkを実行できる
https://www.tutorialspoint.com/execute_smalltalk_online.php
ここに
Transcript show: 'Hello, world!'.
Transcript show: 4 sqrt printString.
と書くと、「Hello, world!2.0」と表示される
ここに
Transcript show: 'Hello, world!'.
Transcript show: 4 sqrtaaa printString.
と書くと、「Hello, world!」と表示されてから
エラーが表示される。
コンパイル時にチェックが行われるというのなら4という数字に
sqrtaaaというメソッドはないから実行時前にエラーを検出できるはずだ
そうならないので、未定義メソッドの検出はできない。
反論はコードでどうぞ ここにMatz呼べば全て解決じゃん
どうせ見てると思うぞ >>840
Smalltalkの“confirm, correct, or cancel”を試したいならこれはIDEを前提とした機構なので
GNU SmalltalkのようにUNIXとの連携を重視したCUI前提の変わり種のSmalltalkには実装されておらず使えません
またPharoのように今風のシンタックスハイライトのついでに色で警告する方式がデフォになった処理系でも抑制されています
“confirm, correct, or cancel”が動く様子やその仕組みを検証したいのであればVisualWorksかSqueakあたりがよいでしょうね
SqueakならSqueakJSというWebブラウザで動作する処理系があり、これならすぐに動かせるのでお薦めです
今回のような古くからの機構に興味があるのなら DEMOS の Mini で起動できる Mini Squeak 2.2 あたりが軽くてよいのではないでしょうか
(ワークスペース変数導入後、変数名のミススペルチェックはワークスペースでは機能しないためこの点でも今回の検証には古い方がよいでしょう)
https://squeak.js.org/
起動後まずデスクトップクリック→open...→transcriptでトランスクリプトウインドウを呼び出しておき、それから
どこでもよいので(Welcome to Mini Squeak 2.2 の適当な場所でも、open...→workspaceで新しいワークスペースを開いてもOK)
Transcript cr; show: 'Hello, world!'.
Transcript cr; show: 4 sqrt printString
とタイプして入力後、2行ともドラッグして選択してから右クリック(あるいは左手のスクロールバーとの境界にポインタを合わせて左クリック)
→do it (d) で>>840のコード(cr; は出力を見やすくするために入れました^^;)が動かせます
sqrtaaaに変えて再びdo itすれば、Hello, world!と表示される*前*に“confirm, correct, or cancel”と促されるはずです
関連してLispのDWIM(これも実行前の静的時チェック)はInterlispのマニュアル第15章で取り上げられていますので参考まで
https://archive.org/stream/bitsavers_xeroxinternceManualOct1983_52302609?ui=embed#page/n389
>>796
> 70年代のLispにすらあったDWIM
同書にもあるとおりDWIMは1960年代からです
“DWIM, the Do-What-I-Mean error correction facility, was introduced into this system in 1968 by Warren Teitelman” 「いまさらRuby」
「Rubyで学ぶ機械学習」
あたりを誰か書いてよ 「間違ってRubyを始めてしまった人へ贈るPython入門」
もいいな Pythonは、試してみたい気持ちもあるものの、よろしくないところもいくらか知ってるので、微妙なんだよなー。
そういえば、ボスが引退するそうだが、なにか変わんのかねえ。 >>839
個人的には ruby を改良しようといろいろ画策しています、宣言付き ruby とか
動的型付け言語にて変数宣言を導入すればずいぶんと使い勝手も変わるだろうと想像しています
そういう視点でおねがいします 画策wwwwww
それでプルリクでもしてこいよwwwwwww >>847
Rubyは変数宣言を省略したことが原因の仕様がらみのトラブルが少なくない
そんな犠牲をはらっても(型も含め)宣言を書かせないことがMatzの優先事項の上位にあるわけ
キミの「改良」案は何を今更だしそもそもMatzや取り巻きが耳を貸す可能性はゼロだろうね 結局、言語を改良していくと、Haxe になる
マルチ言語・マルチプラットフォーム、
this の挙動を変えて、型推論・パターンマッチ・引数付き列挙
Ruby は、JS, Python などど違って、関数スコープ・ブロックスコープがあって、
関数スコープは強固だから、変数を内側へ通さない
だから変数宣言が無くても、バグらない
ES2015(ES6)でも、ブロックスコープが採用された。
変数宣言も、以前からのvar に加えて、const, let も作られた >>852
なんで関数スコープとかいう小さい話してるんだ?
小さいものであれば、少し頑張れば対応可能なのは
わかってるんだよ。もっと広い範囲、オブジェクト間の通信とか
プロジェクト全体のレベルでバグが発生するから型がいるんだよ >>850
↓でググる
site:www.rubyist.net/~matz (スコープ OR クラス変数 OR 定数) 教えてください!
[パーフェクトRuby]と[プロを目指す人のためのRuby入門 ]はどちらがオススメですか?
当方3ステップ本を学習中、仕事でRubyを使えるようになりたいと思っています。
よろしくお願いします!! >>860
仕事でRubyやりたいならRails以外の選択肢はないからいきなりRailsやるのがいいよ
Rails DSLは別言語なレベルにまでカスタマイズされてるから、最初に素のRubyをやるとかえって混乱するのでお勧めできない
あとはLinux使ったWebサイト運用構築のインフラ本を一冊と、AWSの本一冊かな
WebやるわけじゃないんならPythonで勝ち馬に乗ろう この順番で読む。
Rails は、無料のRails チュートリアルをやってもよい。
Rails の前に、Sinatra をいじくりまわすのも良い
たのしいRuby 第5版、2016
Effective Ruby、2015
バグが起きにくい、安全で効率的なコーディングと、
間違いやすいポイントを解説
改訂2版 パーフェクトRuby、Rubyサポーターズ、2017
改訂3版 基礎 Ruby on Rails、黒田努・佐藤和人、2015
実践Ruby on Rails 4: 現場のプロから学ぶ本格Webプログラミング、黒田努、2014
パーフェクト Ruby on Rails、2014
動作環境、Rails 4.0.5, 4.1.1 >>860
>[パーフェクトRuby]と[プロを目指す人のためのRuby入門 ]はどちらがオススメですか?
どちらもオススメだけど、難易度であれば [プロ] よりも [パーフェ] のほうが高い
[パーフェ] は幅広く高度な話題を扱うプロ必読の本だけど、
説明もプロ向けで簡潔だから初心者では読んでも意味不明な魔術書と感じるかもしれない
それに対して、[プロ] は話題を厳選して丁寧に分かり易く解説している印象を持った
だから初心者へのオススメコースであれば以下の順序になる:
・たのしいRuby
・プロを目指す人のためのRuby入門
・パーフェクトRuby >>861
>仕事でRubyやりたいならRails以外の選択肢はないからいきなりRailsやるのがいいよ
質問者は「Webをやりたい」と希望しているわけでもないのに
ナゼかRailsを勧める話が噛み合わない返答、日本語が不自由な人ですか?
>Rails DSLは別言語なレベルにまでカスタマイズされてるから、
>最初に素のRubyをやるとかえって混乱するのでお勧めできない
つまり:
Pythonは手続き型プログラミングに特化して設計された言語だから、
>>861のようなPythonプログラマには、手続き型にオブジェクト指向と関数型が融合された
素のRubyをやると混乱した苦い経験が過去にあったのでお勧めできない、
という解釈できますね
>WebやるわけじゃないんならPythonで勝ち
つまり:
トレンディーにセンシティブなナウいヤングメンにはPythonがお勧め
ということですね、たいへんわかりやすいです >>864
プロを目指す人のためのRuby入門は本当に入門用、yieldやProcの解説までで終わり。
パーフェクトRubyはメタプログラミングとかGemの作り方とか実践的なことまで書いてある。 これから言語を初めて学ぶならTypescriptとかのほうがいいと思うけど。 ほら
>>865最高でしょ
これが典型的なルビリストの思考回路 >>867
初心者にJavaScript系はイカンやろ。クセありすぎ。
それだったら、C#をやるべき。 TypeScriptとC#だったら似たようなもんだろ
設計者同じなの知らないのか? >>871
TypeScriptはJavaScriptに引っ張られる部分がどうしてもあるからね
さすがに似たようなもんではないと思う
JavaScriptの一大メリットである環境整備のしやすさもTypeScriptにはないし
初学者ならRubyは学びやすいと思うしいいと思うよ
たのしい本とかしっかりした書籍もあるしね 趣味でやるならRubyは書くの楽しいしお勧めできる
手に職付けるつもりなら全くオススメしないけど 「プロを目指す人のためのRuby入門」の著者・伊藤淳一は、YouTube の動画がよい。
無料のRails チュートリアルをやった人は、彼の動画を見るのもよい
Junichi Ito
Rails 5.1で作るVue.jsアプリケーション 〜Herokuデプロイからシステムテストまで〜
https://youtu.be/ycOeM2umXkY
プロになる人は「Effective Ruby」は読んでおけ。
どの言語でも「Effective 何々」というのは、プロの必須本 Rubyはそのコード効率の良さからちゃちゃっと書けるのがメリット
試作や使用頻度の低いツールの作成に重宝する 試作(笑)
そういやsassも最初はrubyで作られていたが、
遅いって言うんで、C言語で再実装されて
今じゃそっちが主流になったな 遅くなりましたが、返信頂きありがとうございます!3ステップ本でも苦戦しているので、これをいったん終わらせてから[プロを目指す]をやろうと思います
>>861
>>864 >>874
動画があるのは知りませんでした!
[efective]も読もうと思います!ありがとうございます! やってみたでいいと思うよ
そこから学んだことを基礎にして別の言語に行くもよし、そのまま使い続けるもよし >>874
この動画みたけど酷いな…
そもそもvueのソースは全部コピペでなんの説明もない
設定ファイルで何をしているのかゴニョゴニョ言ってるだけですぐ画面移動するしまったくわからん
単に作業やってますよ的なだけだな
初心者には意味不明の動画だよ コーダーになりたいのかプログラマになりたいのかによって変わるんじゃね
コーダーならRoR案件をやる以外でRubyを覚えるメリットはあまりないだろう
プログラマだったら複数の言語を操れるのが普通
ソフトウェアエンジニアだったら適材適所で言語を選択できないと >>885
Vue.js や、Rails チュートリアルをやった人からすれば、
Rails 5.1で、Vue.jsが動くことが確認できたから、画期的!
たった1人でも、実行できた実績があると、皆が後に続くから、価値がある
新しいものをいじくりまわして動かしてしまう、先駆者! ◆QZaw55cn4c はまだ荒らし続けてるのか
ほんま懲りないなコイツ レンタル鯖だと軒並みRubyで組む事になる
いまどき自前で鯖用意して高いコスト払う人っているのか? phpならともかくrubyならなんのかんのでvpsにせざるを得ないだろ。
構築めんどくせぇ… >>890
アホかこいつ
Vue.jsはブラウザ側で独立して動作するライブラリであり、バックエンドのAPIとAjaxで通信する
Vue使うならRailsはそのAPIを提供するだけであり、VueとRailsは直接的には何の関係もない
触れちゃいけない人なのは承知してるがさすがに目に余る >>893
嘘ついてもすぐバレるんだからアンチスレから出てくるなよ chef, vagrant は、Ruby で書かれている。
誰かが作った、レシピを探せば?
DevOps と、コミュニティを利用するのは、まさにRubyにもってこいだろ >>897
そういうシステム的なところに、バージョン互換がクソのRubyを使うなよ、と思うんだが。
割り切ってPerlで実装するべき。 Rubyはシステムに入ってるバージョンには何も期待できないからなあ
アプリとセットでバージョンをコントロールできない環境なら絶対に使わないことにしてる >>898
Perlもバージョン互換クソだぞ。言語自体はまだマシだが、
多くの標準とされるモジュールが結局ただのcpanライブラリだったりする
Perlとは別に、標準モジュールがメンテされている。 >>899
> アプリとセットでバージョンをコントロールできない環境なら絶対に使わないことにしてる
だからDockerがでてきたんだよね。アプリとセットでバージョンをコントロールするための仕組み
Rubyだけに限らない。どんなものでもセットでコントロールできちゃう なんかアンチの意見が多いように見えるんですが、Rubyって実際勉強する価値のある言語なんですか? >>902
言語のスキルそのものに価値を求めるなら目下猛スピードで下降中のRubyはお勧めできない
上の人も書いてるけどサブ言語として書捨てスクリプトに使う分には悪くはない
言語に価値を求めるのではなく、価値は自分で生み出すんだよ >>901
どんなものでもいいと言われてRubyを選ぶバカはいないだろうさすがにw >>902
あるよ
Rubyはラクに短く書けるからね
日用使いにもってこいだし
Rubyやった後で他の言語を使ったときに感じるもどかしさも成長の現われ >>902
利用価値とか将来性とか、そんなしみったれた理由じゃなくて、
「好きか、嫌いか」で選ぶ言語な気がする
自分は文字列処理とかの浅瀬でしか使ってないけど、
なんか書いててノリがいいんだ >>902
わざわざRubyスレを覗いてまでアンチな意見を出したがる人間がいるということは
それだけ広まってるってことの裏返しだよ やっぱレンタル鯖についてるRubyで組むのが一番楽だし安い
googleとかfacebookみたいなでかいサービス以外はこれで十分やろ >>907
文字列処理ってRubyは結構得意だと思うな。ループが書きやすいのもある
PythonやJavaScriptでやっているとストレスがたまるたまるw レス数が900を超えています。1000を超えると表示できなくなるよ。