2020年2月11日火曜日

開発環境

入門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 コメント:

コメントを投稿