Ruby 初心者スレッド Part 66

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん (ワッチョイ 2a2c-RM0q)
垢版 |
2020/01/04(土) 01:15:34.30ID:X7t3Qsuc0
プログラミング言語 Rubyについての、初心者向けスレです。質問・要望・雑談などをどうぞ

質問するときは、OSやRubyのバージョン、エラーメッセージを書いて下さい。
Ruby on Rails については、WEBプログラミング板で

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

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

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

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

Ruby コミュニティ公式
https://www.ruby-lang.org/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
2020/01/17(金) 15:51:59.65ID:0sb73h15M
Goは言語自体の難易度はRubyより低い
でもGoエンジニアってGo書けるだけじゃなくてAWSやLinuxやコンテナを使いこなすことが前提なので、
オレRoRやってますウェーイ君なんかとは比較にならないくらい高い技術力と幅広い知見が求められるんだよ
彼らは様々な言語を経験してきた末に「コードなどシステムの1要素に過ぎない」という境地に到達し、
足回りも含めた全体としての柔軟性を追求した結果として、Goという面白みもクソもない「道具」を選択しているんだ
Goだけできても仕事はない
71デフォルトの名無しさん (ワッチョイ 022c-Sfrr)
垢版 |
2020/01/18(土) 01:21:19.24ID:ciDfAHTw0
元々、サーバー側は、Ruby の1強だった!
Vagrant, Chef, Serverspec とか

数年後、
Rubyを真似したのが、Node.js で、
Go のDocker も出てきた

先行者利益を得るためには、ビジネスでは、Ruby 1強!
だから、ハーバード大学でも、小資本のベンチャーは、Rubyを勧められる

他の言語では、数年遅れる。
DSL で作りにくいし、開発が非常にややこしく、人材を集められず、費用が膨大だから、
小資本のベンチャー・起業に向かない

SASS も、Rubyで始まった!
2020/01/18(土) 02:07:34.56ID:w6J1AYPB0
つまり、Rubyはプロトタイプ用
2020/01/18(土) 02:25:10.35ID:ciDfAHTw0
小資本で起業して、新しいコンセプトの自社サービスを開始するのに、適した言語がRuby。
スタートアップ企業だから、サイトの速度は遅くてもよい

あくまで、ベンチャーは成功しないのが基本w
Rubyは実験用言語とも言える

ところが、たまに化物みたいなサイトを生み出すのも、Ruby

Rails で作った、このサイトの速度は尋常じゃない!
他の言語では、絶対に作れないw
https://dev.to/

Ruby on Rails Part21
https://medaka.5ch.net/test/read.cgi/php/1545146635/103
2020/01/18(土) 02:41:28.23ID:AhPxC9uwa
これのことか?
https://dev.to/ben/making-devto-insanely-fast
フロントエンドの設計が優秀なのと静的コンテンツにFastly使ってるから速いって
だけで、ほとんどRails関係ないな
2020/01/18(土) 03:54:28.83ID:ciDfAHTw0
でも、DB は、Rails でしょ?

ちょっと考えられないぐらいに、速いw
あり得ないw

だから、Ruby からは、こういう怪物が出てくるw
実験用言語だから、とんでもない事をやりたいような、面白い香具師が集まってくるw

Cookpad でも、Rubyの実装の中身を覗いてみようという変な企画にも、百人応募してくるw
他言語の香具師も面白がってやってくるw

それがRubyの面白い所w
知的好奇心がそそられて、何か新しいことに挑戦したくなる言語
2020/01/18(土) 09:12:19.27ID:6Wtj4R8r0
>>69
アホの東洋経済はわざと因果を逆転させてるアホ集団だから気にしない方がいい
もとから年収の高い集団が内製の新言語使いだしただけだろ

要するに、東洋経済の従業員自体の年収はそんなに高くねーモン
企業内にバカしか詰まって無いから自身が取材したノウハウの全てを使ってない
だから10億プレイヤーが東洋経済にいない

