Ruby入門(2.クラス)です。
たのしいRuby 第5版を参考にしています。
Rubyエンジニアを目指す上で、ライブラリの仕様を覚えることは、ほとんど必須です。
プログラミング言語を学ぶ上で、基本となる「言語機能」を覚えることは確かに必要ですが、それよりも「ライブラリの仕様」を覚えることのほうが、領域としては広いです。
Rubyのライブラリの仕様を知っておくことで、どのような場合にどのようなAPIが存在し、使うことができるかということを、あらかじめ知っておくことができます。
幸い、Rubyは日本で生まれた言語であるため、日本語の情報が多いです。Rubyに関する情報を検索した時にも、日本語の情報がよくかかります。
本当のことを言えば、ライブラリの仕様すべてを丸暗記する必要はありません。それは不可能です。なので、Googleなどの検索エンジンを使って、言語とライブラリの仕様を「ググって開発する」ということが基本となります。
クラスやメソッドの一覧は、リファレンスマニュアルを参照のこと。
クラス | 説明 | リファレンス |
---|---|---|
Numeric | 数値のクラス | Numeric |
Array | 配列のクラス | Array |
String | 文字列のクラス | String |
Hash | ハッシュのクラス | Hash |
Regexp | 正規表現のクラス | Regexp |
IO | 入出力のクラス | IO |
File | ファイルのクラス | File |
Dir | ディレクトリのクラス | Dir |
Encoding | エンコーディングのクラス | Encoding |
Time | 時間のクラス | Time |
Proc | ブロックに関するクラス | Proc |
requireを用いることで、ライブラリや外部ファイルを読み込むことができる。
たとえば、
require "gtk"
とか、
require "socket"
とする。これだけで、Gtk::WindowやTCPSocketのようなクラスを使えるようになる。
ちなみに、requireとincludeとextendの違いについては以下を参照のこと。
GTK言語バインディングも参照のこと。
Rubyでは、メソッドの語末の!は「破壊的なメソッド」、すなわちレシーバの内容を変更するかもしれないメソッドを表す。
また、メソッドの語末の?は、「真偽値を返すメソッド」を表す。そのままif文やwhile文に指定することができる。
また、Rubyではドキュメントのような文書のために、「クラス名#メソッド」という記法を使う。これはメソッドがクラスのインスタンスメソッドであることを示している。
この記法はドキュメント内でのみ有効であり、実際のプログラムコードでは「オブジェクト名.メソッド」と使う。
Enumerableとは「数え上げる」という意味で、Mix-inで提供されている数え上げるためのモジュール。繰り返しのための多くのメソッドを提供する。
Arrayクラスのメソッドに見えて、本当はEnumerableモジュールで提供されているメソッドも少なくない。
Enumerableモジュールはeachメソッドを必要とする。eachメソッドをイテレータとして作成した上で、Enumerableモジュールをインクルードすると、これらのメソッドを使用できる。
ちなみに、比較のためのメソッド>や<などはComparableモジュールで提供されている。Comparableとは「比較可能な」という意味。使うためには<=>演算子を、a < bならば-1, a == bならば0, a > bならば1であると成り立つように定義する必要がある。
(たのしいRuby 第5版を参考に執筆しました。)
(Ruby Way 第2版 (Professional Ruby Series)を参考に執筆しました。)
Rubyでマルチスレッド処理を行う時はThreadクラスを使う。
th = Thread.new do # スレッドで行う処理をここに書く end # メインで行う処理をここに書く
スレッドの内部の変数に外部からアクセスするにはハッシュを使う。
th = Thread.new do t = Thread.current t[:x] = "Hoge" end x = th[:x]
スレッドはstopで停止したり、killで殺したり、exitで自ら終了したりできる。stopしたスレッドはrunやwakeupで復帰できる。スレッドの終了を待機するにはjoinメソッドを使う。
また、クリティカルセクションを使用するにはThread.criticalをtrueにする。クリティカルセクションを出たら、Thread.criticalをfalseに変更する。クリティカルセクションを出るまで、別のスレッドは実行されない。
ほかにも、Mutexライブラリを使ってMutexの同期を行うこともできる。
2023.08.14
状態を参照のこと。
インターフェースを参照のこと。