と?こに採を慕くのか?13. type User struct {
Attack int //好珍
}
func main() {
u := User{
Attack: 100,
}
//好珍Δ int の Attack に岱方を紗麻したものになる
rand.Seed(time.Now().UnixNano())
u.Attack = u.Attack + rand.Intn(10)
fmt.Println(u.Attack)
}
14. type User struct {
Attack int //好珍
}
func main() {
u := User{
Attack: 100,
}
//好珍Δ int の Attack に岱方を紗麻したものになる
rand.Seed(time.Now().UnixNano())
u.Attack = u.Attack + rand.Intn(10)
fmt.Println(u.Attack)
}
好珍τ麻のロジックが
Attack と鏡羨して砿尖されている
麿の侭で揖じように好珍τ麻をしたいrに
ロジックが嶷}する辛嬬來がある
箭坤丱薀鵐衡{屁のシミュレ`タ`
_kで旋喘するデバッグC嬬など
16. type User struct {
Attack int //好珍
}
func (u User) GetAttack() int {
rand.Seed(time.Now().UnixNano())
return u.Attack + rand.Intn(10)
}
func main() {
u := User{
Attack: 100,
}
fmt.Println(u.GetAttack())
}
User に GetAttack() を隔たせることで、
Attack と好珍τ麻のロジックが械に匯wになる
User が贋壓すれば、
械に好珍τ麻が辛嬬になる
18. type User struct {
HP, Attack, Defense int
Job string
Condition int
}
枠殻の俐屎でもよさそうだが、
ユ`ザ`は好珍Δ遼にも奉來を隔つ並が謹い
User がロジックを隔ってしまうと、
光奉來にvするI尖を畠て User が隔つことになる
User クラスの佞どんどん景寄晒してしまう
20. type User struct {
Attack Attack //ここがポイント
}
func (u User) GetAttack() int {
return u.Attack.GetPoint()
}
type Attack struct {
Point int
}
func (a Attack) GetPoint() int {
rand.Seed(time.Now().UnixNano())
return a.Point + rand.Intn(10)
}
func main() {
u := User{
Attack: Attack{
Point: 100,
},
}
fmt.Println(u.GetAttack())
}
Attack を int ではなく、
オブジェクトと彌える
Attack 徭悶にロジックを隔たせる
User は Attack.GetPoint() を柵ぶだけ
醤悶議なロジックは岑らない
27. type User struct {
Attack Attack //好珍
}
func (u User) GetAttack() int {
return u.Attack.GetPoint()
}
好珍τ麻ロジックは Attack クラスが隔っているので、
User クラスは笋錣蕕覆
28. type Attack struct {
Point int
AttackLogic AttackLogic
}
func (a Attack) GetPoint() int {
rand.Seed(time.Now().UnixNano())
return a.Point + rand.Intn(10) + a.AttackLogic.Calc()
}
type AttackLogic interface {
Calc() int
}
type XxxEvent struct {
Point int
}
func (x XxxEvent) Calc() int {
//Xxx というイベントでは好珍Δ2蔚になる
return x.Point * 2
}
AttackLogic interface を仟ラ撹
AttackLogic を困燭好ラスを
Attack にセットすれば、
朕議に栽った好珍τ麻が辛嬬になる
書指は Xxxイベント というイベント喘の
AttackLogic を喘吭している
29. func main() {
point := 100
u := User{
Attack: Attack{
Point: point,
AttackLogic: XxxEvent {
Point: point,
},
},
}
fmt.Println(u.GetAttack())
}
AttackLogic の砿尖圭隈はちゃんと深える駅勣があるが、
rgないので護
34. 書指の箭であれば、
Attack は int のままでもいいかもしれない
ただ、それはど`でもいい
書指擦┐燭ったのは仝屎盾々ではなく仝xk岔々
Oの屎盾を協xするのはyしい
どこに採を慕くのか? をしっかりと深えて、
徭蛍なりに屎しいxkをして圀しい