開発環境
- 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 || i == nil {
return
}
c.leftHand = i
}
func (c *character) give(to *character) {
if c == nil || to == nil || c.leftHand == nil {
return
}
to.leftHand = c.leftHand
c.leftHand = nil
}
func main() {
sword := item("剣")
king := character{name: "アーサー王"}
fmt.Println(king)
king.pickup(&sword)
fmt.Println(king)
var nilItem *item
king.pickup(nilItem)
fmt.Println(king)
var knight character = character{name: "騎士"}
fmt.Println(knight)
king.pickup(nil)
fmt.Println(knight)
king.give(&knight)
fmt.Println(king)
fmt.Println(knight)
}
入出力結果(Zsh、PowerShell、Terminal)
% go run ./knights.go
アーサー王は何も持っていない。
アーサー王は左手に剣を持っている。
アーサー王は左手に剣を持っている。
騎士は何も持っていない。
騎士は何も持っていない。
アーサー王は何も持っていない。
騎士は左手に剣を持っている。
%
0 コメント:
コメントを投稿