同じ理由で潰れたのがbig tomorrow
2020/01/18(土) 09:30:31.53ID:w6J1AYPB0
いやRails遅いでしょ?何と比べて速いって言ってるのさ?
2020/01/18(土) 10:05:38.54ID:Qnj8VWpB0
>>75
5chを荒らすことしかしてないお前が言っても説得力ゼロだ
2020/01/18(土) 17:00:27.15ID:gfH5d2Um0
つうかそもそも、DBはRailsってどういう意味なんや?w
8071 (ワッチョイ 022c-Sfrr)
垢版 |
2020/01/19(日) 12:09:49.13ID:qcodQ+dh0
元乃木坂46 の川後陽菜のブログ
https://kawagopro.com/

上を、下のサイトで分析したら、これも、Rails だった!
https://builtwith.com/

アイドルの会員サイトの専門の、SKIYAKI が作っているけど、どおりで速いはず!
2020/01/19(日) 12:14:17.68ID:7HHjQocqr
×どおりで
○どうりで(道理で)
2020/01/19(日) 12:40:31.29ID:Wel1D6/w0
>>81
そいつ(>>80)はいつもの荒しだから、道理がわからないのも納得だなw
2020/01/19(日) 13:11:12.72ID:AinWVopR0
いよいよRubyにも型チェックの機能が取り入れられる
型定義は別ファイルに書くようになっていて、文法は以下の感じ
class Foo
  def foo: -> void
  def to_s: -> String
      (Integer) -> String
end
このようなクラス定義によく似た何かを別ファイルに用意しなければならない(面倒だね)
この際、クラス名Fooやメソッド名foo,to_sなどを細心の注意を払って間違いなく正確に記述しなければならない
もし間違えてしまうと型チェックが働かなくなる(だろう)
そして、型チェックツールはそのことを教えてくれないだろうね
何故ならRubyは型定義が無くても動くのが前提だから、名前を間違ってても「あ、型定義無いのね」って思うだけ
なんならクラス名やメソッド名を間違えていないことをチェックするテストコードを書かなければならないかもしれない
そうしないと正しく型チェックが働いたことを誰も保証できないだろう?
「ソースコードのクラス名やメソッド名を変更したけど、型定義ファイルのそれらを修正し忘れる」
というのは普通にあり得るケース、というか一番ありがちなヒューマンエラーの類
絶対だれかヤラカス、容易に想像できる

お気づきのかたも多いだろうが、同じことを二回書かせるから間違える
これはまさに「DRYに反している」典型的事例
ところがmatzに言わせれば、ソースコード上に型を書く方が「DRYに反している」らしい
理由も意味不明 (普通に考えれば別ファイルに書く方がDRYに反している)
ttps://logmi.jp/tech/articles/321280

このように口を開けば事実と反対の事ばかり言うのがmatzであり
そんな人が作ったRuby自体も反対のあべこべ逆張り言語である
84デフォルトの名無しさん (アウウィフ FF05-otum)
垢版 |
2020/01/19(日) 15:31:51.01ID:ehZNNwbSF
俺のRubyがこんなに速いわけがない
2020/01/19(日) 23:07:31.87ID:JsYzYAKPa
入門書に飽きてきた人におすすめ
Rubyだと実例を入手しやすいからいいね

新しいプログラミング言語の学び方 HTTPサーバーを作って学ぶ Java, Scala, Clojure
https://speakerdeck.com/todokr/xin-siihurokuraminkuyan-yu-falsexue-hifang-httpsahawozuo-tutexue-hu-java-scala-clojure
https://github.com/todokr/simple-http-server
86デフォルトの名無しさん (ワッチョイ 022c-Sfrr)
垢版 |
2020/01/19(日) 23:44:41.65ID:qcodQ+dh0
実践TypeScript - BFFとNext.js&Nuxt.jsの型定義、吉井 健文、2019/6/26

この本を読んでるけど、TS も型地獄w

React(Parcel)でも、型定義ファイルがいる。
npm -i -D @types/react @types/react-dom
@types 以下に、各フレームワークの型定義ファイルを入れておく


