日常で使うRubyプログラミング

日常の作業でRubyを使う際、気になったことをChatGPTに聞いています。

標準ライブラリ・言語仕様

正規表現の基本

知識をまとめたかったので、聞いてみました。 Rubyでの正規表現は、=~演算子でマッチするかどうか判定したり、文字列に対してsub(), gsub(), scan()などを呼び出して用います。 後者については、第一引数に正規表現を指定します。第二引数は、置換テキストで…

RubyのRakeの使い方

RakeはRubyビルドツールで、MakefileのRuby版です。 あるプログラムを別のプログラムの後に実行したいといった、順序を制御したい場合、あるプログラムが別のプログラムの生成ファイルの存在を前提とする場合など、異なるタスクをつなぎ合わせて機能させたい…

RubyのThreadを用いて並行処理を行う方法

聞いてみました。 長い時間のかかる処理を、進行表示をしつつメインスレッドも実行し続けるような場面を想定しています。 進行表示をするためには、時間の掛かるスレッドで更新した値をメインスレッド等から参照する必要があります。 そのためには、スレッド…

RubyでDSL(Domain Specific Language)を設計する

ユーザー側からの入力を簡易プログラミング言語みたいにしたいと思うことがたまにあったので、DSLの作成方法を聞いてみました。 Rubyの場合は、特定のオブジェクトをレシーバーとしつつ、そのオブジェクトのコンテキストでブロック内のコードを実行させるins…

Ruby版データクラス?:Struct

使おうと思ったときにいつも定義の仕方を忘れてしまうので、気になっていたことも合わせて聞いてみました。 RubyのStructについて教えてください。 Kotlinでdata classを使う文脈で使っても良いですか? Rubyでデータクラスに類似のクラスやオブジェクト使い…

標準クラスに対し、安全にユーザー定義メソッドを加える:Refinement

Rubyは、標準クラスにユーザー定義のメソッドを加えることが簡単に出来ますが、不都合も多そうなので代替策を聞いてみました。 デコレーターパターンを用いる方法と、Ruby2.0以降で追加されたという'Refinement'を使う方法が良さそうです。 標準ライブラリの…

RubyでCSVを扱うライブラリについて

読み込み時はCSV.foreach, 書き込み時はCSV.openで行うのが良いようです。 なお、読み込み時の'converters'オプションは、以下の例では出ていませんが、CSV.parseだけでなく、CSV.foreachでも使用可能なようです。 あと、改行コードの不要な変換を避けるため…

文字列に対する正規表現操作:match, =~, scan, sub, gsub

まとめておきたかったので、聞いてみました。 ついでにKotlin, Javaでの操作も確認しましたが、Rubyはやはり、簡潔で良いですね。 Rubyで文字列に対して正規表現を用いた操作をするメソッドについて教えてください。 それぞれの手段の使い分けの目安があれば…

Rubyで日時を扱う:Time, Date, DateTime

それぞれに特徴があるようです。 夏時間も含めたタイムゾーンの取扱いは、Timeが得意なようです。 Dateは日付を、DateTimeは日時を扱うクラスですが、和や差を計算したり、前後を比較したりといったことはこちらの方が得意なようです。一方、タイムゾーンの…

Rubyのハッシュは順序を保持しているそうです

Ruby1.9から、Rubyのハッシュは順序を保持しているそうで、組み込みのsort_byなどのメソッドを使ってソートもできるようです。 ただ、sort_byの戻り値はキーと値のペアの配列なので、さらに.to_hを呼び出す必要があります。 rubyのハッシュで、keyの順序を保…