This commit is contained in:
Rikuoh Tsujitani 2024-03-24 22:20:46 +09:00
parent 39a132c7e8
commit 215aaad2a1
Signed by: riq0h
GPG key ID: 010F09DEA298C717
3 changed files with 58 additions and 20 deletions

View file

@ -179,6 +179,31 @@ Ragexp.last_match : 正規表現のマッチやキャプチャを取得できる
match? : マッチするとtrue、しなければfalseを返すのは他と同じだが内容を書き換えないので高速に処理できる
231ページまで
## 3/24
クラスの利点:堅牢なプログラムを作ることができる
↑nilではなくちゃんとエラーが返ってきたり、内容の変更を防止できる
クラス:すべてのオブジェクトが属するもの。クラスが同じであれば使えるメソッドも同じ。
オブジェクト、インスタンス、レシーバ:クラスをもとにして作られたデータの塊がオブジェクト、場合によってはインスタンスと呼ぶこともある。メソッドとの関係を説明する場合においてはレシーバと呼ぶこともある。
↑「2行目でUserオブジェクトのfirst_nameメソッドを呼び出しています。ここでのfirst_nameメソッドのレシーバはuserです」というように使う。
↑つまり「メソッドを呼び出された側」というニュアンスを強調する時にレシーバと呼ぶ
メソッド:オブジェクトが持つ動作をメソッドと呼ぶ。他のプログラミング言語では関数やサブルーチンと呼ばれている。
属性プロパティ、アトリビュートオブジェクトから取得あmたは設定できる値のことを属性と呼ぶ。
クラス名は必ず大文字で始める
User.new : オブジェクトを作成する。この際にinitializeメソッドが呼ばれる。他の言語ではコンストラクタと呼ばれている。
インスタンスメソッドの定義クラス構文の内部でメソッドを定義するとインスタンスメソッドになる。Class.methodの形式で呼び出せるようになる
インスタンス変数:同じオブジェクトの内部で共有される変数。頭に@がつく。
ローカル変数のスコープ:その変数が宣言された位置から自身が宣言されたメソッドまたはブロックの終わりまで。ローカル変数は参照する前に必ず値を代入して作成しなければならない。
↑インスタンス変数は作成する前にいきなり参照してもエラーにならずnilが返る
インスタンス変数はクラスの外部から参照できず、したい場合は参照用のメソッドを作る必要がある
イコールで終わるメソッド名name=(value)のような形式でインスタンス変数を外部から変更するメソッドを作る時などに使われる。これをセッターメソッドと呼ぶ。アクセサメソッドとも呼ぶ
単純にインスタンス変数の内容を外部から読み書きするぶんにはattr_accessorが使えるこれ「ゼロわか」でやったな。フォーマッタにかけるとこれに書き換わる。読み取り専用のattr_readerメソッド、書き込み専用のattr_writerなどもある。
クラスメソッドの定義頭にself.のついたメソッドはクラスメソッドになる。そのクラスに関連しているがインスタンスに含まれるデータは使わないメソッドを定義する場合に使われる。class << self 処理 endとしてもよい
メソッドの表記:インスタンスメソッドを表す場合にクラス名#メソッド名と書くことがある。クラスメソッドの場合はクラス名.メソッド名、またはクラス名::メソッド名と書く
255ページから

19
main.rb
View file

@ -1,5 +1,18 @@
def convert_hash_syntax(old_syntax)
old_syntax.gsub(/:(\w+) *=> */) do
"#{$1}: "
class Gate
def initialize(name)
@name = name
end
def enter(ticket)
end
def exit(ticket)
true
end
end
class Ticket
def initialize(fare)
@fare = fare
end
end

View file

@ -1,22 +1,22 @@
require 'minitest/autorun'
require_relative 'main'
class ConvertHashSyntaxTest < Minitest::Test
def test_convert_hash_syntax
old_syntax = <<~TEXT
{
:name => 'Alice',
:age => 20,
:gender => :famle
}
TEXT
expected = <<~TEXT
{
name: 'Alice',
age: 20,
gender: :famle
}
TEXT
assert_equal expected, convert_hash_syntax(old_syntax)
class GateTest < Minitest::Test
def test_gate
umeda = Gate.new(:umeda)
juso = Gate.new(:juso)
ticket = Ticket.new(160)
umeda.enter(ticket)
assert juso.exit(ticket)
end
def test_umeda_to_mikuni_when_fare_is_not_enough
umeda = Gate.new(:umeda)
mikuni = Gate.new(:mikuni)
ticket = Ticket.new(160)
umeda.enter(ticket)
refute mikuni.exit(ticket)
end
end