React, Next.js, Vue.js, Nuxt.js, Express など、
各フレームワークで、TSへの型対応を進めているけど、地獄w
87デフォルトの名無しさん (ワッチョイ a12d-GCXE)
垢版 |
2020/01/20(月) 20:49:11.90ID:YZhtkMgR0
最近、誰でも高額が稼げるような言い方でRuby教材を売ってる人らが目立つな
88デフォルトの名無しさん (ワッチョイ f901-otum)
垢版 |
2020/01/21(火) 00:25:49.49ID:dRlbVwUu0
稼げるからね。
89デフォルトの名無しさん (ワッチョイ a12d-GCXE)
垢版 |
2020/01/21(火) 00:43:52.91ID:98cKibZ60
本当に稼げるんならいいけど、100万円取られて終わりじゃないの
90デフォルトの名無しさん (ワッチョイ f901-otum)
垢版 |
2020/01/21(火) 01:06:10.14ID:kOBQMwNv0
100万稼げるからねって意味だったんですけど。
91デフォルトの名無しさん (ワッチョイ 8d9b-otum)
垢版 |
2020/01/21(火) 11:25:04.38ID:USbDfMqQ0
詐欺御用達
2020/01/21(火) 12:15:08.17ID:/80lr+DT0
スコップを売って100万稼ぐんだろ

スコップ売りの少女から学ぶべきは一つ
スコップで穴を掘ることではなく、スコップの売り方
93デフォルトの名無しさん (ワッチョイ 8d9b-otum)
垢版 |
2020/01/21(火) 12:31:08.84ID:USbDfMqQ0
ruby最強ωωω
https://www.youtube.com/watch?v=7VH-N-dsq3Y
94デフォルトの名無しさん (ワッチョイ a12d-GCXE)
垢版 |
2020/01/21(火) 16:39:26.54ID:98cKibZ60
>>90
そっちか!勘違いしてたぜ
2020/01/21(火) 19:28:13.89ID:essSqG5l0
"abc".size などの . は前後に空白があってもOKだった(最近の発見)
"abc" . size
2020/01/21(火) 21:28:11.63ID:nuZnWP/f0
Windows 10, VSCode では、

関数の引数の( ) の有無とか、
obj.method arg_1
obj.method( arg_1 )

メソッドチェーンでのコメントの有無とか、
obj.method_1 # コメント
.method_2 # コメント

こういうので、エラーになったり・ならなかったりする、基準が分からないw
2020/01/21(火) 22:49:54.70ID:YQwIan5u0
Rubyは、IDEと相性が悪いからな。
動的型だけじゃなくても、文の区切りがわかりにくい文法も。
しゃあない。
2020/01/21(火) 23:13:36.42ID:Vd2KBMmO0
しゃあないわけあるかw
使ってるプラグインの作りが悪いだけだろ
2020/01/21(火) 23:27:09.32ID:nuZnWP/f0
VSCode が中心になってから、開発者全員がVSCode を使うようになって、
すべてのエディタ・IDE で使える、言語サーバーの規格化が始まった!

Ruby も対応してくれるかな?
2020/01/21(火) 23:28:44.69ID:nuZnWP/f0
Julia, Python, Ruby に対応してくれれば、

Jupyter Notebook でも良いけど
2020/01/22(水) 09:39:40.18ID:1i745hKir
メソッドチェーン中の#によるコメントは2.7.0からの新機能
2020/01/22(水) 09:50:31.20ID:mkyLzVly0
VSCodeの開発言語がVSCodeにとっては最重要言語でしょ
そうじゃない言語は傍流だから切られる

使えますよとしてるのはVSCodeに囲い込むための方便
ゆくゆくはそんな傍流には消えてほしい……とするのが普通の策略
2020/01/22(水) 10:10:14.80ID:uoDMOHZtM
MSはVSCodeをTypeScriptで書くことによって動的型に止めを刺したよね
ついでにMatzの愛するEmacsも完全にパイを奪われて死んだし、そんな因縁のエディタでRuby書くとか恥知らずもいいとこ
2020/01/22(水) 10:56:05.26ID:1i745hKir
Emacsが死んだとかどの世界の住人ですか
2020/01/22(水) 22:50:36.18ID:rp7FIzPH0
テキスト編集能力よりも、アプリケーション開発能力を優先すると、IDEが勝つ。
ターミナル経由だと、IDEは動作しようがないので、テキストエディタが勝つ。
106デフォルトの名無しさん (ワッチョイ 5f2c-++Vr)
垢版 |
2020/01/22(水) 23:10:32.35ID:fyGKoId60
require 'webrick'

srv = WEBrick::HTTPServer.new( {
:BindAddress => '127.0.0.1', :Port => 20080 } )

srv.mount( '/', WEBrick::HTTPServlet::FileHandler, './' )

Signal.trap( :INT ){ srv.shutdown } # Ctrl+C で終了
srv.start

