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/ まぁ古参は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 >>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人でも、実行できた実績があると、皆が後に続くから、価値がある 新しいものをいじくりまわして動かしてしまう、先駆者! ■ このスレッドは過去ログ倉庫に格納されています
read.cgi ver 07.5.5 2024/06/08 Walang Kapalit ★ | Donguri System Team 5ちゃんねる