プログラミング言語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/
Ruby 初心者スレッド Part 63
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
2018/04/17(火) 17:46:57.87ID:GYuBFjQi762デフォルトの名無しさん
2018/08/19(日) 13:31:40.72ID:CkJFwlQB これが参考になると思う
https://pbs.twimg.com/media/DjCWzQYU4AAng_H.jpg
https://pbs.twimg.com/media/DjCWzQYU4AAng_H.jpg
763デフォルトの名無しさん
2018/08/19(日) 13:35:43.71ID:plhuPGbS web上では見たことあるけど
出版物上で観るのは初めて感
出版物上で観るのは初めて感
764デフォルトの名無しさん
2018/08/19(日) 14:15:20.06ID:qqMgBYp8 なんやこれw
765デフォルトの名無しさん
2018/08/19(日) 14:21:25.19ID:OBahve6K プログラミング経験0ならこっちから始めたほうが良くないか?
https://www.nhk.or.jp/school/programming/start/index.html
https://www.nhk.or.jp/school/programming/start/index.html
766745
2018/08/19(日) 14:30:49.79ID:wM6XArJ0 言語の初心者用の本は、PCの初心者用の本じゃない!
言語の本はあくまで、その言語を知らないだけで、
環境変数とか、絶対・相対パスとか、cd, ls などの基本コマンド、
PowerShell の使い方などは、知っている事が前提
こういうOS の知識を、教えている本はない。
それを書けば、言語を説明するページが減るから、書かない
つまり言語の本は、PCの初心者を対象としていない!
既に、OS の知識はあって、その言語だけを知らない人向け
言語の本はあくまで、その言語を知らないだけで、
環境変数とか、絶対・相対パスとか、cd, ls などの基本コマンド、
PowerShell の使い方などは、知っている事が前提
こういうOS の知識を、教えている本はない。
それを書けば、言語を説明するページが減るから、書かない
つまり言語の本は、PCの初心者を対象としていない!
既に、OS の知識はあって、その言語だけを知らない人向け
767デフォルトの名無しさん
2018/08/19(日) 14:42:48.43ID:OBahve6K768745
2018/08/19(日) 14:46:26.87ID:wM6XArJ0 762 みたいな本を書いている奴は、勉強を何もわかっていない。
なぜ生徒が、プログラミングを嫌うか
言語には、勉強する順番がある。
小学生にいきなり、大学教育をしても無駄。
小中高大学と、個人の成長には、勉強する順番が重要。
知識を下から、積み重ねていかないといけない
1. 動的・軽量言語
Ruby, Python, JavaScript
2. 静的言語
Java, Kotlin, C#
3. ポインターのある言語
C, C++
今の大学教育では、C から教えているから、皆プログラミングはしょーもないってやめる。
これは、Rubyの女神・女優の池澤あやかが言ってる
なぜ生徒が、プログラミングを嫌うか
言語には、勉強する順番がある。
小学生にいきなり、大学教育をしても無駄。
小中高大学と、個人の成長には、勉強する順番が重要。
知識を下から、積み重ねていかないといけない
1. 動的・軽量言語
Ruby, Python, JavaScript
2. 静的言語
Java, Kotlin, C#
3. ポインターのある言語
C, C++
今の大学教育では、C から教えているから、皆プログラミングはしょーもないってやめる。
これは、Rubyの女神・女優の池澤あやかが言ってる
769デフォルトの名無しさん
2018/08/19(日) 15:14:41.19ID:CsoxUTBy770デフォルトの名無しさん
2018/08/19(日) 15:33:42.02ID:aRJ7Tr37 >>753
つまり、Python信者は他言語スレまで出張してPython推しするほど必死だと
つまり、Python信者は他言語スレまで出張してPython推しするほど必死だと
771デフォルトの名無しさん
2018/08/19(日) 15:39:09.36ID:EuNb7t2q772デフォルトの名無しさん
2018/08/19(日) 16:00:26.64ID:wM6XArJ0 ラズパイでは、Python も良いけど
ウェブ系では、Ruby が強い。
Rails から、Vue.js, React も使える
ウェブ系では、Ruby が強い。
Rails から、Vue.js, React も使える
773デフォルトの名無しさん
2018/08/19(日) 16:15:56.38ID:+KX+Ofsb ルビィストとか世界中が失笑してるから
774デフォルトの名無しさん
2018/08/19(日) 16:29:07.49ID:CsoxUTBy >>773
失笑って言葉の意味まちがってるぞハゲ
失笑って言葉の意味まちがってるぞハゲ
775デフォルトの名無しさん
2018/08/19(日) 16:35:26.45ID:plhuPGbS プッ
776デフォルトの名無しさん
2018/08/19(日) 16:46:14.03ID:j789RV8B >>770
言語なんか複数使えて適宜使い分けられて当然でしょ
言語なんか複数使えて適宜使い分けられて当然でしょ
777デフォルトの名無しさん
2018/08/19(日) 17:01:32.24ID:aRJ7Tr37779デフォルトの名無しさん
2018/08/19(日) 20:07:29.27ID:xR7/CWZ6 俺はPythonよりRubyの方がずっと好きだけど
(Railsプログラマーを目指してるんでもなきゃ)
これから何か始めようって人には断然Pythonを薦めるし
自分のお気に入りだからってむやみにRubyを薦める奴の見識は疑うね
(Railsプログラマーを目指してるんでもなきゃ)
これから何か始めようって人には断然Pythonを薦めるし
自分のお気に入りだからってむやみにRubyを薦める奴の見識は疑うね
780デフォルトの名無しさん
2018/08/19(日) 20:49:04.45ID:OBahve6K CASL II/COMET IIでアセンブラの基本を学んでいるとポインタで死ぬことはなくなる。
序でに基本情報の試験にそのまま使える。
https://www.jitec.ipa.go.jp/1_20casl2/casl2dl_001.html
序でに基本情報の試験にそのまま使える。
https://www.jitec.ipa.go.jp/1_20casl2/casl2dl_001.html
782デフォルトの名無しさん
2018/08/19(日) 22:30:32.56ID:aRJ7Tr37 >>779
つまり:
俺はRubyよりPythonの方がずっと好きだけど
(機械学習プログラマーを目指してるんでもなきゃ)
これから何か始めようって人にRubyを薦めることもあるけど
自分のお気に入りだからってむやみにPythonを薦める奴の見識は疑うね
ってことですね
Python信者の皆様、お勤めご苦労様です
つまり:
俺はRubyよりPythonの方がずっと好きだけど
(機械学習プログラマーを目指してるんでもなきゃ)
これから何か始めようって人にRubyを薦めることもあるけど
自分のお気に入りだからってむやみにPythonを薦める奴の見識は疑うね
ってことですね
Python信者の皆様、お勤めご苦労様です
783デフォルトの名無しさん
2018/08/19(日) 22:56:05.02ID:xR7/CWZ6784デフォルトの名無しさん
2018/08/19(日) 23:09:03.67ID:wM6XArJ0 >>780-781
2人のイリノイ大学生が使った、LLVM に世界が飛びついたけど、
日本では既に情報処理資格に、仮想アセンブラ CASL2 があった
LLVM/Clang 実践活用 ハンドブック、出村成和、2014
詳説 Cポインタ、2013、オライリー・ジャパン
OSのすべての機能を学びたいなら、ムック本の
Linuxエンジニア養成読本、第3版、2016
2人のイリノイ大学生が使った、LLVM に世界が飛びついたけど、
日本では既に情報処理資格に、仮想アセンブラ CASL2 があった
LLVM/Clang 実践活用 ハンドブック、出村成和、2014
詳説 Cポインタ、2013、オライリー・ジャパン
OSのすべての機能を学びたいなら、ムック本の
Linuxエンジニア養成読本、第3版、2016
785デフォルトの名無しさん
2018/08/19(日) 23:56:53.17ID:/dQ+RHN7 >>752
プログラミングの基本って、
・変数への代入、関数(メソッド)の使い方
・配列、ハッシュ(連想配列)とかのデータ構造
・値の比較と条件分岐(if文とかswitch文)
・繰り返し処理(do while文とか)
こういうのだけど、これはどの言語にもあるものだから、
一度覚えればほぼそのまま使い回しがきく。
(if文じゃなくてif式、とか若干の違いを言語ごとに覚えるだけ)
あとは「オブジェクト指向」の考え方というか、
概念みたいなのを理解できてれば、
どの言語に移ってもそんなに苦労せず使えるようになる。
で、そういう基本は、C++でもJavaでもRubyでもPythonでもJavaScriptでも、
どれやったって学べるわけだけど、
最近は3DCGのアプリとか、機械学習とかのジャンルで
Pythonが採用されるケースが多いので、
ゼロから始めるなら使い道の多いPython、みたいな意見がどうしても多くなる。
(Rubyは使いやすい言語だけど、Webサイト構築以外での採用例があまりない)
けど、「自分のやりたいこと」がなにかを決めた上で、
「それを最短距離でできる言語はどれか」を
詳しい人に教えてもらって始めるのが一番おすすめ。
(自分のやりたいことがC++でないとできないなら、最初からC++をやるべき)
特にやりたいことがなければ、
本屋で各言語の入門書をいろいろ立ち読みして、
自分が理解できそうな言葉で書いてあるやつを選んで始めれば、と思う。
ちなみにPythonもJavaも、初心者が学ぶ言語としては
悪くない選択肢です。
プログラミングの基本って、
・変数への代入、関数(メソッド)の使い方
・配列、ハッシュ(連想配列)とかのデータ構造
・値の比較と条件分岐(if文とかswitch文)
・繰り返し処理(do while文とか)
こういうのだけど、これはどの言語にもあるものだから、
一度覚えればほぼそのまま使い回しがきく。
(if文じゃなくてif式、とか若干の違いを言語ごとに覚えるだけ)
あとは「オブジェクト指向」の考え方というか、
概念みたいなのを理解できてれば、
どの言語に移ってもそんなに苦労せず使えるようになる。
で、そういう基本は、C++でもJavaでもRubyでもPythonでもJavaScriptでも、
どれやったって学べるわけだけど、
最近は3DCGのアプリとか、機械学習とかのジャンルで
Pythonが採用されるケースが多いので、
ゼロから始めるなら使い道の多いPython、みたいな意見がどうしても多くなる。
(Rubyは使いやすい言語だけど、Webサイト構築以外での採用例があまりない)
けど、「自分のやりたいこと」がなにかを決めた上で、
「それを最短距離でできる言語はどれか」を
詳しい人に教えてもらって始めるのが一番おすすめ。
(自分のやりたいことがC++でないとできないなら、最初からC++をやるべき)
特にやりたいことがなければ、
本屋で各言語の入門書をいろいろ立ち読みして、
自分が理解できそうな言葉で書いてあるやつを選んで始めれば、と思う。
ちなみにPythonもJavaも、初心者が学ぶ言語としては
悪くない選択肢です。
786デフォルトの名無しさん
2018/08/20(月) 00:34:57.15ID:6r2cvJMF787デフォルトの名無しさん
2018/08/20(月) 01:03:33.27ID:OYF5TU4U ツール組み込みのPythonは未だに2だったりするんじゃないの?
788デフォルトの名無しさん
2018/08/20(月) 01:43:39.45ID:ul3gEuNL 組み込みだとLua、mruby、JavaScriptあたりも使われている
789デフォルトの名無しさん
2018/08/20(月) 06:59:19.60ID:1lIz0FhB しれっとmrubyを混ぜるな
mrubyなんか誰も使ってない
mrubyなんか誰も使ってない
790デフォルトの名無しさん
2018/08/20(月) 10:03:01.56ID:1nsldRzy まぁ古参はC、下手したらアセンブラからの経験者で
トレンドに合わせてステップアップしながら言語を覚えただろうから
初心者が何の言語から勉強するべきかなど分かるはずもないんだよな
シンプルで覚えることが少なく今なお第一線級で活躍している言語なら間違いなくC言語
C言語ほどシンプルで実用性のある言語はない
OSが書かれてる本物の言語ってだけでもモチベーションになる
全ての実用言語の元になってると言えるし、最初にやるには良い言語だ
良くも悪くも
一方で楽しさ優先なら間違いなくC#でポトペタ開発でしょ
めちゃ楽しいが、WPFなどの背景にある仕組みの複雑さに挫折するかも
でも触ってて楽しいだろうなぁ、画面作るだけならマウスだけで出来るし
あぁRubyとかPythonとかは寄り道みたいなものだから最初にしなくてよいよ、ハマるから
動的型のスクリプト言語など色物なのに、最初にやるとか、どうかと
俺は絶対おすすめしないね、プログラミング言語の本流じゃないからね
特にここ10年は静的型が本流ってみんな知ってるだろ、いじわるめが
トレンドに合わせてステップアップしながら言語を覚えただろうから
初心者が何の言語から勉強するべきかなど分かるはずもないんだよな
シンプルで覚えることが少なく今なお第一線級で活躍している言語なら間違いなくC言語
C言語ほどシンプルで実用性のある言語はない
OSが書かれてる本物の言語ってだけでもモチベーションになる
全ての実用言語の元になってると言えるし、最初にやるには良い言語だ
良くも悪くも
一方で楽しさ優先なら間違いなくC#でポトペタ開発でしょ
めちゃ楽しいが、WPFなどの背景にある仕組みの複雑さに挫折するかも
でも触ってて楽しいだろうなぁ、画面作るだけならマウスだけで出来るし
あぁRubyとかPythonとかは寄り道みたいなものだから最初にしなくてよいよ、ハマるから
動的型のスクリプト言語など色物なのに、最初にやるとか、どうかと
俺は絶対おすすめしないね、プログラミング言語の本流じゃないからね
特にここ10年は静的型が本流ってみんな知ってるだろ、いじわるめが
791デフォルトの名無しさん
2018/08/20(月) 10:13:16.57ID:1nsldRzy あと、環境設定がどうとか、約一名盛り上がっているようだが
そういう人にはVisualStudioがおすすめだろう
これだけ完成度の高いソフトが無料で使えるのは凄すぎる
トータルで言えば、初心者におすすめなのは
VisualStudioとC#でポトペタ開発って事になるのかな
でもまあ、C#もバージョンがどんどん上がって今やとても複雑な言語だからなぁ
ソフトウェア業界が10年20年かかって常識にしてきたことを
一気に追体験しようというのはなかなか酷だわな
本当はC言語とWin32APIあたりから始めるのがシンプルで理想なんだが
モチベーションがつづくかな、それさえ気にしなければよい選択なんだが
どちらにせよ、RubyやPythonのような本流主流じゃない言語を最初にやるのは止めたほうが良い
筋が悪い、悪かった、というか悪いお手本みたいな言語だから
そういう人にはVisualStudioがおすすめだろう
これだけ完成度の高いソフトが無料で使えるのは凄すぎる
トータルで言えば、初心者におすすめなのは
VisualStudioとC#でポトペタ開発って事になるのかな
でもまあ、C#もバージョンがどんどん上がって今やとても複雑な言語だからなぁ
ソフトウェア業界が10年20年かかって常識にしてきたことを
一気に追体験しようというのはなかなか酷だわな
本当はC言語とWin32APIあたりから始めるのがシンプルで理想なんだが
モチベーションがつづくかな、それさえ気にしなければよい選択なんだが
どちらにせよ、RubyやPythonのような本流主流じゃない言語を最初にやるのは止めたほうが良い
筋が悪い、悪かった、というか悪いお手本みたいな言語だから
792デフォルトの名無しさん
2018/08/20(月) 10:21:38.59ID:1nsldRzy 手続き型言語でプログラム書くなら、どのみちメモリのことは意識しなければならないし
ポインタが分からないって時点でプログラマには向いてないというか何というか
ただ、結局、安全かどうかなんだよ
その点C言語は安全とは言い難いが
意図せずヌルポするのはヌル安全の機能が無い言語ではどれも同じようなものじゃろ
その観点から言うと、単なるタイポすらコンパイル時にチェックしてくれない
動的型言語は初心者に進めるのは止めたほうがよい
初心者ほどタイポするだろうからな
それが言いたかった
ポインタが分からないって時点でプログラマには向いてないというか何というか
ただ、結局、安全かどうかなんだよ
その点C言語は安全とは言い難いが
意図せずヌルポするのはヌル安全の機能が無い言語ではどれも同じようなものじゃろ
その観点から言うと、単なるタイポすらコンパイル時にチェックしてくれない
動的型言語は初心者に進めるのは止めたほうがよい
初心者ほどタイポするだろうからな
それが言いたかった
793デフォルトの名無しさん
2018/08/20(月) 10:42:27.70ID:Xyz1Vf46 今北産業
794デフォルトの名無しさん
2018/08/20(月) 11:29:47.95ID:fD9Nu4LZ 長い上に気持ち悪い
やっぱ長文はNGに限る
やっぱ長文はNGに限る
795デフォルトの名無しさん
2018/08/20(月) 14:25:35.47ID:zY8py34F 自分語りするおっさん登場
796デフォルトの名無しさん
2018/08/20(月) 15:18:21.21ID:qTCaqW3V797デフォルトの名無しさん
2018/08/20(月) 15:23:07.09ID:GIvuOFoC798デフォルトの名無しさん
2018/08/20(月) 15:30:49.82ID:1nsldRzy とにかく、初心者はプログラムを間違えるものなんだよ
一発で動くことは先ずない
それならコンパイルの時点でよりたくさんのエラーを検出してくれた方が学習が捗るだろ?
初心者にRubyなんか薦めるなって事だ
その人を蹴落としたいなら別だが
一発で動くことは先ずない
それならコンパイルの時点でよりたくさんのエラーを検出してくれた方が学習が捗るだろ?
初心者にRubyなんか薦めるなって事だ
その人を蹴落としたいなら別だが
799デフォルトの名無しさん
2018/08/20(月) 16:35:54.31ID:fD9Nu4LZ REPLにコンバイルもくそもねえだろ
800デフォルトの名無しさん
2018/08/20(月) 16:37:08.70ID:cqDBbZn3 まず多少なりとも動いてくれたほうが楽しいので学習が捗りました(経験談
801デフォルトの名無しさん
2018/08/20(月) 16:43:09.37ID:GIvuOFoC >>799
重要なのはプログラム実行前ってことだよ
静的とも言う。
実行した後はいろんな状態があり得るが
実行前というのは状態は一つだ。
つまりいろんな状態にしなければわからないというのは
問題を発見するまでに果てしなく時間がかかるということ
だからなるべく実行前にわかるようにするのが良い
重要なのはプログラム実行前ってことだよ
静的とも言う。
実行した後はいろんな状態があり得るが
実行前というのは状態は一つだ。
つまりいろんな状態にしなければわからないというのは
問題を発見するまでに果てしなく時間がかかるということ
だからなるべく実行前にわかるようにするのが良い
802デフォルトの名無しさん
2018/08/20(月) 16:47:09.67ID:fD9Nu4LZ いやeval getsするだけで可能性は可算無限でしょ
eval gets
p A
# input
A = 'hoge'
とかどうすんのよ
eval gets
p A
# input
A = 'hoge'
とかどうすんのよ
803デフォルトの名無しさん
2018/08/20(月) 17:27:42.07ID:dpL1lU0R804デフォルトの名無しさん
2018/08/20(月) 17:45:25.99ID:GIvuOFoC >>803
Smalltalkのコンパイルっていつやるの?
Smalltalkのコンパイルっていつやるの?
805デフォルトの名無しさん
2018/08/20(月) 17:46:25.89ID:GIvuOFoC プログラム実行前って言ってるのに理解してなさそうw
806デフォルトの名無しさん
2018/08/20(月) 18:09:19.60ID:1nsldRzy 何だったらコンパイル時どころか
最近のエディタだったら書いてる途中でリアルタイムで文法チェックするからな
間違ってたら波線とか出る
そういう状況なので、なるたけ多くのことが静的にわかったほうが良いんだよ
実行時にエラーにするなら馬鹿にでもできる!!って思うし
やってみてダメでしたってな、バカっぽいでしょ
事前に分かるから賢い
最近のエディタだったら書いてる途中でリアルタイムで文法チェックするからな
間違ってたら波線とか出る
そういう状況なので、なるたけ多くのことが静的にわかったほうが良いんだよ
実行時にエラーにするなら馬鹿にでもできる!!って思うし
やってみてダメでしたってな、バカっぽいでしょ
事前に分かるから賢い
807デフォルトの名無しさん
2018/08/20(月) 18:38:05.12ID:NYBtZzEL >>804
メソッドを書き終わった後(accept、つまりコンパイル指示を出したとき)だよwwww
メソッドを書き終わった後(accept、つまりコンパイル指示を出したとき)だよwwww
808デフォルトの名無しさん
2018/08/20(月) 18:44:32.10ID:GIvuOFoC809デフォルトの名無しさん
2018/08/20(月) 18:50:47.34ID:fD9Nu4LZ このスレって質問者をほっぽりだして変なのがしゃしゃり出てくること度々あるよな
810デフォルトの名無しさん
2018/08/20(月) 19:32:53.62ID:NYBtZzEL >>808
IDEでJavaソースコンパイルするときjavacもIDEも動いてないっての?wwww
IDEでJavaソースコンパイルするときjavacもIDEも動いてないっての?wwww
811デフォルトの名無しさん
2018/08/20(月) 20:37:42.02ID:GIvuOFoC812デフォルトの名無しさん
2018/08/20(月) 20:43:46.47ID:NYBtZzEL814デフォルトの名無しさん
2018/08/20(月) 20:56:45.04ID:GIvuOFoC ローカル変数だけだったりしてねw
近くの情報は周辺を見ればいいだけだから問題はすぐに分かるんですよ。
遠くの情報、例えばインターフェースが一致しているかどうかが
わからないと使い物になりませんね
人間がやると大変なものこそコンピュータにやらせないと
近くの情報は周辺を見ればいいだけだから問題はすぐに分かるんですよ。
遠くの情報、例えばインターフェースが一致しているかどうかが
わからないと使い物になりませんね
人間がやると大変なものこそコンピュータにやらせないと
815デフォルトの名無しさん
2018/08/20(月) 21:35:34.32ID:1nsldRzy なんで静的型の後追いみたいなことで苦労してるんだろうね
初めから静的型言語使えばよいだけなのにね
怠惰を求めて勤勉に行き着くってやつなのかね
動的型全体がそうだよね
処理系書いてる連中も、言語使ってる連中も
楽しようとして最終的に苦労する
なにこれコワイ
初めから静的型言語使えばよいだけなのにね
怠惰を求めて勤勉に行き着くってやつなのかね
動的型全体がそうだよね
処理系書いてる連中も、言語使ってる連中も
楽しようとして最終的に苦労する
なにこれコワイ
816デフォルトの名無しさん
2018/08/20(月) 21:43:42.44ID:NYBtZzEL >>813
構文木にできれば(ローカルに限らず)未宣言の変数だとか未知のメソッド呼び出しだとか程度なら
簡単に分かる
Lispみたいに構文も単純なら構文ミスも指摘して修正候補を提示することも可能(例:InterlispとかのDWIM)
構文木にできれば(ローカルに限らず)未宣言の変数だとか未知のメソッド呼び出しだとか程度なら
簡単に分かる
Lispみたいに構文も単純なら構文ミスも指摘して修正候補を提示することも可能(例:InterlispとかのDWIM)
818デフォルトの名無しさん
2018/08/20(月) 22:15:42.75ID:NYBtZzEL820デフォルトの名無しさん
2018/08/20(月) 22:29:16.58ID:1nsldRzy そんなの珍しくないよ
JavaScriptとかな
変数宣言には二つの役割があって、一つは型を宣言することだけど
もうひとつスコープを宣言するって役割もある
だから動的型言語でも素直なレキシカルスコープが欲しければ変数宣言があってもよい
一方で変数への最初の代入を変数宣言の代わりにする言語は
だいたいスコープがバグってる
ただの変数への代入か、新たな変数を宣言したのか、区別がつかないからなwww
それでnonlocalだの@だの、ダサいだろ?
ま、そういうわけで、やっぱり変数宣言は有ったほうが良いし
どうせ変数宣言するなら型を書いても良い気がするし
動的型言語が衰退するのは当たり前だったわ
なんせ、ありとあらゆるスジが悪いんだよ
JavaScriptとかな
変数宣言には二つの役割があって、一つは型を宣言することだけど
もうひとつスコープを宣言するって役割もある
だから動的型言語でも素直なレキシカルスコープが欲しければ変数宣言があってもよい
一方で変数への最初の代入を変数宣言の代わりにする言語は
だいたいスコープがバグってる
ただの変数への代入か、新たな変数を宣言したのか、区別がつかないからなwww
それでnonlocalだの@だの、ダサいだろ?
ま、そういうわけで、やっぱり変数宣言は有ったほうが良いし
どうせ変数宣言するなら型を書いても良い気がするし
動的型言語が衰退するのは当たり前だったわ
なんせ、ありとあらゆるスジが悪いんだよ
821デフォルトの名無しさん
2018/08/20(月) 22:30:09.56ID:K5IFIEIw >>819
Rubyのメソッドの仮引数やブロック変数は宣言でないと?
Rubyのメソッドの仮引数やブロック変数は宣言でないと?
>>821
def f(xyz)
"Hello, #{abc}!"
end
というメソッド定義があって
本当なら変数として xyz のところを間違えて abc と書いてしまった
というシチュエーションでも、エラーがでないでしょう?
def f(xyz)
"Hello, #{abc}!"
end
というメソッド定義があって
本当なら変数として xyz のところを間違えて abc と書いてしまった
というシチュエーションでも、エラーがでないでしょう?
823デフォルトの名無しさん
2018/08/20(月) 22:52:22.44ID:KNimMRpP >>823
「宣言を課す」というのは「宣言をしていない変数は変数として認識しない」という意味なのでは?
「宣言を課す」というのは「宣言をしていない変数は変数として認識しない」という意味なのでは?
825デフォルトの名無しさん
2018/08/20(月) 23:22:30.48ID:At189hOD ◆QZaw55cn4cは会話が成り立たないからスルーしろ
826デフォルトの名無しさん
2018/08/20(月) 23:23:22.96ID:At189hOD ついでに長文ガイジもNGつっこんどけ
827デフォルトの名無しさん
2018/08/20(月) 23:55:25.50ID:PXXr8Lzz >>824
Rubyはそうしていないというだけで、コンパイル時に
abcが未代入(代入操作で宣言を兼ねるRubyでは未宣言にあたる)である事実や
あるいはメソッドとして未定義である事実をもってxyzとすべき記述のミスでは?との判断を下し
そうであれば修正を促すことは可能だろう?
予め釘を刺しておくけど、ミスの可能性があることとコンパイル可能であることとはまた別の話だからな!
Rubyはそうしていないというだけで、コンパイル時に
abcが未代入(代入操作で宣言を兼ねるRubyでは未宣言にあたる)である事実や
あるいはメソッドとして未定義である事実をもってxyzとすべき記述のミスでは?との判断を下し
そうであれば修正を促すことは可能だろう?
予め釘を刺しておくけど、ミスの可能性があることとコンパイル可能であることとはまた別の話だからな!
828デフォルトの名無しさん
2018/08/21(火) 00:12:58.46ID:TQPukUfs829デフォルトの名無しさん
2018/08/21(火) 00:21:47.25ID:kxzeRRBS 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()
だから、ES2015(ES6) で、let, const を作って、ブロックスコープも作った
this の挙動もおかしい。
だから、Haxe のthisは、常にインスタンスを指すように変えられた
Python でも、nonlocal とか、頭おかしいw
Ruby では、関数スコープ・ブロックスコープの2つがあるから、バグりにくい
a = 1
def f
puts a # ここで、未定義の変数を参照してエラー
puts a = 2
end
f()
831デフォルトの名無しさん
2018/08/21(火) 01:41:26.90ID:WMlArXdo832デフォルトの名無しさん
2018/08/21(火) 01:47:26.07ID:kxzeRRBS メタプログラミング Ruby 第2版、2015
で紹介している、Module#define_method(), method_missing() とかだろ?
で紹介している、Module#define_method(), method_missing() とかだろ?
833デフォルトの名無しさん
2018/08/21(火) 04:51:25.59ID:kxzeRRBS 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
uri = URI.parse picture_url
file_name = File.basename(uri.path) # ファイル名
file_extname = File.extname(file_name) # 拡張子
後ろに「:orig#jpg」が付いていても、ファイル名が正確に抜き出せる!
DlCjEV6V4AUM9Kl.jpg
834デフォルトの名無しさん
2018/08/21(火) 05:11:45.98ID:dhW5/kUC >>833
バグじゃんそれ
バグじゃんそれ
835デフォルトの名無しさん
2018/08/21(火) 05:20:08.29ID:dhW5/kUC >>831
そうそう。だからRubyじゃコンパイル時にわからないんだよ。
例えば以下のように、一行目にexitしてしまえば
その下にいくら変なコードがってもコンパイル時にチェックなんかできない
exit
aaa = 1312
class Hoge
def hoge
end
end
h = Hoge.new
h.hage
i = IIII.new
言い換えると、動的言語ではファイル単位でしかコードを見てないので
少なくともファイル外にある情報はわからない
検出できるのは文法エラーぐらいだよ
残念なことにね。それが現実。
そうそう。だからRubyじゃコンパイル時にわからないんだよ。
例えば以下のように、一行目にexitしてしまえば
その下にいくら変なコードがってもコンパイル時にチェックなんかできない
exit
aaa = 1312
class Hoge
def hoge
end
end
h = Hoge.new
h.hage
i = IIII.new
言い換えると、動的言語ではファイル単位でしかコードを見てないので
少なくともファイル外にある情報はわからない
検出できるのは文法エラーぐらいだよ
残念なことにね。それが現実。
836デフォルトの名無しさん
2018/08/21(火) 07:09:45.22ID:9qt5lkVf だからさぁRubyが駄目ってとこを動的型言語の限界だと一般化しないでくれ
話がまったく噛み合わない
話がまったく噛み合わない
837デフォルトの名無しさん
2018/08/21(火) 07:32:38.20ID:9qt5lkVf838デフォルトの名無しさん
2018/08/21(火) 07:35:37.03ID:Y1HyydAv ケンカはやめて
839デフォルトの名無しさん
2018/08/21(火) 07:40:39.17ID:9qt5lkVf840デフォルトの名無しさん
2018/08/21(火) 08:20:58.17ID:dhW5/kUC まああれだ、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というメソッドはないから実行時前にエラーを検出できるはずだ
そうならないので、未定義メソッドの検出はできない。
反論はコードでどうぞ
ここでオンラインで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というメソッドはないから実行時前にエラーを検出できるはずだ
そうならないので、未定義メソッドの検出はできない。
反論はコードでどうぞ
841デフォルトの名無しさん
2018/08/21(火) 12:22:18.03ID:tnY8+vhG ここにMatz呼べば全て解決じゃん
どうせ見てると思うぞ
どうせ見てると思うぞ
842デフォルトの名無しさん
2018/08/21(火) 12:52:50.65ID:eDZ5kOgA >>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”
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”
843デフォルトの名無しさん
2018/08/21(火) 12:54:39.77ID:qWx5Zods >>809
どこにでもいる
どこにでもいる
844デフォルトの名無しさん
2018/08/21(火) 12:59:22.19ID:OZUNGsZn 「いまさらRuby」
「Rubyで学ぶ機械学習」
あたりを誰か書いてよ
「Rubyで学ぶ機械学習」
あたりを誰か書いてよ
845デフォルトの名無しさん
2018/08/21(火) 13:05:22.31ID:qWx5Zods 「間違ってRubyを始めてしまった人へ贈るPython入門」
もいいな
もいいな
846デフォルトの名無しさん
2018/08/21(火) 18:59:29.56ID:WMlArXdo Pythonは、試してみたい気持ちもあるものの、よろしくないところもいくらか知ってるので、微妙なんだよなー。
そういえば、ボスが引退するそうだが、なにか変わんのかねえ。
そういえば、ボスが引退するそうだが、なにか変わんのかねえ。
>>839
個人的には ruby を改良しようといろいろ画策しています、宣言付き ruby とか
動的型付け言語にて変数宣言を導入すればずいぶんと使い勝手も変わるだろうと想像しています
そういう視点でおねがいします
個人的には ruby を改良しようといろいろ画策しています、宣言付き ruby とか
動的型付け言語にて変数宣言を導入すればずいぶんと使い勝手も変わるだろうと想像しています
そういう視点でおねがいします
848デフォルトの名無しさん
2018/08/21(火) 19:17:47.11ID:2YpoFUMY 画策wwwwww
それでプルリクでもしてこいよwwwwwww
それでプルリクでもしてこいよwwwwwww
849デフォルトの名無しさん
2018/08/21(火) 20:58:28.00ID:zx3sEUVJ >>847
Rubyは変数宣言を省略したことが原因の仕様がらみのトラブルが少なくない
そんな犠牲をはらっても(型も含め)宣言を書かせないことがMatzの優先事項の上位にあるわけ
キミの「改良」案は何を今更だしそもそもMatzや取り巻きが耳を貸す可能性はゼロだろうね
Rubyは変数宣言を省略したことが原因の仕様がらみのトラブルが少なくない
そんな犠牲をはらっても(型も含め)宣言を書かせないことがMatzの優先事項の上位にあるわけ
キミの「改良」案は何を今更だしそもそもMatzや取り巻きが耳を貸す可能性はゼロだろうね
850デフォルトの名無しさん
2018/08/21(火) 21:02:49.75ID:PnXfa+5/ 例えばどんなトラブル?
851デフォルトの名無しさん
2018/08/21(火) 22:37:38.64ID:WMlArXdo >>850
スコープ
スコープ
852デフォルトの名無しさん
2018/08/22(水) 00:20:47.79ID:h82tfzI1 結局、言語を改良していくと、Haxe になる
マルチ言語・マルチプラットフォーム、
this の挙動を変えて、型推論・パターンマッチ・引数付き列挙
Ruby は、JS, Python などど違って、関数スコープ・ブロックスコープがあって、
関数スコープは強固だから、変数を内側へ通さない
だから変数宣言が無くても、バグらない
ES2015(ES6)でも、ブロックスコープが採用された。
変数宣言も、以前からのvar に加えて、const, let も作られた
マルチ言語・マルチプラットフォーム、
this の挙動を変えて、型推論・パターンマッチ・引数付き列挙
Ruby は、JS, Python などど違って、関数スコープ・ブロックスコープがあって、
関数スコープは強固だから、変数を内側へ通さない
だから変数宣言が無くても、バグらない
ES2015(ES6)でも、ブロックスコープが採用された。
変数宣言も、以前からのvar に加えて、const, let も作られた
853デフォルトの名無しさん
2018/08/22(水) 05:07:26.61ID:O2PM/1qE >>852
なんで関数スコープとかいう小さい話してるんだ?
小さいものであれば、少し頑張れば対応可能なのは
わかってるんだよ。もっと広い範囲、オブジェクト間の通信とか
プロジェクト全体のレベルでバグが発生するから型がいるんだよ
なんで関数スコープとかいう小さい話してるんだ?
小さいものであれば、少し頑張れば対応可能なのは
わかってるんだよ。もっと広い範囲、オブジェクト間の通信とか
プロジェクト全体のレベルでバグが発生するから型がいるんだよ
854デフォルトの名無しさん
2018/08/22(水) 07:57:35.69ID:g+4f8QiO855デフォルトの名無しさん
2018/08/23(木) 11:48:39.81ID:muib0HF0 反論はコードで(キリッ
856デフォルトの名無しさん
2018/08/23(木) 11:58:19.26ID:ncZgpeak >>855
だからコード出せって
だからコード出せって
857デフォルトの名無しさん
2018/08/23(木) 12:08:41.61ID:29gBK1aD 言い出しっぺの法則
858デフォルトの名無しさん
2018/08/23(木) 13:27:22.00ID:muib0HF0 >>856
何のコード?
何のコード?
859デフォルトの名無しさん
2018/08/26(日) 01:12:35.83ID:iN7pYJOp undef式ってどういうときに使うの?
860デフォルトの名無しさん
2018/08/26(日) 10:37:18.06ID:0HcSjLFv 教えてください!
[パーフェクトRuby]と[プロを目指す人のためのRuby入門 ]はどちらがオススメですか?
当方3ステップ本を学習中、仕事でRubyを使えるようになりたいと思っています。
よろしくお願いします!!
[パーフェクトRuby]と[プロを目指す人のためのRuby入門 ]はどちらがオススメですか?
当方3ステップ本を学習中、仕事でRubyを使えるようになりたいと思っています。
よろしくお願いします!!
861デフォルトの名無しさん
2018/08/26(日) 12:09:12.86ID:mLZLsxB6 >>860
仕事でRubyやりたいならRails以外の選択肢はないからいきなりRailsやるのがいいよ
Rails DSLは別言語なレベルにまでカスタマイズされてるから、最初に素のRubyをやるとかえって混乱するのでお勧めできない
あとはLinux使ったWebサイト運用構築のインフラ本を一冊と、AWSの本一冊かな
WebやるわけじゃないんならPythonで勝ち馬に乗ろう
仕事でRubyやりたいならRails以外の選択肢はないからいきなりRailsやるのがいいよ
Rails DSLは別言語なレベルにまでカスタマイズされてるから、最初に素のRubyをやるとかえって混乱するのでお勧めできない
あとはLinux使ったWebサイト運用構築のインフラ本を一冊と、AWSの本一冊かな
WebやるわけじゃないんならPythonで勝ち馬に乗ろう
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 習政権、高市首相への態度硬化 台湾有事発言で連日非難 中国 ★11 [ぐれ★]
- 日本損失1.7兆円に修正 中国渡航自粛の影響試算 [蚤の市★]
- 国内ホテル、既にキャンセルも 訪日客関連業界、事態見守る ★3 [蚤の市★]
- 「どうしようもない」 ため息つくアジアの玄関口 中国の訪日自粛で−福岡市 [蚤の市★]
- NHK、受信料の未払い世帯に督促強化へ 民事手続きの新組織を設置 差し押さえなどの強制執行も ★2 [1ゲットロボ★]
- 橋下徹氏 外務省幹部の訪中受け「口だけ番長」へ痛烈指摘 「喧嘩は日本の完敗…なんとかっこ悪い日本か」 [冬月記者★]
- 【実況】博衣こよりのえちえち朝こよ🧪 ★2
- 【実況】博衣こよりのえちえち朝こよ🧪
- Full Count、THE ANSWER、ENCOUNT、Hint-Pot… 日本人をホルホル漬けにしてくれる「Creative2」サイトの魅力 [452836546]
- カカロット、腰痛い
- 【!?】高市早苗「靖国神社電撃参拝プラン」浮上!これもう戦争だろ… [481941988]
- 【超悲報】中国への武力行使、世論調査で「賛成」「どちらかといえば賛成」48.8% 「反対」「どちらかといえば反対」の44.2%を上回る [314039747]