Windows 10, Ruby 2.5 で、
カレントフォルダに、index.htm と画像ファイル、abc.jpq を置いて、
WEBrick のServer/Servlet を起動して、ブラウザで見ると、
HTTP 304 で画像を、ローカルPC のキャッシュから取得するので、見えない!

1-liner で、
ruby -run -e httpd . -p 20080
としても見えないが、ポート番号を10080 に変えると見える!

常に見えるようにするには、どうすればよい?
2020/01/22(水) 23:15:37.70ID:1i745hKir
jpqだからじゃねえの
2020/01/23(木) 00:02:00.95ID:31WWjqFP0
>>106
タイプミスを修正します!

>abc.jpq
abc.jpg
2020/01/23(木) 00:38:32.32ID:9sgUs0f40
304が返される状態にもかかわらず
画像が見えないなら基本的にはクライアント側の問題
まずはHTTPリクエストを確認しろ
2020/01/23(木) 00:49:20.77ID:31WWjqFP0
Windows 10 のローカルPC は、アクセス権限が厳しいから、

サーバーを立てても、ブラウザのローカルキャッシュを見れないのかも?
111デフォルトの名無しさん (ワッチョイ 872d-N7cG)
垢版 |
2020/01/23(木) 05:02:20.43ID:DWwoifTV0
Web開発でRubyが下火になってきてるらしいけど、一体何に移ってるの?
node.js + Reactみたいに単純な構造のものを組み合わせるのが流行ってるわけ?
2020/01/23(木) 08:38:09.14ID:WRgaKbBya
>>111
そうだよ
nodeやgoへ移ってる
2020/01/23(木) 08:54:27.38ID:WRgaKbBya
途中書き込み失礼
ちなみにRubyの需要が減ってるかというとそんなことはなくて、むしろ伸びてる。
じゃあなんでnodeやgoへ移ってるように見えるかというと、移行してるのは情報発信に積極的な意識高い層が中心だから。
彼らは主に(例えばCookpadのような)自社サービスで働いていて、事例としても目立ちやすいというわけ。
Rubyはプログラミングスクールで人気があるため低スキルエンジニアが供給過剰状態で、PHPの代替として低単価案件での採用が増えている。
それに伴い、意識の高い人は値下げ競争から離脱しつつあるの。
2020/01/23(木) 09:48:33.02ID:31WWjqFP0
VSCode の拡張機能、Live Server で見たら、画像も見れる!

WEBrick のServer/Servlet と何が違うのかな?
2020/01/23(木) 19:32:54.35ID:vOsDgWR6M
キャッシュコントロールヘッダじゃないの?
知らんけど。
2020/01/24(金) 03:55:37.06ID:L98ica9l0
ブラウザのF12 開発者ツールで指定できる!

Chrome の開発者ツールのDisable cache で、画像が表示された!

Edge では、開発者ツールのネットワークの、
常にサーバーから更新するとか、キャッシュのクリアとかかな?

HTTP リクエスト/レスポンスのCache-Control ヘッダーも、関係ありそう
2020/01/24(金) 12:41:39.57ID:yedZaC1h0
プライベートブラウジング使え
ブラウザ閉じればキャッシュやクッキーが消えて便利だぞ
2020/01/24(金) 12:43:50.75ID:2IgFvbdV0
HTTPリクエストを確認すればわかること
頼むからHTTPの基礎くらいは学んでくれ
119106 (ワッチョイ 5f2c-++Vr)
垢版 |
2020/01/25(土) 00:10:52.07ID:mLh1vP4R0
Windows 10 のローカルPC 上の、WEBrick のServer/Servlet で、
ブラウザでキャッシュ有りの時、画像が表示されないのは、なぜなのか?

結局、その理由が分からないまま

出来れば、キャッシュ有りで、画像が表示されてほしい
2020/01/25(土) 03:58:37.57ID:PRJ1sUmm0
死ねばいい
121デフォルトの名無しさん (ワッチョイ a763-gk0v)
垢版 |
2020/01/25(土) 15:52:45.46ID:WZ3Oswhu0
rubyXLでエクセルいじってるが

