Rubyの基本
2020.11.08
今回はこれからRubyを勉強する人のために最も重要なポイントをいくつか紹介したいと思います。
僕なりの考え方ですが、先に大まかな仕組みや押さえるべき要点を知っているだけで理解する速さが格段に違うので、少しでも勉強の手助けになれば幸いです。
では早速。
①Rubyはオブジェクト指向の言語である
ここで重要なのがクラス・メソッド・オブジェクトの概念
クラスには複数のメソッドを定義することが可能で、そのクラスから作成されたオブジェクトはクラスに定義されているメソッドが実行できる。
製品に例えて分かりやすく説明すると
クラスは設計図
オブジェクトはその設計図をもとに作られた製品
そして、その製品をメソッドで操作する・・といった流れです。
②文字列や数値もオブジェクト
文字列や数値もオブジェクトのため、それぞれの元となるクラスに定義されているメソッドが実行できる。
具体的には文字列はStringクラス、数値はNumeric(Integer、Float)クラスとなり、それぞれのクラスには文字列や数値を操作するメソッドが用意されている。
③トップレベルの考え方
Rubyプログラムを実行する基本的な流れ
クラス定義 ⇒ クラスからオブジェクトを作成 ⇒ オブジェクトのメソッドを実行
しかし、特定のクラス定義を行わずに直接メソッドだけを定義した場合は、どのクラス内からでも実行できるメソッドとして定義することができる。
さらに詳しく説明すると・・
クラス定義の外側の部分(メインプログラムの部分)はトップレベルと呼ばれ、そこで定義されたメソッドはKernelモジュールの中に追加される。
Kernelモジュールはすべてのクラスの元となるObjectクラスに読み込まれているため、トップレベルに定義されたメソッドはどのクラス内からでも呼び出すことができる。
また、メソッドを呼びたす際に呼び出し元のオブジェクト(レシーバー)を省略できるので、あたかも関数のように使用することができる。
④クラスメソッドとインスタンスメソッドの違い
クラスメソッド ⇒ 定義されたクラスに対するメソッド(クラスからオブジェクトを作成する"new"メソッドなど)
インスタンスメソッド ⇒ クラス内に定義されたメソッド(クラスから作成されたオブジェクトに対して実行するメソッド)
メソッドを実行する際の記述の仕方はそれぞれ「クラス.メソッド」「オブジェクト.メソッド」となる。
⑤変数について
Rubyにおける変数は入れ物ではなく名札であり、どこかに存在するオブジェクトに対する目印となる。
そのため他の言語のようなデータ型は存在しない。(どのようなオブジェクトに対する変数も同じ扱い)
(例)
a = "ぽんこつ"
b = a
この場合、変数aは文字列オブジェクト「ぽんこつ」の場所を指し示す名札となり、変数bは変数aと同じというわけではなく、ただ変数aと同じ場所を指し示す名札となる。
つまり、変数aが指し示す場所のオブジェクト自体を変更すれば、必然的に変数bの指し示す場所のオブジェクトも変更される。
a = "あんぽんたん" に変更した場合
変数aが指し示すオブジェクトの場所が変わるだけで、変数bが指し示す場所のオブジェクト自体は変わらないため、変数aと変数bは別々のオブジェクトを指し示すことになる。
(実行結果)
a = "あんぽんたん"
b = "ぽんこつ" となる。
【重要】ローカル変数、インスタンス変数、クラス変数、グローバル変数について
・ローカル変数とは(name)
メソッド内で使用できるが、一度メソッドを抜けると値は消えてしまう。
・インスタンス変数とは(@name)
オブジェクト毎に値を保存しておくために使用
クラス内の全メソッドで共通して使用することが出来る。
また、クラスから作成されるオブジェクト毎に固有のものとなる。
・クラス変数とは(@@name)
クラス毎に値を保存しておくために使用
同一クラスから作成されるオブジェクト全体で共通して使用することが出来る。
・グローバル変数とは($name)
全てのクラスに共通して使用できる変数
下手なプログラミングほど多用する傾向にある?(そう、僕みたいに・・)
あと、Rubyの真骨頂であるWEBアプリ開発などデータベースを活用した本格的なプログラミングを目指している方は配列とハッシュを極めるとよいです。
ちなみに当サイトのパチスロゲームでは、基礎知識のみを活用してプログラミングされています。
具体的には以下の通りです。
・各種データの登録はハッシュ、フラグやリール配列、画像などの管理は配列を使用
・クラスは大まかに3つに分けて定義
①メインループ
初期設定(フラグ各種、サウンド関連、ゲームモードのクラス定義を含む)、オブジェクトの作成やメソッドの実行など
②リール関連クラス
リールの動きなど共通するメソッドは親クラスに、第1リール・第2リール・第3リール固有のメソッドと各種ステータス(インスタンス変数)は子クラスに定義し、クラスを継承
③画面レイアウト関連クラス
画面全体のデザインや各種パーツ、演出面など描画関連はすべてここに定義
(よく使う便利な記述例)
条件演算子(三項演算子)
条件式 ? 真の時の値 : 偽の時の値
式修飾子(if修飾子)
真の時に実行する式 if 条件式
とまぁザッとこんな感じでしょうか。
ではまた次回。
僕なりの考え方ですが、先に大まかな仕組みや押さえるべき要点を知っているだけで理解する速さが格段に違うので、少しでも勉強の手助けになれば幸いです。
では早速。
①Rubyはオブジェクト指向の言語である
ここで重要なのがクラス・メソッド・オブジェクトの概念
クラスには複数のメソッドを定義することが可能で、そのクラスから作成されたオブジェクトはクラスに定義されているメソッドが実行できる。
製品に例えて分かりやすく説明すると
クラスは設計図
オブジェクトはその設計図をもとに作られた製品
そして、その製品をメソッドで操作する・・といった流れです。
②文字列や数値もオブジェクト
文字列や数値もオブジェクトのため、それぞれの元となるクラスに定義されているメソッドが実行できる。
具体的には文字列はStringクラス、数値はNumeric(Integer、Float)クラスとなり、それぞれのクラスには文字列や数値を操作するメソッドが用意されている。
③トップレベルの考え方
Rubyプログラムを実行する基本的な流れ
クラス定義 ⇒ クラスからオブジェクトを作成 ⇒ オブジェクトのメソッドを実行
しかし、特定のクラス定義を行わずに直接メソッドだけを定義した場合は、どのクラス内からでも実行できるメソッドとして定義することができる。
さらに詳しく説明すると・・
クラス定義の外側の部分(メインプログラムの部分)はトップレベルと呼ばれ、そこで定義されたメソッドはKernelモジュールの中に追加される。
Kernelモジュールはすべてのクラスの元となるObjectクラスに読み込まれているため、トップレベルに定義されたメソッドはどのクラス内からでも呼び出すことができる。
また、メソッドを呼びたす際に呼び出し元のオブジェクト(レシーバー)を省略できるので、あたかも関数のように使用することができる。
④クラスメソッドとインスタンスメソッドの違い
クラスメソッド ⇒ 定義されたクラスに対するメソッド(クラスからオブジェクトを作成する"new"メソッドなど)
インスタンスメソッド ⇒ クラス内に定義されたメソッド(クラスから作成されたオブジェクトに対して実行するメソッド)
メソッドを実行する際の記述の仕方はそれぞれ「クラス.メソッド」「オブジェクト.メソッド」となる。
⑤変数について
Rubyにおける変数は入れ物ではなく名札であり、どこかに存在するオブジェクトに対する目印となる。
そのため他の言語のようなデータ型は存在しない。(どのようなオブジェクトに対する変数も同じ扱い)
(例)
a = "ぽんこつ"
b = a
この場合、変数aは文字列オブジェクト「ぽんこつ」の場所を指し示す名札となり、変数bは変数aと同じというわけではなく、ただ変数aと同じ場所を指し示す名札となる。
つまり、変数aが指し示す場所のオブジェクト自体を変更すれば、必然的に変数bの指し示す場所のオブジェクトも変更される。
a = "あんぽんたん" に変更した場合
変数aが指し示すオブジェクトの場所が変わるだけで、変数bが指し示す場所のオブジェクト自体は変わらないため、変数aと変数bは別々のオブジェクトを指し示すことになる。
(実行結果)
a = "あんぽんたん"
b = "ぽんこつ" となる。
【重要】ローカル変数、インスタンス変数、クラス変数、グローバル変数について
・ローカル変数とは(name)
メソッド内で使用できるが、一度メソッドを抜けると値は消えてしまう。
・インスタンス変数とは(@name)
オブジェクト毎に値を保存しておくために使用
クラス内の全メソッドで共通して使用することが出来る。
また、クラスから作成されるオブジェクト毎に固有のものとなる。
・クラス変数とは(@@name)
クラス毎に値を保存しておくために使用
同一クラスから作成されるオブジェクト全体で共通して使用することが出来る。
・グローバル変数とは($name)
全てのクラスに共通して使用できる変数
下手なプログラミングほど多用する傾向にある?(そう、僕みたいに・・)
あと、Rubyの真骨頂であるWEBアプリ開発などデータベースを活用した本格的なプログラミングを目指している方は配列とハッシュを極めるとよいです。
ちなみに当サイトのパチスロゲームでは、基礎知識のみを活用してプログラミングされています。
具体的には以下の通りです。
・各種データの登録はハッシュ、フラグやリール配列、画像などの管理は配列を使用
・クラスは大まかに3つに分けて定義
①メインループ
初期設定(フラグ各種、サウンド関連、ゲームモードのクラス定義を含む)、オブジェクトの作成やメソッドの実行など
②リール関連クラス
リールの動きなど共通するメソッドは親クラスに、第1リール・第2リール・第3リール固有のメソッドと各種ステータス(インスタンス変数)は子クラスに定義し、クラスを継承
③画面レイアウト関連クラス
画面全体のデザインや各種パーツ、演出面など描画関連はすべてここに定義
(よく使う便利な記述例)
条件演算子(三項演算子)
条件式 ? 真の時の値 : 偽の時の値
式修飾子(if修飾子)
真の時に実行する式 if 条件式
とまぁザッとこんな感じでしょうか。
ではまた次回。
コメント一覧
コメント投稿