開発環境
- macOS Catalina - Apple (OS)
- Emacs (Text Editor)
- Windows 10 Pro (OS)
- Visual Studio Code (Text Editor)
- Go (プログラミング言語)
入門Goプログラミング (Nathan Youngman(著)、Roger Peppé(著)、吉川 邦夫(監修, 翻訳)、翔泳社)のUNIT 6(ネズミの穴を下って)、LESSON 27(nilをめぐる騒動)の練習問題の解答を求めてみる。
コード
package main
import "fmt"
type item string
type character struct {
name string
leftHand *item
}
func (c character) String() string {
if c.leftHand == nil {
return fmt.Sprintf("%vは左手に何も持っていない。", c.name)
}
return fmt.Sprintf("%vは左手に%vを持っている。", c.name, *c.leftHand)
}
func (c *character) pickup(i *item) {
if c == nil {
return
}
c.leftHand = i
}
func (c *character) give(to *character) {
if c == nil || c.leftHand == nil {
return
}
if to == nil {
return
}
to.leftHand = c.leftHand
c.leftHand = nil
}
var (
king character = character{name: "アーサー王"}
knight character = character{name: "騎士"}
)
func p() {
fmt.Printf("%v\n%v\n\n", king, knight)
}
func main() {
p()
i1 := item("剣")
i2 := item("盾")
var t character
t.pickup(&i1)
t.give(&king)
king.pickup(&i1)
p()
king.give(&knight)
p()
knight.pickup(&i2)
p()
knight.give(&king)
p()
knight.pickup(&i2)
p()
}
入出力結果(Zsh、PowerShell、Terminal)
% go run ./knights.go
アーサー王は左手に何も持っていない。
騎士は左手に何も持っていない。
アーサー王は左手に剣を持っている。
騎士は左手に何も持っていない。
アーサー王は左手に何も持っていない。
騎士は左手に剣を持っている。
アーサー王は左手に何も持っていない。
騎士は左手に盾を持っている。
アーサー王は左手に盾を持っている。
騎士は左手に何も持っていない。
アーサー王は左手に盾を持っている。
騎士は左手に盾を持っている。
%
0 コメント:
コメントを投稿