印刷範囲を設定したいときは、どのようにすればよいのでしょうか?
いろいろ探しても見当たらず・・
2020/01/27(月) 17:12:09.11ID:PTqFE7Wm0
ruby.hに#define memcpy(p1,p2,n) ruby_nonempty_memcpy(p1, p2, n)ってあるけど、
c++でstd::memcpyって使ってたらおかしなことにならんか?
123デフォルトの名無しさん (ワイーワ2 FF1f-FkkX)
垢版 |
2020/01/27(月) 17:24:08.84ID:Xu7tzl7qF
srcとdstの範囲が重なってるんじゃね
2020/01/27(月) 18:36:35.04ID:PTqFE7Wm0
ちょっと試したらおかしなことにならんかった
2020/01/28(火) 12:37:06.71ID:2llLtotp0
Rubyってイベントハンドラを複数登録するタイプのクラスってどう書くのが一般的な流儀ですか?

クラス継承したり特異メソッド使ったりといった書き方もありますが
あまり異端過ぎなければlambdaを使うのが楽そうかなと思ってます

# ディレクトリを巡回してファイルを探すクラス
finder = FileFinder.new
finder.on_dir_enter = lambda{|folder| puts "entered: #{folder}" }
finder.on_dir_leave = lambda{|folder| puts "left: #{folder}" }
finder.on_file_found = lambda{|file| puts "found: #{file}" }
finder.start("./")
126デフォルトの名無しさん (ワッチョイ 5fd7-hH+D)
垢版 |
2020/01/28(火) 16:48:55.02ID:viNuqCMy0
>>125

finder.on_dir_enter {|folder| puts "entered: #{folder}" }
finder.on_dir_leave {|folder| puts "left: #{folder}" }
finder.on_file_found {|file| puts "found: #{file}" }

または

finder.add_handlers(
  :dir_enter => proc { |folder| puts "entered: #{folder}" },
  :dir_leave => proc {|folder| puts "left: #{folder}" },
  :file_found => proc {|file| puts "found: #{file}" }
)

イベントハンドラ系のAPI設計に関しては、
Ruby/Tk や Ruby-GNOME 等の GUI ツールキットを参考に
2020/01/28(火) 17:18:24.30ID:nzUBCcWX0
特に理由がなければブロック渡しが一般的
簡単なEvent Emitterを自作するかライブラリ使うか

finder.on(:dir_enter) {|folder| puts "entered: #{folder}" }

ライブラリでメジャーなのはwisperかActiveSupport::Notifications
https://github.com/krisleech/wisper
2020/01/29(水) 09:22:00.90ID:AYOCyHQA0
>>121
rubyXL での印刷範囲の設定など
https://qiita.com/cog1t0/items/85bf12f07b78e66802ff

「rubyxl 印刷」で検索!
129デフォルトの名無しさん (ワッチョイ ea2c-KoMo)
垢版 |
2020/01/29(水) 13:41:46.66ID:AYOCyHQA0
Windows で、Ruby 2.5 にバージョンアップしたら、
SQLite3 のコンパイルが必要になった!

でも漏れは、1, 2GB とサイズが大きい、MSYS2 を入れていないから、
win32ole モジュールで、ADODB でアクセス出来そうです。

ADODBは、Microsoft 製のドライバーなのか。
わざわざ、SQLite3用のドライバーも作ったのか?w

win32oleは、Rubyの標準モジュールかw
COM の種類が多い

ruby -rwin32ole -e 'puts WIN32OLE_TYPE.progids.length'
#=> 2521
2020/01/29(水) 14:03:59.52ID:AYOCyHQA0
>>129
訂正

>ADODBは、Microsoft 製のドライバーなのか。
>わざわざ、SQLite3用のドライバーも作ったのか?

SQLite3 などのODBC ドライバーは、Microsoft 製じゃない。
誰かが作ったものです
131デフォルトの名無しさん (ワッチョイ 7f05-QQjh)
垢版 |
2020/02/07(金) 23:21:28.28ID:t9uaVZtz0
RubyのOcraについて質問です。

無限ループの中でタイマーカウント満了の度に処理を行って待ちに入るという動作のプログラムって実はEXE化できないという制約があったりしますでしょうか?

また、その場合の解消方法とかをご存じの方、よろしくお願い申し上げます。
2020/02/08(土) 10:32:17.79ID:hHzEGlOhr
>>131
ない
何故ならevalするだけの簡単なコードですらexe化できるから
2020/02/08(土) 13:28:21.15ID:9Nn74D/R0
OCRA の代わりに、Neri と言うのもあるみたい

