Rubyの基礎5
どうもhiroakiです。
今回も引き続き、Rubyの基礎について紹介します。Webサイトを作ろうとしている人にとってRubyは必須の言語です。自分はとにかくウェブサイトを作ってみたい人間ですので、これをなんとか習得したいと思っています。これからまとめる内容を、みなさんもぜひ参考にしてみてください。
▼前回までの記事はこちらです。
lesson12
二次元配列
二次元配列って言葉が難しいですね(笑)次のコードを見てみましょう。
値はなんでもいいです。詳細はコメント欄#を参照してください。
コード例
まずは、一次元配列の場合を思い出してください。
- list =
- while line = gets
- list=line.chomp.split(',')
- end
- p list
二次元配列は次のようにします。
- list =
- while line = gets
- line.chomp!
- list.push(line.split(","))
- end
- p list
コンマ,区切りの一行文字列をgetsで受け取り、lineに入れます。 こうすることで二次元配列をつくれます。
また、下記のlesson10コード例1との違いも比べてみてください。
新しい配列を作る
mapメソッド
mapメソッドを使えば、新しく配列をつくることができます。
- numbers = [12,22,33]
- results2 = numbers.map do |item|
- item * 10
- end
- p results2
2.のようにすると、配列から要素をひとつずつ取り出してendまでの処理をして別の変数に代入することができます。
Arrayクラスで配列を作る
- numbers = Array.new(10)
- p numbers
- numbers2 = Array.new(4,Array.new(3, 1))
- numbers2[0][1] = 2
- p numbers2
- numbers3 = Array.new(4).map{Array.new(3, 1)}
- numbers3[0][1] = 2
- p numbers3
1.はArray.new(要素数,初期値)で作成できます。
これを二次元配列にする場合は、3.のようにします。しかし、このArrayは初期値を要素数複製したものなので、4.のようにすると、4つの要素の[1]番目の値が更新されてしまいます。ここが注意です。
なので、6.のようにすると良いです。Array.newで作った配列の4要素をmapで1つずつ取り出して、その中に、3つ要素のある配列を作っています。7.で値の更新をして8.で出力すると、numbers3[0][1] の要素だけが変わったのが分かりますね。
クラスについては、次のlessonで説明します。
補足
インデックス値を使いたい場合
- team = ["銀行員", "経営者", "フリー"]
- team.each_with_index do |person, i|
- puts "#{i}:#{person}はコーヒーをたのみました。"
- end
3次元配列
3次元配列は2次元配列と同じです。
- numbers3 = [
- [[1,2],[3,4]],
- [[5,6],[7,8]]
- ]
- p numbers3[0]
- p numbers3[0][1]
- p numbers3[0][1][1]
1.のように[]を3重にすると作れます。8.のようにして値を指定します。
lesson13
クラス
次はクラスについてです。前回までにメソッドを紹介してきましたが、メソッドの目的は「処理をひとかたまりにするため」でしたよね。
クラスは「変数やメソッドをひとかたまりにしたもの」です。そして、それを呼び出して再利用したりするんです。これがオブジェクト指向言語の特徴です。
プログラミングでは「クラス=設計図」とよく例えられます。メソッドが呼び出されて初めて実行されるように、クラスも使われて初めて実行されます。クラスによって作られた「もの」をオブジェクトとか、インスタンスと言います。
クラスを作成する
- class Player # クラス定義
- def walk()
- puts "hiroakiは歩く。"
- end
- def meet(person)
- puts "hiroakiは#{person}に出会った"
- end
- end
- player1 = Player.new() # オブジェクトを生成
- player1.walk() # オブジェクトのメソッドを呼び出す
- player1.meet("トム")
クラスは「class クラス名」~「end」で定義できます。クラス名は必ず大文字で始めることに注意しましょう。この中に処理をまとめることができます。
クラス(設計図)を元に、インスタンス(実物)を生成するには、「クラス名.new」とします。「変数名 = クラス名.new」とすることで、生成したインスタンスを変数に代入できます。
クラスの中で定義したメソッド(インスタンスメソッド)は、「インスタンス.メソッド名」のように、インスタンスに対して使うようにして呼び出します。
- class Menu
- attr_accessor :name
- attr_accessor :price
- def show
- puts "これはメニューです"
- end
- end
- menu1 = Menu.new
- p menu1.name
- menu1.show
self変数
- class Menu
- atter_accessor :name
- atter_accessor :price
- def show_name
- puts "これは#{self.name}です"
- end
- end
- menu1 = Menu.new
- menu1.name = "すし"
- menu1.show_name
インスタンスメソッドの中では、「self.変数名」とすることで、インスタンス変数を扱うことができます。インスタンスメソッドでは、変数「self」に、呼び出したインスタンス自身が代入されます。
今回はひとまずこれくらいでいいでしょう。
次回以降も同様にまとめていきます。自分も学びながらですので、間違いや意見、質問等あればコメントください。よろしくお願いします。
ではでは。
もっと詳しく知りたい方は以下もご参考に。