読者です 読者をやめる 読者になる 読者になる

感謝のプログラミング 10000時間

たどり着いた結果(さき)は、感謝でした。

Rubyの基礎の復習。Rubyデザパタ本のはじめの章。

Ruby
<スポンサーリンク>

デザインパターンプログラマの必須教養だけれど、別にJavaだけで勉強するものではなく、RubyとかPHPも使いながら学んでいきたいと思った。
同じものでも見方を変えることで深く見ることができる。
深く知ることができる。
彼女と一緒ですよ。

ことば

You Ain't Gonna Need It(必要になるまで作るな、略してYAGNI)
YANGI原則とは、今まさに必要としていない機能や設計の柔軟性を実装すべきではない、ということ。

設計の原則論

・変わるものを変わらないものから分離するということ
変更を局所的にする。
すべてのコードを調べること無く、変更の影響を限定すること。

・インターフェースに対してプログラムし、実装に対して行わないということ
carとplaneは、vehicleという抽象オブジェクトにまとめることができる。
「もしも自動車を乗り物と呼べるならば、自動車を自動車と呼ばない」

・継承より集約ということ
継承は、別々の実体を作っているわけではなく、共通の実装部分で結び付けられた2つのクラスを作っている。
例えば、VehicleクラスにEngineの機能を持たせると、エンジンの無い自転車やヨットなどのオブジェクトを作ることができない。
そこで、集約してEngineクラスを別に作るようにする。
集約とは、オブジェクトに他のオブジェクト、すなわち必要とする機能を持ったオブジェクトの参照を持たせることである。

Rubyにはプリミティブデータ型というものは存在しない。全てがオブジェクト。

Ruby入門

RubyHello World

#Hello World
puts('Hello World!')

・結果

Hello World!

Rubyでは末尾にセミコロン(;)をつけない。
つけても問題は無いが・・・。

言語は可能であればいつでもあなたを助けるが、そうでなければ決して口出しをしない、という設計原則がRubyにある。

また、変数名について、Rubyプログラマ
max_lengthというようにアンダースコアで区切った名前を使う。
maxLengthのように、キャメルケースで使うことはほとんどない。

定数は最初に大文字で始める。

Rubyは全てがオブジェクトである。プリミティブはない。

#クラスを調べる
puts(8.class)
puts(88888888888888888888.class)
puts(3.14159.class)

・結果

Fixnum
Bignum
Float

・オブジェクトが与えられたクラスのインスタンスかどうかを判定する

#インスタンスを調べる
puts('Hello'.instance_of?(String))

・結果

true

Rubyで文字列を扱う

#文字列の長さ
hoge.length

#すべてを大文字に
hoge.upcase

#すべてを小文字に
FUGA.downcase

Rubyは#{式}をダブルクォートで囲まれた文字列中に見つけると、その式の値を置き換えて文字列中に埋め込む。

JavaC#では文字列jはイミュータブル、つまりいったん文字列を作ってしまえばその文字列を変更することはできないものだった。
しかし、RubyはStringオブジェクトに対する参照として文字列が扱われるため、変更可能である。

Rubyで文字列をイミュータブルに使うには、名前の先頭にコロン(:)をつければよい。

:a_symbol
:an_other_symbol

正規表現

#penが始まるインデックス
puts(/pen/ =~ 'this is a pen.') #10

#hogeでもfugaでもない
puts(/hoge|fuga/ =~ 'foo') #nil

#すべてのものに合致する
puts(/.*/ =~ 'all in one') #0

・自作クラス
Rubyのクラスの定義は

class Book

のように大文字から始まる。
Rubyプログラマは一般的にはクラス名にはキャメルケースを使う。

Rubyコンストラクタはinitializeのこと。

class You
	def initialize ( name)
		@your_name = name
		@your_money = 0
	end
end

Rubyではオブジェクトのインスタンス変数はオブジェクトの外側からはアクセスすることができない。
明示的なreturn文がない場合、メソッドは最後に演算した式の値を返すことになる。

Rubyの継承、サブクラス、スーパークラス

Rubyは単一継承をサポートしている。すべてのクラスはたった1つの親クラスまたはスーパークラスしか持てない。
Javaとは異なり、Rubyでは定義したクラスのスーパークラスが持つinitializeが自動的に呼ばれることはない。

Rubyの例外

Rubyの例外はbegin/rescueで拾うことができる。

begin
	hoge = 1 / 0
rescue
	puts('例外!')
end

Rubyのスレッド




thread1 = Thread.new do
	sum = 0
	1.upto(1000) {
		|x| sum = sum + x
	}
	puts("sum :: #{[sum]}")
end




thread2 = Thread.new do
	product = 1
	1.upto(30) {
		|x| product = product * x
	}
	puts("kaijyo :: #{product}")
end




thread1.join
thread2.join

読んだ本

Rubyによるデザインパターン

Rubyによるデザインパターン

感謝のプログラミング

今回で感謝のプログラミングは【290時間目】
10000時間まで、あと【9710時間】