Neri
https://github.com/nodai2hITC/neri/blob/master/README.ja.md
134デフォルトの名無しさん (ワッチョイ 9f7c-YOmB)
垢版 |
2020/02/10(月) 17:54:32.25ID:nkCUteta0
下記のコードでifの位置ってここでいいの。rubyの本の記述なんだけど。
2行目だけどifの方が左なんじゃないの?右でも行けるって事かな?
def greeting(country)

return 'countryを入力してください' if country.nil?
if country == 'japan'
   'こんにちは’
  else
'hello'
end
end

greeting(nil)
greeting('japan')
135デフォルトの名無しさん (ワイーワ2 FFdf-VM48)
垢版 |
2020/02/10(月) 17:55:54.47ID:JljXo4cdF
後置
136デフォルトの名無しさん (ワッチョイ 9f7c-YOmB)
垢版 |
2020/02/10(月) 18:40:17.86ID:nkCUteta0
>>135
そうなの?
理由も聞きたい
そういう仕様?って事?
2020/02/10(月) 20:46:54.23ID:cKG4UD690
わからない時はまずリファレンス
https://docs.ruby-lang.org/ja/master/doc/spec=2fcontrol.html#if

ifは前置でも後置でもいける仕様
後置ifは正式にはif修飾子(if modifier)
2020/02/10(月) 21:36:49.68ID:cuubi2Q/0
しかし、何がしたいのかはわからんコード。
文字列を返してるだけ?
2020/02/10(月) 23:17:58.15ID:8D13KkA50
そりゃ、ユーザーからの入力値チェックは、必要

まあ、デフォルト値は、nil の代わりに、空文字列にしておく手もある
2020/02/11(火) 00:09:12.87ID:dIRIcC/n0
>>136
英語勉強しろよ

I don't know if it will rain tomorrow.
(明日雨が降るかどうかわからない)
2020/02/11(火) 07:38:12.35ID:jcgFHncna
後起きifはRubyの文法的にはかなり無理があって、その実現のためだけにRubyが「全てが式」ではなくなっているという極めて特殊な構文
Matz的によほどの拘りがあるんだろうけど、違和感を感じる>>134のセンスはとても正しい
2020/02/11(火) 09:49:56.57ID:GpQNLMm40
perl後継としては外せない
2020/02/11(火) 10:04:30.75ID:Nq1ZGiCx0
perlなら当然でしょ
rubyはそこを汲んでる
2020/02/11(火) 10:14:08.59ID:dIRIcC/n0
Perlに不満ってあるの?
どれだけある?
145デフォルトの名無しさん (アウウィフ FF9b-VM48)
垢版 |
2020/02/11(火) 12:56:14.55ID:KtXysiBKF
>>141
Rubyのあちこちで見受けられるPerlの悪い所をわざわざパクったアホな例の一つだな
2020/02/11(火) 13:01:20.53ID:v/oRLdRM0
>>141
>その実現のためだけにRubyが「全てが式」ではなくなっているという極めて特殊な構文

「全てが式」ってのはstatementとexpressionに明確な区別のある言語との対比で
Rubyの特徴をわかりやすく説明するために使われてるだけ

式の一部どれをとっても全てが式になってるまともな言語があるわけない
Rubyには後置以外の修飾子だってあるしstatementもある
中途半端な知識で勘違いしてドヤるのはやめよう
2020/02/11(火) 13:17:51.03ID:D5vn67vCa
perl に比べて ruby の優っているところは?
2020/02/11(火) 13:22:48.99ID:XWZwag4pr
if/unless, while/until, rescue
2020/02/11(火) 13:27:43.83ID:eT6ZDI7H0
>>147
Perlにはオブジェクト指向ようの構文が後付で原始的なものしか搭載されてない。
アセンブラを駆使すれば何でもできるように、原始的な機能でも頑張れば
高度なオブジェクト指向機能を作ることは可能だが、
そのせいでいくつもの実装が生まれライブラリごとに使ってる
仕組みが異なり統一ができずに破綻してしまった。
Rubyは最初からオブジェクト指向
150デフォルトの名無しさん (ワッチョイ 9f74-cN98)
垢版 |
2020/02/11(火) 14:28:51.94ID:R1PPlg5z0
>>146
>式の一部どれをとっても全てが式になってるまともな言語があるわけない

LISP, Haskell, ML, …etc

>中途半端な知識で勘違いしてドヤるのはやめよう

この記事の原著者も「中途半端な知識で勘違いしてドヤ」ってるのかなぁ
・Rubyによる関数型プログラミング
 http://xtmlab.com/misc/FPwithRuby.html

なお、手続き型言語の大半が文と式を明確に分けている中で、
Ruby の「すべてが式」という思想はユニークであるが、
次世代言語 Rust でも同様な思想が採用された
以下は書籍「プログラミングRust」からの引用
> Rustはいわゆる式言語(expression language)の一つだ。
> つまり、Lispにまで遡る古い伝統に従い、すべてを式で行う。

中途半端な知識で勘違いしてドヤると恥をかくだけだよ
2020/02/11(火) 18:41:16.57ID:v/oRLdRM0
>>150
>LISP, Haskell, ML, …etc

おまえアホやろ
Lispの閉じ括弧は式なのか? シングルクウォートは式なのか?Haskellのコロンは式なのか?
if修飾子が式じゃない極めて特殊()な構文って主張はそれと同じレベルなんだけど

>この記事の原著者も「中途半端な知識で勘違いしてドヤ」ってるのかなぁ
「あらゆるすべてが式である」のすべてに何が含まれて何が含まれないのか理解してるかどうかだよ
原著者が理解してるかどうかは知らないけどお前は間違いなく理解してない

ついでに言っておくとRubyの「全ては式」が広まったのはDavid Flanaganが「The Ruby Programming Language」で他言語出身者にわかりやすく理解させるためにそれっぽいことを書いたのが理由
152デフォルトの名無しさん (ワッチョイ 9f74-cN98)
垢版 |
2020/02/11(火) 22:59:40.20ID:R1PPlg5z0
>>151
文節「すべてが式」に対する君の認識が、世間の一般常識から乖離していることを理解した
2020/02/12(水) 00:01:32.50ID:39kCYFWR0
>>152
keywordやsymbolそれ自体が式なわけないだろ?
それと同じことを主張してたの理解できたのかな?

制御構造のif式だって`if 式; end`全体で式として評価されるわけで
ifだけやendだけが式になるわけじゃない

if修飾子は`式 if 式`全体で式として評価されるわけで
後置の`if 式`だけで式になるわけじゃない

でその一部を取り出して
「その実現のためだけにRubyが「全てが式」ではなくなっているという極めて特殊な構文」
って言っちゃうのがどれだけ的外れかって話な
154デフォルトの名無しさん (ワッチョイ a701-9iBN)
垢版 |
2020/02/12(水) 01:40:12.18ID:3IloEGU30
電卓の構文解析器を作ったことがあれば、だいぶご意見が変わるはず。
155デフォルトの名無しさん (ワッチョイ ef1d-sg8N)
垢版 |
2020/02/12(水) 01:51:46.06ID:CB9IiDBv0
実務経験1年で月収80万稼げるエンジニアになった理由
https://www.youtube.com/watch?v=DrbbyGsHQic
意識が低いエンジニアこそフリーランスになれ
https://www.youtube.com/watch?v=nSEaAJlgjbQ
フリーランスエンジニアの週3労働ってどんな感じ?
https://www.youtube.com/watch?v=8yjoDCdbzMc
ぼくがスキルのない社畜ならこうやって脱する
https://www.youtube.com/watch?v=aae8xxbUlMM
初めて人を雇ったらもう二度とサラリーマンをやりたくないと思った話
https://www.youtube.com/watch?v=U0OCGRVLFsM
プログラミングは文系でも余裕で出来ます!理由を現役プログラマーが解説
https://www.youtube.com/watch?v=iBOeiSKBIW8
貧乏人こそ社会不適合者
https://www.youtube.com/watch?v=O3BT72BIBJI
元ド貧乏が教える】貧乏を抜け出すための2つの考え方
https://www.youtube.com/watch?v=IRrCgTy3ckc
より良いオファー貰ってるのに転職しないとか何考えてるの?
https://www.youtube.com/watch?v=i0J6uRhlj7o
2020/02/12(水) 02:31:04.61ID:zXn0/Xf90
>>153
もう黙ったほうがええで。
アホが漏れとる。
157150および151 (ワッチョイ 7274-XNsy)
垢版 |
2020/02/12(水) 03:15:58.26ID:1hwSKrXM0
>>153
>でその一部を取り出して
>「その実現のためだけにRubyが「全てが式」ではなくなっているという極めて特殊な構文」
>って言っちゃうのがどれだけ的外れかって話な

自分は>>141ではないが、いったいぜんたい何を話したいのか訳がわからんよ
2020/02/12(水) 06:32:46.81ID:m8mhjAm70
>>155
グロ
2020/02/12(水) 09:42:28.21ID:gfctBwevM
「Rubyでは全てが式だ」というとき、ステートメント(文)と式の区別がないことを意味するのが普通だ
言語によってはメソッドやクラスの定義も普通の式だったりするが、Rubyでそう思っている奴はいないだろう
しかしRubyではステートメントと式の区別がないというのは厳密には正しくない
文法定義のソースを見れば明らかだが、それが後置構文の存在のためであるのは事実
2020/02/12(水) 22:16:17.93ID:Pa88PYmd0
def foo(arg)
arg + 1
end(99) #=> 100
動かない
2020/02/13(木) 10:51:24.11ID:6MxuLkX50
p send(def foo(a); a + 1;end, 99) # => 100
2020/02/13(木) 21:55:21.77ID:i9bfivOD0
お、うーむ...なるほど
2020/02/13(木) 22:02:31.32ID:TNGg/IHkr
p def foo(a)
  a + 1
end.then{|s| method(s)[99]}

# => 100
2020/02/13(木) 23:08:11.62ID:0ZbbVgVA0
つまり、扱いは同じではない、ということかな?w
2020/02/13(木) 23:20:32.77ID:oR70BErs0
foo = -> (arg) {
arg + 1
}.( 99 ) #=> 100
166デフォルトの名無しさん (ワッチョイ 122c-LiuO)
垢版 |
2020/02/14(金) 12:22:11.03ID:+9NDg3r60
( ) で囲んで式にすれば、
JavaScript のIIFE (Immediately Invoked Function Expression; 即時実行関数式)みたいに、無名関数にできた!

( -> (arg) {
puts arg + 1
} ).( 99 ) #=> 100
2020/02/14(金) 12:36:32.48ID:+9NDg3r60
msys2 無しのWindows 10, Ruby 2.5 で、
WEBrick::HTTPServlet::CGIHandler は使えない!

ERROR CGIHandler:
C:/Ruby25-x64/lib/ruby/site_ruby/2.5.0/ruby_installer/runtime/msys2_installation.rb:63:in `iterate_msys_paths':
undefined method `split' for nil:NilClass (NoMethodError)

エラーログに、enable_dll_search_paths とあるから、dll でも使うのかな?
2020/02/14(金) 17:39:20.53ID:EOtBZfN80
>>166
>( ) で囲んで式にすれば、

括弧なくても定義したlambdaが返される
.()でそのlambdaのcallメソッドを呼び出してるだけ
-> (arg) { arg + 1 }.(99) でも
-> (arg) { arg + 1 }[99] でも
-> (arg) { arg + 1 }.call 99 でも同じ

ちなみにJSのvar foo = (x)=> x+1 みたいなのは関数に名前はついてないので無名関数だぞ
rubyで foo = -> (arg) { arg + 1 } と書いても
無名のlambdaをfooという変数に入れてるだけで
lambda自身に名前がつくわけではない
2020/02/15(土) 13:46:02.32ID:BIOI8zPQ0
>>167
ENV['PATH'].split(";")が失敗するってmsys2関係なくなかなかレアな環境だと思うが
環境変数をクリアしたりしてるのかい?
170167 (ワッチョイ 122c-LiuO)
垢版 |
2020/02/15(土) 17:09:24.91ID:8drC8DpT0
msys2 を入れずに、Ruby を使っているから、
コンパイルできないし、Windows 10 のネイティブDLL を使えない

Ruby 2.5 で、SQLite も使えなくなったw

WEBrick は、Rubyで実装されているから、msys2 無しでも動くと思ったけど、
WEBrick::HTTPServlet::CGIHandler で、ネイティブDLLを使っているのだろう

rubyist magazine を冒頭から読み始めたが、読み応えある!
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況